Même si le sushi (ouais je continue avec cette vanne, étant en manque d'idées) premier est résolu, je crois qu'à force de bricoler des variables, je commence à avoir des conflits.
J'ai un message d'erreur
invalid initialization of reference of type 'int&' from expression of type 'byte {aka unsigned char}'
//définition des broches
//broches du rotary encoder
int PinCLK = 4;
int PinDT = 5;
int PinSW = 0;
//broches des leds
int PinLedG = 13; //led verte
int PinLedB = 12; //led bleue
int PinLedR = 11; //led rouge
//broche buzzer
int PinBeep = 10; //buzzer
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//création de variables
//variable du programme de chrono
int VNbTours = 0; // contient le nombre de tours //0=infini puis de 1 à 999
//variables propres à la fonction RoMenu
static long encoderpos;
byte PinCLKLast = LOW;
byte n = LOW;
//variable du buzzer
byte VBuzz = 1; //0= muet 1=son activé
//variables du LCD
byte VLCDCon = 120; //par défaut le contraste est à 120/255
byte VLCDLum = 220; //par défaut la luminosité est à 220
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
pinMode (PinCLK,INPUT);
pinMode (PinDT,INPUT);
pinMode (PinSW,INPUT);
Serial.begin (9600);
// test du buzzer
Serial.println("Buzzer on");
VBuzz=1;
FBuzzer();
delay(1000);
Serial.println("Buzzer off");
VBuzz=0;
FBuzzer();
delay(1000);
//test de la fonction RoMenu
Serial.println (RoMenu("Contraste", 50, 0, 100, 5, "Minimum", "Maximum", VLCDCon));
delay(1000);
Serial.println (RoMenu("Beep son", 1,0, 1, 1, "Sans", "Avec", Vbuzz));
delay(1000);
Serial.println (RoMenu("Nombre de tours",1,0,999,1,"Infini","999 Maxi", VNbTours ));
delay(1000);
}
void loop() {
}
//FONCTION ROMENU COMMENCE ICI///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int RoMenu(String Titre, int encoderpos, int Vmin, int Vmax, int Vinc, String TxtMin, String TxtMax, int &encorderpos) {
//paramètres; (Titre, Valeur initiale, Valeur Minimale, Valeur Maximale, Valeur d'incrementation, Mot de remplacement pour la valeur min, Mot de remplacement pour la valeur max, Nom de la variable)
Serial.println(Titre); //affiche le titre
//afficher la valeur indiquée sous la bonne forme
if (encoderpos<=Vmin) {Serial.println(TxtMin);}
else if (encoderpos>=Vmax) {Serial.println(TxtMax);}
else {Serial.println(encoderpos);}
encoderpos=encoderpos-Vinc; //rétablit la vraie valeur au démarrage
while ((digitalRead(PinSW))) { // tant qu'on n'appuie pas sur le bouton
n = digitalRead(PinCLK); //lit la valeur
if ((PinCLKLast == LOW) && (n == HIGH)) {
if (digitalRead(PinDT) == LOW) { //si sens antihoraire
encoderpos=encoderpos-Vinc; //décrémenter
delay(100);
}
else { //sens horaire
encoderpos=encoderpos+Vinc; //incrémenter
delay(100);
}
encoderpos = constrain (encoderpos,Vmin,Vmax); //rétablit la valeur mini ou maxi de la variable si elle a dépassé les limites données par l'utilisateur
//comparer la valeur à cells fournies et adapter l'affichage
if (encoderpos<=Vmin) {Serial.println(TxtMin);}
else if (encoderpos>=Vmax) {Serial.println(TxtMax);}
else {Serial.println(encoderpos);}
//delay(100);
}
PinCLKLast = n;
}
Serial.println("FIN");
//return encoderpos;
}
//FONCTION BUZZER//////////////////////////////////////////////////////
void FBuzzer() {
//fait sonner ou pas le buzzer
for (int i = 0; i<2; i++) { //for (x = 0; x <= 255; x ++)
analogWrite (PinBuzz, (255*VBuzz); //sonne si VBuzz=1, silence si =0
delay(200);
analogWrite (PinBuzz, 0);
delay(200); }
//FONCTION LedFlash///////////////////////////////////////////////////
void FLedFlash(int Led) { //int Led récupère la couleur de la led à allumer
//pour appeler cette fonction FLedFlash(G) allume la led verte// indiquer R, G, ou B
//tout éteindre
digitalWrite(PinLedR,LOW); //led R off
digitalWrite(PinLedG,LOW); //led G off
digitalWrite(PinLedB,LOW); //led B off
//allume la led définie par int Led
switch (Led) {
case R:
digitalWrite(PinLedR,HIGH);// rouge
break;
case G:
digitalWrite(PinLedG,HIGH);// verte
break;
case B:
digitalWrite(PinLedB,HIGH);// bleue
}
}
A mon avis, il n'aime pas que je passe d'un byte à un int comme ça sans prévenir...