Bonjour à tous, je me lance actuellement dans la création d'un nouveau projet, un afficheur de donnée arduino, celui afficherait plusieurs données: heure date température et un chrono. Je dispose de tout le matériel et j'ai déjà bien entamé la programmation de l'afficheur. Dans le programme il y a la fonction setup et loop, puis une pour chaque fonctionnalité de l'afficheur: c'est à dire la fonction heure, la fonction chrono et la fonction température. Celle-ci ne doivent comporter aucun delay() pour que l'arduino puisse détecter ou non l'appui sur le bouton destiné au changement de mode.
J'ai déjà terminé la fonction heure qui ne m'a pas posé de problèmes majeurs, la voici :
void processMenuHeure(){
DateTime now = RTC.now();
// l'heure sur la premiêre ligne du LCD
lcd.setCursor(0, 0);
lcd.print(now.hour());
lcd.print(":");
if (now.minute() < 10) {
lcd.print("0");
}
lcd.print(now.minute());
lcd.print(":");
if (now.second() < 10) {
lcd.print("0");
}
lcd.print(now.second());
// la date sur la deuxième ligne du LCD
lcd.setCursor(0, 1);
lcd.print(now.day());
lcd.print(" ");
switch (now.month()) {
case 1:
lcd.print("janvier");
break;
case 2:
lcd.print("fevrier");
break;
case 3:
lcd.print("mars");
break;
case 4:
lcd.print("avril");
break;
case 5:
lcd.print("mai");
break;
case 6:
lcd.print("juin");
break;
case 7:
lcd.print("juillet");
break;
case 8:
lcd.print("aout");
break;
case 9:
lcd.print("septembre");
break;
case 10:
lcd.print("octobre");
break;
case 11:
lcd.print("novembre");
break;
case 12:
lcd.print("decembre");
break;
}
lcd.print(" ");
lcd.print(now.year());
if((millis() - temps) > 1000){
lcd.clear();
temps = millis();
}
}
cependant les deux autres fonctions me posent quelques problèmes: premièrement je n'arrive pas à coder une fonction chrono fonctionnant sans delay():
void processMenuChrono() {
int heures,minutes,secondes,disec;
char message[16] = "";
lcd.begin(16, 2);
lcd.print("Chronometre");
if((millis() - temps) > 2000 ){
lcd.clear();
heures = 0;
minutes = 0;
secondes = 0;
disec = 0;
if(disec == 10){
disec = 0;
secondes++;
}
if(secondes == 60)
{
secondes = 0;
minutes++;
}
if(minutes == 60)
{
minutes = 0;
heures++;
}
if(heures == 24)
{
heures = 0;
}
sprintf(message,"%d,%d,%d,%d",heures,minutes,secondes,disec);
lcd.home();
lcd.write(message);
if((millis() - temps) > 100){
disec++;
temps = millis();
}
}
}
: celle-ci ne fait pas se lancer le chrono...
De plus la fonction température fait se rafraîchir l'écran lcd bien trop souvent rendant ainsi sa vue désagréable.
void processMenuTemperature(){
int tempSensor = analogRead(tempSensor);
float voltage = (tempSensor/1024.0)*5.0;
lcd.setCursor(0,0);
float temperature = (voltage - .5) * 100;
lcd.print(temperature);
lcd.print(" degres C");
if((millis() - temps) > 1000) {
temps = millis(); // je ne sais pas comment régler une fréquence de rafraîchissement moins élevée.
}
Si quelqu'un à déjà rencontré le même problème ou si quelqu'un sait comment faire, je suis preneur ![]()