Bonsoir,
J'ai un projet Terminale SI à rendre pour la fin de l'année, et il se trouve que j'ai eu l'idée, à l'aide d'un joystick et d'un écran LCD de pouvoir naviguer entre les différents menus qui nous délivreraient plusieurs infos: ex Vitesse, Km parcourus, etc ...
J'ai donc commencé un code, mais je me retrouve bloqué à cause de mon petit manque d'expérience (il y a énormément à apprendre ^_^).
Pour tout vous expliquer, je voudrais utiliser les coordonnées du Joystick en Y pour dire:
Si Y_pin==0, alors on descend de menu (et accessoirement, si menu<=0, alors on passe au menu maxi, par exemple de 5).
Pareil pour Y_pin>=1000, on monte de menu et si menu>=6, alors on passe au menu 1.
Le problème étant que ma boucle se fait à l'infini (je pense) Et j'ai donc pensé à deux solutions:
- Passer dans la boucle une seule fois
- Sortir de la boucle si et seulement si elle est vraie
Voici le code:
#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 6, d5 = 5, d6 = 4, d7 = 3;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output
void setup() {
lcd.begin(16, 2);
pinMode(SW_pin, INPUT);
digitalWrite(SW_pin, HIGH);
Serial.begin(9600);
int menu=0;
}
void loop() {
//
//lcd.clear();
//lcd.setCursor(0,0);
//lcd.print(analogRead(X_pin));
//lcd.setCursor(0,1);
//lcd.print(analogRead(Y_pin));
//delay(100);
//
lcd.clear();
lcd.setCursor(0,0);
lcd.print(analogRead(Y_pin));
if (analogRead(Y_pin)>1000)
{
int menu=menu++;
if ((menu)>=6)
menu=0;
lcd.setCursor(0,1);
lcd.print("menu");
lcd.setCursor(5,1);
lcd.print(menu);
}
if(analogRead(Y_pin)==0)
{
int menu=menu--;
if ((menu)<=0)
menu=5;
lcd.setCursor(0,1);
lcd.print("menu");
lcd.setCursor(5,1);
lcd.print(menu);
}
delay(100);
}
Merci beaucoup de votre attention, passez une bonne soirée