Go Down

Topic: Creation d'un menu afficher sur LCD keypad (Read 1 time) previous topic - next topic

calbatorix

bonjour, voila depuis un petit nombre d'heure je tente de crée un menu me permettent de naviguer dans les diverse tache de mon projet mais je n'y arrive pas.
Le but serai que en appuyant sur le bouton UP la variable "n" subisse une décrémentation et que en appuyant sur le bouton Down la variable  subisse une incrémentation.
cela pour que sur la deuxième ligne du lcd je puisse afficher la température et le niveau de batterie puis j'appuie sur le bouton Down et la s'affiche lumière,je r'appuie sur le bouton Down un autre menu s'affiche et ainsi de suite.
Code: [Select]
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int lcd_key =0;
int adc_key_in =0;
#define bntRIGHT 0
#define bntUP 1
#define bntDOWN 2
#define bntLEFT 3
#define bntSELECT 4
#define bntNONE 5

int read_LCD_buttons()
{
  adc_key_in = analogRead(0);
  if (adc_key_in >1000) return bntNONE;
  if (adc_key_in <50) return bntRIGHT;
  if (adc_key_in <195) return bntUP;
  if (adc_key_in <380) return bntDOWN;
  if (adc_key_in <555) return bntLEFT;
  if (adc_key_in <790) return bntSELECT;
  return bntNONE;
}
void affichage (int n)
{
  lcd_key = read_LCD_buttons();
  switch (lcd_key)
  {
    case bntUP:
    {
      n++;
      break;
    }
    case bntDOWN:
    {
      n--;
      break;
    }
  }
}
void menu (int nombre)
{
  nombre = afficheur();
  if (nombre>3)
  {
    nombre =0;
  }
  else if (nombre<0)
  {
    nombre =3;
  }

 
   
void setup()
{
  lcd.begin (16,2);
  lcd.setCursor (0,0);
  lcd.print ("MENU");
}
void loop()
{
  lcd.setCursor(0,1);
  switch (menu())
  {
    case 0:
    {
     lcd.print("rien");
     break;
    }
    case 1:
    {
      lcd.print("lumiere");
      break;
    }
    case 2:
   {
    lcd.print("temperature");
    break;
   }
   case 3:
   {
     lcd.print("nourriture");
     break;
   }
  }


chabot380

Ubuntu16.04
ARDUINO UNO / Atemga2560pro / Arduino Nano
Technicien Télé Vidéo à la retraite.

coyotte

Hello,

A première vue (mais je peux me tromper) le problème viendrait de la procédure Menu() qui est sensé ne rien retourner (void) mais que tu utilises comme une fonction ( switch (Menu() ).
Mon C est un peu loin mais je pense que quelque chose comme ceci devrait mieux fonctionner :
Code: [Select]

int menu (void)
{
int  nombre = afficheur();
  if (nombre>3)
  {
    nombre =0;
  }
  else if (nombre<0)
  {
    nombre =3;
  }
  return nombre;


Syntaxe à confirmer, je n'ai pas d'outil sous la main pour le faire...
Le principe est de transformer la procédure en une fonction qui retourne un entier.

Le même "problème" existe au niveau de Afficheur()/Affichage() (Ce code compile réellement ??? ;-) )

En espérant que cela pourra t'aider,

Michel
Conference over procrastination has been postponed to tomorrow

calbatorix

Merci pour cette réponse.Il y a encore une petite erreur dans le programme, mais tu ma bien aide.
je n'avais pas pensée a  mettre "return nombre;".
je pence pouvoir corriger a présent . :)

Go Up