Bonjour a tous
Je viens de finir la lecture de cours sur la programmation d'arduino.
J ai écrit un programme ( gestionnaire de jaccuzi) assez simple je trouve.
Il fonctionne bien mais j'aurais voulu de l'aide pour le structuration et pour l’amélioration (optimisation) de mon programme
MERCI a tous d'avance
Code:#include <LiquidCrystal.h> //declaratioçn des E/S const int BPeau = 10; const int Seau = 9; const int BPair = 8; const int Sair = 7; const int Sdegre = 6; const int Lm35 = 0; unsigned long tempseau; unsigned long tempsair; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); char messageeau[8] = ""; //Message eau char messageair[8] = ""; //Message air char messagetemp[8] = ""; //Message chauffage int etateau = LOW; //état du bouton d'eau int etatair = LOW; //état du bouton d'air int niveautemp = 0; //conversion capteur lm35 int niveaudegre = 0; // donnée en ° C int infochauff = 0; // retour d'info sortie de Sdegre //les memes variables mais "old" servant de mémoire pour constater un changement int etateau_old = LOW; //état du bouton d'eau int etatair_old = LOW; //état du bouton d'air int niveautemp_old = 0; //conversion capteur lm35 int infochauff_old =0;// retour d'info sortie de Sdegre void setup() { pinMode(Seau, OUTPUT); pinMode(BPeau, INPUT_PULLUP); pinMode(Sair, OUTPUT); pinMode(BPair, INPUT_PULLUP); pinMode(Sdegre, OUTPUT); pinMode(infochauff,INPUT_PULLUP); //paramétrage du LCD lcd.begin(16, 2); // règle la taille du LCD lcd.noBlink(); //pas de clignotement lcd.noCursor(); //pas de curseur lcd.noAutoscroll(); //pas de défilement } void loop() { recupererDonnees(); //commence par récupérer les données des boutons et capteurs if(niveautemp>= 72 && niveautemp<= 80 ) { digitalWrite(Sdegre,HIGH); } else { digitalWrite(Sdegre,LOW); } if ( digitalRead(BPeau) == HIGH ) { tempseau = millis(); // on demarre le comptage digitalWrite(Seau,HIGH); // on active la sortie } if (millis()-tempseau >= 10000) { digitalWrite(Seau,LOW); //on éteint la led } if ( digitalRead(BPair) == HIGH ) { tempsair = millis(); // on demarre le comptage digitalWrite(Sair,HIGH); // on active la sortie } if (millis()-tempsair >= 10000) { digitalWrite(Sair,LOW); //on éteint la led } if(boutonsChanged()) //si un bouton a changé d'état updateEcran(); } void recupererDonnees() { //efface les anciens avec les "nouveaux anciens" etateau_old = etateau; etatair_old = etatair; niveautemp_old = niveautemp; etateau = digitalRead(Seau); etatair = digitalRead(Sair); niveautemp = analogRead(Lm35); infochauff = digitalRead(Sdegre); niveaudegre = niveautemp *(5.0 / 1023.0 * 100.0); delay(1); //pour s'assurer que les conversions analogiques sont terminées avant de passer à la suite } boolean boutonsChanged() { if(etateau_old != etateau || etatair_old != etatair || niveautemp_old != niveautemp) return true; else return false; } void updateEcran() { //prépare les chaines à mettre sur l'écran if(etateau) sprintf(messageeau,"eau:ON"); else sprintf(messageeau,"eau:OFF"); if(etatair) sprintf(messageair,"air:ON"); else sprintf(messageair,"air:OFF"); if(infochauff) sprintf(messagetemp," Tc:ON"); else sprintf(messagetemp," Tc:OFF"); //on envoie le texte lcd.clear(); lcd.setCursor(0,0); lcd.print(messageeau); lcd.setCursor(0,1); lcd.print(messageair); lcd.setCursor(8,0); lcd.print(messagetemp); lcd.setCursor(10,1); lcd.print (niveaudegre); lcd.setCursor(13,1); lcd.print((char)223); lcd.setCursor(14,1); lcd.print("C"); }
-----