Ciao a tutti, mi sono messo a fare esperimenti con Arduino, RTC DS3231, display I2C
20x4 e tastiera a matrice 20 tasti. Raccattando informazioni a destra e a manca in rete sono riuscito a far vedere sul display sia l'orologio con la data sia i vari tasti premuti, ora vorrei provare a modificare data e ora tramite tastiera ma non ci sto capendo una mazza :-( Uso le librerie#include
#include
#include
ho cercato di capire i vari comandi leggendo il file info delle librerie ma anche li non capisco come usarli, comunque, quello che voglio
serial monitor posso mandare delle stringhe definite che cambiano i dati sul RTC ma non capisco come fare tramite tastiera.
Ringrazio i volenterosi che avranno la solita pazienza di aiutarmi :-)
Di seguito il codice:
#include #include #include
RTC_DS3231 rtc; LiquidCrystal_I2C lcd(0x27, 20, 4);
const byte ROWS = 5; //5 righe const byte COLS = 4; //4 colonne char keys[ROWS][COLS] = { {'A','B','#','*'}, {'1','2','3','U'}, {'4','5','6','D'}, {'7','8','9','E'}, {'','T'} }; byte rowPins[ROWS] = {10, 9, 8, 7, 6}; //connect to the row pinouts of the kpd byte colPins[COLS] = {2, 3, 4, 5}; //connect to the column pinouts of the kpd
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
unsigned long tempoRTC; // variabile per timer visualizzazione ora sul display
void setup() { Serial.begin(9600);
rtc.begin();
if (rtc.lostPower()) { rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); }
lcd.init(); lcd.setBacklight(0); lcd.clear();
tempoRTC = millis();
}void loop() {
if ((millis()- tempoRTC) >= 1000) { DateTime now = rtc.now(); printDateTime(now); tempoRTC=millis(); }
char key = kpd.getKey(); char kstate = kpd.getState();
if (key != NO_KEY) { lcd.setCursor(0, 2); lcd.print(key); }
if (key) { switch (key) { case '0': // se si preme il tasto 0 scrive CIAO-0 lcd.setCursor(6, 3); lcd.print("CIAO-0"); break;
case '1': lcd.setCursor(6, 3); lcd.print("CIAO-1"); break;
case '2': lcd.setCursor(6, 3); lcd.print("CIAO-2"); break; } }
if (kstate) { switch (kstate) { case HOLD: lcd.setCursor(13, 3); // se si tiene premuto un tasto viene scritto HOLD lcd.print("HOLD"); break;
case RELEASED: lcd.setCursor(0, 3); // quando si rilascia il tasto si pulisce il display lcd.print(" "); lcd.setCursor(0, 2); lcd.print(" "); break; } }
}void printDateTime(DateTime dt) //questo non ho capito bene come funziona { char dateBuffer[] = " DD/MM/YYYY "; char timeBuffer[] = " hh:mm:ss ";
lcd.setCursor(4, 0); lcd.print(dt.toString(dateBuffer)); lcd.setCursor(5, 1); lcd.print(dt.toString(timeBuffer));
}