Salve a tutti, premetto che sono un neofita e che mi sto dilettando nella costruzione di una serra idroponica con arduino uno. Ho installato un modulo rtc ds1302 con la libreria ds1302 e wire. il problema a cui non ho trovato soluzione e riferimenti su internet è questo: carico lo sketch base per provare ad impostare l ora e a data sul modulo e tutto funziona a dovere. Se stacco arduino dal usb e lo faccio spegnere, riattaccando l usb riprende l ora da dove l aveva lasciata. se invece stacco l usb e attacco il trasformatore con cui si alimenta arduino,il modulo rtc si resetta e il conteggio riparte da zero. riparte da zero anche quando attacco sulla stessa ciabatta elettrica ove è collegato il trasformatore che alimenta arduino un altro componente :o naturalmente ho accertato che la batteria che ho inserito sull rtc sia carica.. ho ricaricato lo sketck dopo aver impostato l ora e la data, commentando le righe di impostazione... non capisco cosa possa essere.. ho anche cambiato modulo rtc con uno uguale ma dà lo stesso problema.. qualcuno mi puo aiutare?
allego lo sketch
#include <DS1302.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Creazione oggetto RTC
DS1302 rtc(2, 3, 4); // rispettivamente ai pin RST, DAT e CLK
// Creazione dell'oggetto LCD
// Imposta l'indirizzo LCD 0x27 per un display a 16 caratteri e 2 linee
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup()
{
// Imposta RTC in run-mode e disabilita la protezione da scrittura
rtc.halt(false);
rtc.writeProtect(false);
// Imposta la comunicazione seriale
Serial.begin(9600);
// inizializza il display
lcd.init();
//accende la retroilluminazione
lcd.backlight();
//impostare giorno,ora e data per farle memorizzare dal modulo rtc
//rtc.setDOW(WEDNESDAY);
//rtc.setTime(10, 12, 00);
//rtc.setDate(05, 02, 2020);
// Le seguenti linee possono essere commentate per
//utilizzare i valori già memorizzati nel DS1302
//rtc.setDOW(SUNDAY); // Imposta il giorno della settimana a SUNDAY
//rtc.setTime(11, 32, 0); // Imposta l'ora come 11:32:00 (Formato 24hr)
//rtc.setDate(12, 2, 2017); // Imposta la data cone 12 febbraio 2017
}
void loop()
{
// Invia giorno della settimana
Serial.print(rtc.getDOWStr());
Serial.print(" ");
// Invia data
Serial.print(rtc.getDateStr());
Serial.print(" -- ");
// Invia ora
Serial.print(rtc.getTimeStr());
Serial.print(" -- ");
// Scrive i valori sul display LCD
lcd.clear();//cancella precedenti valori
data (); // Scrive su LCD la data
ora (); // Scrive su LCD l'ora
// Aspetta un secondo prima di ripetere
delay (1000);
}
void data ()
{
lcd.setCursor(0, 0);
lcd.print(rtc.getDOWStr());
lcd.print(" ");
lcd.print(rtc.getDateStr());
}
void ora()
{
lcd.setCursor(5, 1);
lcd.print(rtc.getTimeStr());