Serre Automatique - Interface Homme/Machine

Bonjour,

Je suis en train d’essayer de faire une interface Homme/Machine sur Arduino pour l’afficher sur un Afficheur LCD avec 5 boutons poussoirs à utiliser.


Mon problème est que je n’arrive pas à faire fonctionner certains boutons et ceux qui fonctionnent ne sont pas à la bonne place.
Exemple : Le bouton haut exécute l’action droite.

J’ai chercher plusieurs programmes mais j’ai toujours le même problème.

Voici mon programme, je l’ai trouvé sur internet et j’ai essayer de voir ce qui n’allait pas mais je suis vraiment perdu en programmation.

#include <LiquidCrystal.h>

// Initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

//States for the menu.
int currentMenuItem = 0;
int lastState = 0;

void setup() {
//Set the characters and column numbers.
lcd.begin(16, 2);
//Print default title.
clearPrintTitle();
}

void loop() {
//Call the main menu.
mainMenu();
}

void mainMenu() {
//State = 0 every loop cycle.
int state = 0;
//Refresh the button pressed.
int x = analogRead (0);
//Set the Row 0, Col 0 position.
lcd.setCursor(0,0);

//Check analog values from LCD Keypad Shield
if (x < 100) {
//Right
} else if (x < 200) {
//Up
state = 1;
} else if (x < 400){
//Down
state = 2;
} else if (x < 600){
//Left
} else if (x < 800){
//Select
state = 3;
}

//If we are out of bounds on th menu then reset it.
if (currentMenuItem < 0 || currentMenuItem > 4) {
currentMenuItem = 0;
}

//If we have changed Index, saves re-draws.
if (state != lastState) {
if (state == 1) {
//If Up
currentMenuItem = currentMenuItem - 1;
displayMenu(currentMenuItem);
} else if (state == 2) {
//If Down
currentMenuItem = currentMenuItem + 1;
displayMenu(currentMenuItem);
} else if (state == 3) {
//If Selected
selectMenu(currentMenuItem);
}
//Save the last State to compare.
lastState = state;
}
//Small delay
delay(5);
}

//Display Menu Option based on Index.
void displayMenu(int x) {
switch (x) {
case 1:
clearPrintTitle();
lcd.clear();
lcd.setCursor(0,0);
lcd.print ("Reglages ");
lcd.setCursor(0,1);
lcd.print(“Temperature >”);
break;
case 2:
clearPrintTitle();
lcd.clear();
lcd.setCursor(0,0);
lcd.print (“Reglages “);
lcd.setCursor(0,1);
lcd.print (”< Arrosage >”);
break;
case 3:
clearPrintTitle();
lcd.clear();
lcd.setCursor(0,0);
lcd.print (“Reglages “);
lcd.setCursor(0,1);
lcd.print (”< Chauffage >”);
break;
case 4:
clearPrintTitle();
lcd.clear();
lcd.setCursor(0,0);
lcd.print (“Reglages “);
lcd.setCursor(0,1);
lcd.print (”< Humidite >”);
break;
}
}

//Print a basic header on Row 1.
void clearPrintTitle() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Humidite sol ");
lcd.setCursor(0,1);
lcd.print(“Temp int ext sol”) ;
}

//Show the selection on Screen.
void selectMenu(int x) {
switch (x) {
case 1:
clearPrintTitle();
lcd.print (“Regler Valeurs”);
//Call the function that belongs to Option 1
break;
case 2:
clearPrintTitle();
lcd.print (“Regler Valeurs”);
//Call the function that belongs to Option 2
break;
case 3:
clearPrintTitle();
lcd.print (“Regler Valeurs”);
//Call the function that belongs to Option 3
break;
case 4:
clearPrintTitle();
lcd.print (“Regler Valeurs”);
//Call the function that belongs to Option 4
break;
}
}

Si vous pouviez m’aider SVP merci.

bonjour,
déjà si tu prenais les bonnes valeurs comme indiqué dans le wiki :wink:
http://www.dfrobot.com/wiki/index.php/LCD_KeyPad_Shield_For_Arduino_SKU:_DFR0009

    if (adc_key_in > 1000) return btnNONE; 

    // For V1.1 us this threshold
    if (adc_key_in < 50)   return btnRIGHT;  
    if (adc_key_in < 250)  return btnUP; 
    if (adc_key_in < 450)  return btnDOWN; 
    if (adc_key_in < 650)  return btnLEFT; 
    if (adc_key_in < 850)  return btnSELECT;  

   // For V1.0 comment the other threshold and use the one below:
   /*
     if (adc_key_in < 50)   return btnRIGHT;  
     if (adc_key_in < 195)  return btnUP; 
     if (adc_key_in < 380)  return btnDOWN; 
     if (adc_key_in < 555)  return btnLEFT; 
     if (adc_key_in < 790)  return btnSELECT;   
   */

Bonjour

Je crois que tu est en train de faire à peu près le même projet que celui que j’ai fait chez moi pour ma serre

Pour l’afficheur et la gestion des boutons, j’utilise une autre bibli : <DFR_Key.h> qui semble plus facile à gérer
Voci le prog en annexe , c’est pas du travail de pro, mais ça marche

Si quelque chose peut être utile la dedans, tant mieux

Bon travail

PgmGestionserre_28mai.ino (13 KB)