Je suis en train de réaliser un menu LCD et quand je sélectionne la "date et Heure", je n'arrive pas à sortir de la boucle quand j'appuie sur le bouton "esc" afin de retourner au menu principal.
Voici une partie de mon code:
[/void time()
{
lcd.clear();
center_text("Time");
while (3)
{
if (digitalRead (statesc == HIGH))
{
menuprincipal();
break;
}
DateTime now = RTC.now();
lcd.setCursor(6, 1);
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(1, 2);
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());
delay(1000);
}
}]
Comment on peut faire pour sortir de cette boucle? Merci!!!
Avec seulement une partie du programme on ne peut pas tout deviner mais en tout cas cette ligne pose problème
while (3)
ce while est toujours vrai donc tu n'as aucune chance de sortir du while.
Il faudrait substituer au 3 une variable qui changerait en fonction de l'appui sur ta touche esc
[void time()
{
lcd.clear();
center_text("Time");
while (digitalRead (statesc == HIGH))
{
statesc = digitalRead(esc);
if (statesc == LOW)
{
break;
}
DateTime now = RTC.now();
....
}
top_menu();
}]
Y à t'il un moyen de sortir directement de la boucle car le temps d'appui sur le bouton "ESC" n'est pas identique.
Un bouton poussoir "esc" connecté sur la borne 21 ( #define esc 21) active à l'état bas.
Une variable est déclaré "int statesc = 0" . Je transcris l'état du bouton poussoir dans "statesc = digitalRead(esc);"
Je commence à réaliser un menu sur un écran Lcd 4*16 et j'espère que je suis bien parti.
[
PROGMEM prog_char top_menu_item00[]="Temperature";
PROGMEM prog_char top_menu_item01[]="Hours display";
PROGMEM prog_char top_menu_item02[]="Set Menu Style";
.....
#define btn_esc 21
#define btn_enter 22
#define btn_l 23
#define btn_r 24
#define btn_u 25
#define btn_d 26
int statesc = 0
void setup();
{ Serial.begin(115200);
lcd.begin(16,4);
}
void loop()
{
top_menu();
}
void top_menu()
{
int menu_pointer_1=0;
........
while(1)
{
lcd.clear();
center_text("Top Menu");
........
menu_pointer_1=myMenu.low.i; Pointeur du menu
switch (menu_pointer_1) Choix sélection
{
case 0:
top_menu_function_1();
break;
case 1:
time();
break;
case 2:
top_menu_function_3();
break;
default:
break;
}
}
}
void top_menu_function_1()
{
}
void top_menu_function_3()
{
}
void time()
{
lcd.clear();
center_text("Time");
while (digitalRead (statesc == HIGH))
{
statesc = digitalRead(btn_l);
if (statesc == LOW)
{
break;
}
DateTime now = RTC.now();
lcd.setCursor(6, 1);
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(1, 2);
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());
delay(1000);
}
top_menu();
}]
Je trouve que l'appui sur le bouton Esc pour revenir au menu principal (Top_menu) est un peu aléatoire. On est obligé de rester appuyer sur le Bouton poussoir pour attendre le début du programme et pour sortir de la boucle. Y'a t'il un moyen d'interrompre la boucle directement?.