Save,
nel mio precedente progetto avevo usato un potenziometro e l'ingresso analogico del mio arduino mega2560 per inserire il valore del tempo in un timer.
ho deciso di provare ad evolvere tutto il vecchio progetto, e per far questo ho voluto provre ad inserire al momento dell'accensione dellarduino un menu, dove alla pressione del numero corrispondente deve accedere a determinate funzioni.
Sono riuscito ad inserire dei dati tramite keypad 4x3, solo che questi dati non riesco a portarli fuori.
una volta che esco dal ciclo if del mio keypad il valore ritorna sempre a zero.
vi posto un pezzo del programma.
#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
#include <Keypad.h>
const byte rows = 4;
const byte cols = 3;
char keys[rows][cols] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins[rows] = {41, 43, 45, 47}; //connetto le 4 righe ai pin
byte colPins[cols] = {49, 51, 53}; //connetto le 3 colonne ai pin
int menuiniz = 0; //per far scrivere solo una volta il menu
int vtime = 0; //contatore delle cifre per inserire tempo
char tempo[4]; //variabile del tempo all'esplosione
int itempo; //contatore variabile tempo all'esplosione
int sec = 59;
int curtempo = 11; //cursore per tempo
int admin = 0;
int totale=0;
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cols);
void setup() {
lcd.begin(16, 2);
pinMode(41, INPUT); //keypad
pinMode(43, INPUT); //keypad
pinMode(45, INPUT); //keypad
pinMode(47, INPUT); //keypad
pinMode(49, INPUT); //keypad
pinMode(51, INPUT); //keypad
pinMode(53, INPUT); //keypad
keypad.setDebounceTime(50);
}
void loop() {
if (admin == 0) {
itempo = 0; //azzera char tempo[itempo]
curtempo = 11; //azzera il cursore tempo
if (menuiniz == 0) {
lcd.clear();
lcd.print("1set time 2test");
menuiniz = 1; //blocca il ripetersi della scritta menù iniziale
}
char menukey = keypad.waitForKey();
if (menukey == '1') {
lcd.clear();
for (vtime = 0; vtime < 4; vtime++) { //max 999 la quarta pressione è l'ok ad andare avanti
lcd.setCursor(0, 0);
lcd.print("imposta tempo");
tempo[itempo++] = keypad.waitForKey();
lcd.setCursor(curtempo, 1);
lcd.print(tempo[vtime]);
curtempo++;
}
if (itempo == 4)
{ lcd.clear();
lcd.print("time ");
delay(1000);
int ttotale = (int)((((tempo[0] - '0') * 100) + ((tempo[1] - '0') * 10) + (tempo[2] - '0'))); // imposto il timer
lcd.print(ttotale); //qui tutto ok,mi stampa il numero corretto che o inserito
delay(1000);
menuiniz = 0;
admin = 1;
}
}
if (menukey == '2') {
lcd.clear();
lcd.print("scelto il 2");
delay(1000);
admin = 1;
}
if (menukey == '3') {
lcd.clear();
lcd.print("scelto il 3");
delay(1000);
}
}
lcd.clear();
lcd.print("ttotale");
lcd.print(ttotale);//non stampa ttotale
delay (2000);
}