Joystick Deuligne, fluidité...

Bonjour, ce code m’affiche une fréquence cardiaque sur un deuligne. Je l’incrémente ou décrémente grâce aux joysticks. Le problème est que la façon dont j’ai fait le code ne me permet pas de faire ce changement de fréquence fluidement (j’attends une seconde pour passer un battement au dessus).
Avez-vous une solution ?
Merci d’avance,
Ard3x

PS : Le code :

// include the library code:
#include “Wire.h”
#include “Deuligne.h”
#include <Tone.h>

// initialize the library with the numbers of the interface pins
static Deuligne lcd;
int note = 200;

const int R=1;
const int V=1;
const int B=1;

// — Déclaration des constantes des broches E/S numériques —

const int ledRouge=3; // Constante pour la broche 3
const int ledVert=5; // Constante pour la broche 5
const int ledBleu=4; // Constante pour la broche 6

int m=800.0;

void setup() {
Wire.begin(); // join i2c
pinMode (ledVert,OUTPUT); // Broche ledVert configurée en sortie
pinMode (ledRouge,OUTPUT); // Broche ledRouge configurée en sortie
pinMode (ledBleu,OUTPUT); // Broche ledBleu configurée en sortie
pinMode (13,OUTPUT);

// set up the LCD’s number of columns and rows:
lcd.init();
// Print a message to the LCD.
lcd.print("Rythme : ");
lcd.setCursor(13,0);
lcd.print(“bpm”);
}

void loop() {

int joystick=0;
int beta=1010;
do
{
joystick=lcd.get_key();
if (joystick==2) // top direction
{
m=m+10.0;
if (m<0)
{
m=2000.0;
}
} else
if (joystick==1) // bottom
{
m=m-10.0;
if (m>2000.0)
{
m=0.0;
}
}

float RC = 60.0 * 1000.0/(200.0+m);
lcd.setCursor(9,0);
lcd.print(int(RC));
//lcd.print(m);
float tempsOff=m;

float tempsOn=200.0;

if (RC<120 and RC>49)
{
digitalWrite(ledRouge,HIGH);
digitalWrite(ledBleu,HIGH);
digitalWrite(ledVert,LOW); // allume la couleur voulue
delay(tempsOn); // pause
digitalWrite(ledVert,HIGH); // éteint la couleur voulue
delay(tempsOff); // pause

tone(13,note,200);

lcd.setCursor(9,0);
lcd.print(int(RC));
}

if (RC>120) {

digitalWrite(ledVert,HIGH);
digitalWrite(ledBleu,HIGH);
//ledRVB(0,V,0); // allume Rouge Vert et Bleu => blanc
digitalWrite(ledRouge,LOW); // allume la couleur voulue
delay(tempsOn); // pause
digitalWrite(ledRouge,HIGH); // éteint la couleur voulue
delay(tempsOff); // pause
note=300;
tone(13,note,200);
// Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):

float RC = 60.0 * 1000.0/(tempsOn+tempsOff);
lcd.setCursor(9,0);
lcd.print(int(RC));
}

if (RC<50) {
digitalWrite(ledVert,HIGH);
digitalWrite(ledBleu,HIGH);
//ledRVB(0,V,0); // allume Rouge Vert et Bleu => blanc
digitalWrite(ledRouge,LOW); // allume la couleur voulue
delay(tempsOn); // pause
digitalWrite(ledRouge,HIGH); // éteint la couleur voulue
delay(tempsOff); // pause
note=300;
tone(13,note,200);

float RC = 60.0 * 1000.0/(tempsOn+tempsOff);
lcd.setCursor(9,0);
lcd.print(int(RC));
}

} while (beta>1000);

}

void ledRVB(int Rouge, int Vert, int Bleu)

{

//— attention - avec une LED RGB anode commune : la LED s’allume sur niveau BAS !

if (Rouge==1) digitalWrite(ledRouge,LOW); // allume couleur
if (Rouge==0) digitalWrite(ledRouge,HIGH); // éteint couleur

if (Vert==1) digitalWrite(ledVert,LOW); // allume couleur
if (Vert==0) digitalWrite(ledVert,HIGH); // éteint couleur

if (Bleu==1) digitalWrite(ledBleu,LOW); // allume couleur
if (Bleu==0) digitalWrite(ledBleu,HIGH); // éteint couleur

}

//---- fonction pour variation progressive des couleurs ----

void ledRVBpwm(int pwmRouge, int pwmVert, int pwmBleu)

{ // reçoit valeur 0-255 par couleur

//— attention - avec une LED RGB anode commune : la LED s’allume sur niveau BAS !

analogWrite(ledRouge, 255-pwmRouge); // impulsion largeur voulue sur la broche 0 = 0% et 255 = 100% haut
analogWrite(ledVert, 255-pwmVert); // impulsion largeur voulue sur la broche 0 = 0% et 255 = 100% haut
analogWrite(ledBleu, 255-pwmBleu); // impulsion largeur voulue sur la broche 0 = 0% et 255 = 100% haut

}

Ton problème vient de l'utilisation de delay() pour créer des temporisation. Cette fonction est simple mais elle arrête l'exécution du programme pendant toute la durée de la temporisation. Si tu veux que ton programme soit plus réactif, il faut remplacer delay() par une temporisation basée sur l'usage de la fonction millis(). Celle-ci retourne un temps et tu testes si une une borne a été franchie. Je te conseille de regarder dans les exemples de code qui sont intégrés à l'IDE arduino. Vas voir dans Exemples/02. Digital/BlinkWithoutDelay. Ce petit programme fais clignoter une LED sans utiliser la fonction delay().