AIUTO!!! Problema con settaggio data e ora con modulo RTC DS1307

Salve a tutti, avrei bisogno di un'aiuto urgente. Ho creato la Ciabatta domotica, un progetto di Mauro Alfieri.
sul display dovrebbe uscirmi la data e l'ora ma invece mi esce solo ciò che riportato in foto.

Questo è il programma seguente. Cos'è che devo modificare?

#include <SoftwareSerial.h> //includi tutte le librerie necessarie al funzionamento della ciabatta arduino pro. In particolare la Wire, l’RTC e la LiquidCrystal_i2C;
// servono per i rispettivi moduli, mentre al SoftwareSerial ti serve per comunicare con il modulo BT;
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>

/*********************************************************************/

#define BT_TX_PIN 7 //definisce i due pin Tx ed Rx al quale è collegato il modulo HC-06 (BT);
#define BT_RX_PIN 8

/*********************************************************************/

SoftwareSerial mySerial(BT_TX_PIN, BT_RX_PIN); //crea l’istanza dell’oggetto SoftwareSerial che userà per comunicare con il modulo bluetooth;
RTC_DS1307 RTC; // crea l’istanza dell’oggetto RTC che serve per comunicare con l’RTC;
LiquidCrystal_I2C lcd(0x27,20,4); //crea l’istanza dell’oggetto LiquidCrystal che serve per inviare i messaggi sul display;

/*********************************************************************/

char lettera; //crea le variabili di buffer, per scrivere sul display, e dei pin a cui sono connessi i relé;
char buffer[16];

byte rele1=2;
byte rele2=3;
byte rele3=4;
byte rele4=5;

int previousSec = 0; //definisci la variabile globale di tipo int che userà per tener traccia del passare del tempo per aggiornare l’ora sul display;

uint8_t SPENTO[8] = {0x0E, 0x11, 0x11, 0x11, 0x0A, 0x0E, 0x0E, 0x04,}; //definisci due “custom character” ossia due caratteri disegnati
uint8_t ACCESO[8] = {0x0E, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x04,}; //, uno rappresenta una lampadina accesa ed uno quella spenta;

/*********************************************************************/

void setup() {
Serial.begin(9600); //inizializza tutte le istanze verso Seriale, mySerial, Rtc e Lcd;
mySerial.begin(9600);
Wire.begin();
RTC.begin();
lcd.init();
lcd.backlight(); // invia il comando di accensione della retroilluminazione del display;

pinMode(rele1, OUTPUT); //imposta i pin connessi ai rele come OUTPUT e porta a HIGH le rispettive uscite;
pinMode(rele2, OUTPUT);
pinMode(rele3, OUTPUT);
pinMode(rele4, OUTPUT);

digitalWrite(rele1, HIGH);
digitalWrite(rele2, HIGH);
digitalWrite(rele3, HIGH);
digitalWrite(rele4, HIGH);

if (! RTC.isrunning()) { //servono a impostare l’orario dell’RTC la prima volta che lo colleghi ad arduino;
Serial.println("RTC is NOT running!");
RTC.adjust(DateTime(DATE, TIME));
}

lcd.createChar( 0,SPENTO ); //definisci i due caratteri speciali, disegnati da te alle linee 40-41, come indici 0 ed 1 da usare nello sketch;
lcd.createChar( 1,ACCESO );
lcd.setCursor ( 0,0 );
lcd.print("Ciabatta BT v.2"); //scrivi sulla prima linea del display il testo “Ciabatta BT v.2” e attendi 2 secondi prima di pulire il display con il metodo clear();
delay(2000);
lcd.clear();
lcd.setCursor( 12,0 ); //imposta il cursore nella posizione 12, della prima linea, e disegna i 4 caratteri personalizzati;
lcd.write(0);
lcd.write(0);
lcd.write(0);
lcd.write(0);
}

/*********************************************************************/

void loop() {
DateTime now = RTC.now(); // richiedi all’RTC la data e l’ora corrente;

if(now.second() != previousSec) { //verifica che il secondo corrente “now.second()” sia diverso da quello precedentemente visualizzato e memorizzato nella variabile previousSec;
lcd.setCursor( 0,0 ); //quando il tempo trascorso tra l’ultimo aggiornamento dell’orario è differente esegui l’aggiornamento;
sprintf(buffer,"%02d:%02d:%02d",now.hour(),now.minute(),now.second()); //dell’orario sul display. In questo modo ottieni solo gli aggiornamenti continui del display al cambio di ogni;
lcd.print( buffer ); //secondo;
previousSec = now.second(); //assegna il secondo corrente, ossia quello appena visualizzato alla variabile previousSec;
}

if(mySerial.available()) { //quando arriva un carattere sul buffer seriale bluetooth, quindi dal cellulare, esegui le linee successive;
lettera = mySerial.read(); //leggi la prima lettera presente nel buffer seriale;

switch (lettera) { //se la lettera ricevuta è “A” allora porta l’usicta corrispondente al rele 1 a LOW, scrivi sul monitor seriale “relay 1 on” e richiama la funzione;
case 'A': //viewSocket() passandole il numero di relay e lo stato: in questo caso true ( acceso );
digitalWrite(rele1, LOW);
Serial.println("relay 1 on");
viewSocket( 1,true );
break;

case 'S': // esegui le medesime operazioni viste per il passaggio 100-104 per ciascuna delle lettere ricevute dal seriale bluetooth della ciabatta arduino pro;
digitalWrite(rele1, HIGH);
Serial.println("relay 1 off");
viewSocket( 1,false );
break;

case 'Q':
digitalWrite(rele2, LOW);
Serial.println("relay 2 on");
viewSocket( 2,true );
break;

case 'W':
digitalWrite(rele2, HIGH);
Serial.println("relay 2 off");
viewSocket( 2,false );
break;

case 'E':
digitalWrite(rele3, LOW);
Serial.println("relay 3 on");
viewSocket( 3,true );
break;

case 'R':
digitalWrite(rele3, HIGH);
Serial.println("relay 3 off");
viewSocket( 3,false );
break;

case 'T':
digitalWrite(rele4, LOW);
Serial.println("relay 4 on");
viewSocket( 4,true );
break;

case 'Y':
digitalWrite(rele4, HIGH);
Serial.println("relay 4 off");
viewSocket( 4,false );
break;
}
}
}

void viewSocket(byte num, boolean status) { //definisci la funzione viewSocket() con i due parametri attesi: num: il numero di relè coinvolto e status: lo stato del relè: acceso/spento ( true/false)
lcd.setCursor( ( 11+num ),0 ); // calcola la posizione X del cursore come (11+num) ossia 12 per il relè 1, 13 per il 2, ecc… e posiziona il cursore;
if ( status ) { //se “status” è true procedi con la visualizzazione della luce accesa e del messaggio sulla seconda linea;
lcd.write(1); //essendo il relay acceso ( status = true ) visualizza la lampadina accesa ( carattere speciale 1 );
lcd.setCursor ( 0,1 ); //essendo il relay acceso ( status = true ) visualizza la lampadina accesa ( carattere speciale 1 );
lcd.print("Acceso rele "); //scrivi la frase “Acceso rele “;
} else {
lcd.write(0); // esegui le stesse operazioni delle linee "status 1" ma con simbolo “0” e scrivendo “Spento rele “;
lcd.setCursor ( 0,1 );
lcd.print("Spento rele ");
}
lcd.setCursor ( 12,1 ); // posizionati al carattere 12 della seconda riga e scrivi il valore di num ( 1,2,3 o 4 );
lcd.print(num);
}

1495902041_tmp_WhatsApp_Image_2017-05-27_at_18.pdf_thumb.png

Prima di tutto, nella sezione in lingua Inglese si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione ...

... poi, essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ...

... infine, in conformità al suddetto regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

Non male come inizio ... ::slight_smile:

Guglielmo

P.S.: Il tuo post è stato spostato nell'opportuna sezione del forum "Italiano"

..aggiungo anche che da una immagine di 72x112 pixel (un "thumbnail", non è l'immagine!) fatta in verticale con un cellulare non si capisce nulla.