Comment enregistré une information saisie

Fermé
arms - 25 févr. 2016 à 05:24
 Utilisateur anonyme - 23 avril 2016 à 07:40
Bonjour,

je besoin de votre aide si quelle qu'un qui peut m'aider svp je suis bloqué.
je fais un programme avec une carte mega,afficheur Lcd et clavier 16 touches.
Mon programme consiste de faire naviguer entre les pages et enregistre les informations sélectionné,mon problème c'est si je saisie une valeur je peut pas enregistrer ou reculer à la page précédente.voilà mon programme:

#include <Keypad.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(34, 35, 30, 31, 32, 33);
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Three columns
char keys[ROWS][COLS] = {
{'1', '2', '3', 'h'},
{'4', '5', '6', 'b'},
{'7', '8', '9', 'r'},
{'*', '0', '#', 's'}
};

// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = {22, 23, 24, 25 };
// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
byte colPins[COLS] = { 26, 27, 28, 29 };
int p = 0;
unsigned int valeur;
char touche;

// Create the Keypad
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

#define ledpin 13


void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
int p = 0;

}
///////////////////////////////////////
void loop() {
lcd.setCursor(0, 0);
char key = kpd.getKey();
//contenu es page
switch (p)
{
case (0):
{
lcd.print("bonjouur !!!");


lcd.setCursor(0, 1);
lcd.print("clike select");
lcd.setCursor(0, 0);
} break ;
case (1):
{

lcd.setCursor(4, 1);
lcd.print("ref moule");
}


break ;
case (2) :

{
lcd.setCursor(4, 2);
lcd.print("ref plasdefr");


}
break ;
case (3):
{

lcd.setCursor(4, 1);
lcd.print("NOMBRE DE PIECES");
} break ;
case (4):
{

lcd.setCursor(4, 1);
lcd.print("enregistré");
} break ;
case (11):
{

lcd.setCursor(4, 1);
lcd.print("moule 1");
} break ;
case (12):
{

lcd.setCursor(4, 1);
lcd.print("moule 2");
} break ;
case (13):
{

lcd.setCursor(4, 1);
lcd.print("moule 3");
} break ;
case (21):
{

lcd.setCursor(4, 1);
lcd.print("plas 1");
} break ;
case (22):
{

lcd.setCursor(4, 1);
lcd.print("plas 2");
} break ;
case (23):
{

lcd.setCursor(4, 1);
lcd.print("plas 3");
} break ;
case(31):{
lcd.setCursor(0,1); // se positionne en colonne,ligne
valeur=SAISIE_uINT();



}break;
}

if (key)
{
lcd.print(key);
switch (key)
{
case '*':
digitalWrite(ledpin, LOW);
break;
case '#':
digitalWrite(ledpin, HIGH);
break;
case 's':
{ lcd.clear();
if (p == 0)p = 1;
else if (p == 1)p = 11;
else if (p == 2)p = 21;
else if (p == 3)p = 31;
// else if (p == 31)p = 3;

}

break;
case 'b':
{ lcd.clear();
if (p == 1)p = 2;
else if (p == 2)p = 3;
else if (p == 3)p = 4;
else if (p == 11)p = 12;
else if (p == 12)p = 13;
else if (p == 13)p = 14;
else if (p == 21)p = 22;
else if (p == 22)p = 23;
else if (p == 23)p = 24;


}

break;

case 'h':
{ lcd.clear();
if (p == 2)p = 1;
else if (p == 3)p = 2;
else if (p == 4)p = 3;
else if (p == 12)p = 11;
else if (p == 13)p = 12;
else if (p == 14)p = 13;
else if (p == 22)p = 21;
else if (p == 23)p = 22;
else if (p == 24)p = 23;

}

break;

case 'r':
{if(p==1||p==2||p==3||p==4)p=0;
else if(p==11||p==12||p==13||p==14||p==21||p==22||p==23||p==24||p==31)p=1;}
break;
default:
Serial.println(key);

}

// if (key == '1') {
// p = 1 ;}
}
}
////////////////////////
unsigned int SAISIE_uINT (){ // fonction qui renvoie une valeur unsignedint (16bits)

//---- variables locales utilisées dans la fonction
unsigned char saisie_int[8]={0,0,0,0,0,0,0,0}; // crée un tableau de variables char pour saisir valeur
unsigned char compt_touche_int; // variable de comptage du nombre de touches saisies
unsigned long nombre_saisi_int; // variable de calcul du nombre saisi
unsigned char touche_int; // variable locale pour valeur touche appuyée de 0 à 15

//---- initialisation des variables utilisées ----
compt_touche_int=0; // aucune touche saisie au démarrage
nombre_saisi_int=0; // initialise la variable

//------ gestion appui touche sur clavier

while (compt_touche_int<6) { // tant que pas appuis maxi = 5 pour int (valeur maxi=65535)

touche_int= kpd.getKey(); // lecture de la touche appuyée

if (touche_int!= NO_KEY){ // si une touche a été frappée -- gestion de la touche appuyée


if (touche_int=='#')break;// // sort du while si appui sur #
if (touche_int=='*'){lcd.clear();break;}
if (touche_int=='h')break;
if (touche_int=='b')break;

for (byte i=0;i<ROWS;i++) {
for (byte j=0; j<COLS;j++){

if (touche_int==keys[i][j]) touche_int=keys[i][j]-48; // extrait valeur numérique à partir ASCII
}
}
saisie_int[compt_touche_int]=touche_int; //enregistre le caractère dans tableau code_saisi
lcd.print(char(saisie_int[compt_touche_int]+48)); // affiche valeur à emplacement actuel sur LCD

compt_touche_int=compt_touche_int+1; // on incrémente la variable compt qui mémorise le nombre de caractères saisis

//delay ()

touche_int=255; // remet à 255 la variable touche... pour éviter prise en compte même appui à plusieurs reprises

} //---- fin gestion appui clavier

}// fin du While = fin de la lecture du clavier

//--------- calcul valeur saisie en fonction du nombre de chiffres saisis ---------
if (compt_touche_int==0)nombre_saisi_int=0; // si aucun chiffre saisi
if (compt_touche_int==1)nombre_saisi_int=saisie_int[0]; // si 1 seul chiffre saisi
if (compt_touche_int==2)nombre_saisi_int=(saisie_int[0]*10)+(saisie_int[1]*1); // si 2 chiffres saisi
if (compt_touche_int==3)nombre_saisi_int=(saisie_int[0]*100)+(saisie_int[1]*10)+(saisie_int[2]*1); // si 3 chiffres saisi
if (compt_touche_int==4)nombre_saisi_int=(saisie_int[0]*1000)+(saisie_int[1]*100)+(saisie_int[2]*10)+(saisie_int[3]*1); // si 4 chiffres saisi
if (compt_touche_int==5)nombre_saisi_int=(saisie_int[0]*10000)+(saisie_int[1]*1000)+(saisie_int[2]*100)+(saisie_int[3]*10)+(saisie_int[4]*1); // si 5 chiffres saisi

//------ à réaliser en sortie de lecture du clavier ----


compt_touche_int=0; // réinitialise le nombre de touche saisies

//----- renvoi de la valeur saisie ----

return (nombre_saisi_int); // renvoie la valeur - sortie de la fonction






}

1 réponse

Utilisateur anonyme
23 avril 2016 à 07:40
Bonjour,
Ici, ce que tu cherches à faire, c'est afficher une page en fonction du nombre saisi sur le clavier.
Enfait, l'objectif est de segmenter ton affichage en plusieurs fonctions : un fonction qui va traiter la valeur saisie, et une qui va gérer l'affichage.


//Variables globales
int page;
char key;

void loop(){
key = keypad.getKey();
traitement();
delay(25);
}

void traitement(){
if (key = NO_KEY) key=page;
else page=key, affichage_page();
}

affichage_page(){
switch(page){
case 1:
affichage_page1();
break;
//etc.
}
}


Voilà, ici il faut récupérer la valeur entrée, key, dans la variables page. La variable page sert de sauvegarde ici au travers du loop(). Voilà, je te laisse comprendre la suite.
0