#include <LiquidCrystal_I2C.h>
uint8_t button_estate = HIGH;
int VRx = 0;
int VRy = 0;
const int SW = 2;
int btn_push, mapX, mapY, btnRead, numero_menu = 1, sub_menu = 0, sub_menu2 = 0;
int line[5]={0,1,2,3,4}, line_bk[5], line_bk2[5], index, index2;
LiquidCrystal_I2C lcd(0x27,16,3);
void setup() {
// placez votre code d'installation ici, à exécuter une fois.
// Serial.begin(9600);
pinMode(SW, INPUT_PULLUP);
lcd.init();
lcd.backlight();
}
uint8_t flancoSubida(){
uint8_t nouvelle_valeur = digitalRead(SW);
uint8_t result = button_estate != nouvelle_valeur && nouvelle_valeur == 1;
button_estate = nouvelle_valeur;
return result;
}
int leeJoystick(){
VRx = analogRead(A0);
VRy = analogRead(A1);
mapX = map(VRx, 0, 1023, 0, 7); // Navigation gauche-droite [1-2]
mapY = map(VRy, 0, 1023, 7, 0); // Navigation haut - bas [3-4]
btn_push = flancoSubida(); // appuyez sur Entrée [ 5 ]
// Déplacement du joystick [ 0 ]
if(mapX == 0){btnRead = 1;}
else if(mapX == 7) {btnRead = 2;}
else if( (mapY == 7) && (sub_menu2 == false)) {btnRead = 3;}
else if( (mapY == 0) && (sub_menu2 == false)) {btnRead = 4;}
else if(btn_push == 1) {btnRead = 5;}
else btnRead = 0;
return btnRead;
}
// Menu coulissant avec joystick sur écran LCD
void selec_menu(){
switch(btnRead){
case 4:
menu_top();
numero_menu+=1;
if(numero_menu > 5) numero_menu =1; //menu_number choisit le sous-menu.
break;
case 3:
menu_bas();
numero_menu-=1;
if(numero_menu < 1) numero_menu =5; //menu_number choisit le sous-menu.
break;
case 2:// vers la droite
sub_menu=true; sub_menu2=true;
//lcd.clear();
break;
case 1:// vers la gauche
sub_menu=false; sub_menu2=false;
//lcd.clear();
break;
case 5:
sub_menu=true; sub_menu2=true;
//lcd.clear();
break;
case 0:
break;
}
}
void menu_top(){
for(int i=4; i>-1; i--)
{
index = i-1;
line_bk[i] = line[i];
if(index < 0) line[i] = line_bk[i+4];
else line[i] = line[i-1];
}
}
void menu_bas(){
for(int j=0; j < 5; j++)
{
index2 = j+1;
line_bk2[j]=line[j];
if (index2 > 4) line[j]=line_bk2[j-4] ;
else line[j]=line[j+1];
}
}
void printMenu(){
lcd.setCursor(0,0);
lcd.print(">");
lcd.setCursor(1,line[0]);
lcd.print("1) M E N U 1 ");
lcd.setCursor(1,line[1]);
lcd.print("2) M E N U 2 ");
lcd.setCursor(1,line[2]);
lcd.print("3) M E N U 3 ");
lcd.setCursor(1,line[3]);
lcd.print("4) M E N U 4 ");
lcd.setCursor(1,line[4]);
lcd.print("5) M E N U 5 ");
}
void printSubMenu(){
lcd.setCursor(0,0);
lcd.print(">");
switch(numero_menu){
case 1:
lcd.setCursor(1,0);
lcd.print("Temp C ");
lcd.setCursor(1,1);
lcd.print("Humidite % ");
break;
case 2:
lcd.setCursor(1,0);
lcd.print("Tension efficace");
lcd.setCursor(1,1);
lcd.print(" ... ");
break;
case 3:
lcd.setCursor(1,0);
lcd.print(" connexion eth0 ");
lcd.setCursor(0,1);
lcd.print(" ... ");
break;
case 4:
lcd.setCursor(1,0);
lcd.print(" Porte ouverte ");
lcd.setCursor(0,1);
lcd.print(" ... ");
break;
case 5:
lcd.setCursor(1,0);
lcd.print(" Alertes ");
lcd.setCursor(0,1);
lcd.print(" ... ");
break;
}
}//del if
void loop() {
// put your main code here, to run repeatedly:
leeJoystick(); // Manette de jeu.
selec_menu();
if(!sub_menu) { printMenu();}
if(sub_menu2) { printSubMenu();}
}