Go Down

Topic: Serre Automatique - Interface Homme/Machine (Read 1 time) previous topic - next topic

Serre

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.


Quote

#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.

infobarquee

bonjour,
déjà si tu prenais les bonnes valeurs comme indiqué dans le wiki ;)
http://www.dfrobot.com/wiki/index.php/LCD_KeyPad_Shield_For_Arduino_SKU:_DFR0009
Code: [Select]
    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;   
   */
AUCUNE AIDE PAR MP

casper22

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

Go Up