Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //LCD 16x2 PCF8574AT + RTC Versione IDE 1.6.0
- #include <Wire.h>
- #include <RTClib.h>
- RTC_DS1307 RTC;
- #include <LiquidCrystal_I2C.h>
- #define DS1307_I2C_ADDRESS 0x68
- LiquidCrystal_I2C lcd(0x3F,16,2);
- char daysOfTheWeek[7][10] = {"Do", "Lu", "Ma", "Me", "Gio", "Ve", "Sa"};
- char bufferRX[50];
- void setup()
- {
- Serial.begin(9600);
- Serial.println("Per aggiornare data e ora inviare il seguente comando: ");
- Serial.println("\"setDateTime anno, mese, giorno, ora, minuti, secondi\"");
- Serial.println("Esempio: setDateTime, 2018, 9, 8, 17, 30, 00");
- lcd.init();
- lcd.backlight();
- }
- void loop()
- {
- // Come sai, non amo l'istruzione delay().
- // Quindi la rimuoviamo, ma aggiorniamo cmq una volta al secondo
- static unsigned long updateTime;
- if(millis() - updateTime > 1000){
- updateTime = millis();
- DateTime now = RTC.now();
- lcd.clear();
- lcd.setCursor(0, 0);
- LCDPrintNum(now.hour());
- lcd.print(":");
- LCDPrintNum(now.minute());
- lcd.print(":");
- LCDPrintNum(now.second());
- lcd.print(" ");
- lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
- lcd.setCursor(0, 1);
- LCDPrintNum(now.day());
- lcd.print("/");
- LCDPrintNum(now.month());
- lcd.print("/");
- lcd.print(now.year(), DEC);
- }
- // Vediamo se arriva qualcosa dalla seriale
- readSerial();
- }
- // Funzione per stampare ad esempio 02 al posto di 2
- void LCDPrintNum(int num){
- if(num <10)
- lcd.print("0");
- lcd.print(num);
- }
- void readSerial(){
- while (Serial.available() > 0) {
- // Leggiamo tutto quello che arriva dalla seriale e salviamolo nell'array di char bufferRX[]
- Serial.readBytesUntil('\n', bufferRX, sizeof(bufferRX) - 1);
- /*
- * Se c'è il comando giusto eseguiamo l'aggiornamento dell'orario dell'RTC
- * Verrà usata la funzione C++ strtok che consente di splittare una stringa con uno specifico delimitatore,
- * nel nostro caso la virgola ','. I valori verranno quindi salvati nell'array di int tdArray[] per usarli
- * facilmente dove necessario per impostare il nuovo orario.
- */
- if(strstr(bufferRX, "setDateTime,")){
- int tdArray[6];
- char * pch = strtok (bufferRX, " ,"); // Split string into tokens
- unsigned int i = 0;
- while (pch != NULL){
- if(i > 0) // Il primo valore trovato "setDateTime" non lo salvo nell'array
- tdArray[i-1] = atoi(pch); // Converto la stringa in un intero con l'istruzione atoi()
- pch = strtok (NULL, " ,"); // troviamo la substring successiva
- i++;
- }
- // Per creare una variabile DateTime è necessario questo formato: (anno, mese, giorno, ora, minuti, secondi)
- DateTime newTime = DateTime(tdArray[0], tdArray[1], tdArray[2], tdArray[3], tdArray[4], tdArray[5]);
- RTC.adjust(newTime);
- Serial.println("Impostato nuovo orario.");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement