Buonasera a tutti, è da un po' che a fasi alterne mi studio Arduino e le sue applicazioni.
Ultimamente ho costruito un controller per acquario tropicale ma invece di copiare da altri sto tentando anche a scopo didattico di fare da solo, e di imparare come si dice..." sul campo".
Ho assemblato l'apparato ma nella prima fase della programmazione è sorto un imprevisto che non capisco...
Tutto il sistema sarà controllato dall'ora e per questo il circuito è dotato di RTC shield, LCD I2C 20X4, sonda temperatura DS18b20 e sostanzialmente un banco relè.
Quando attacco l'arduino nano alla porta usb e faccio partire lo sketch tutto ok, ma se dopo avere staccato la porta usb la riattacco mi accorgo che l'ora è rimasta bloccata a quando ho asportato l'alimentazione.
Se poi invece di alimentare tramite usb, alimento il circuito tramite un trasformatore che gestirà tutto il circuito ( visto che andrà dall'acquario...) allora al posto del giorno e delle ore formato dd:mm.yyyy e hh:mm:ss viene fuori una lista di numeri tipo:
dd:mm:yyyy viene 165:165:eccetera
Io credo che ci sia qualcosa che non va con rtc shield....
Se serve copio lo sketch.ì, o le foto dell'armamentario
Grazie. ![]()
Saluti
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
char buffer1[20];
char buffer2[20];
byte Centigradi[8] = {
B00010,
B00101,
B00010,
B00000,
B00000,
B00000,
B00000,
B00000
};
byte Apice_2[8] = {
B00110,
B01001,
B00010,
B00100,
B01111,
B00000,
B00000,
B00000
};
byte Freccsu[8] = {
B00100,
B01110,
B10101,
B00100,
B00100,
B11111,
B00000,
B00000
};
LiquidCrystal_I2C lcd(0X27 , 20 , 4);
RTC_DS1307 RTC;
const int setpin = 6;
boolean statepin = 0;
void setup () {
Wire.begin();
RTC.begin();
lcd.begin();
lcd.createChar (0, Centigradi); // load simbolo Centigradi to memory 0
lcd.createChar (1, Apice_2); // load 2 apice to memory 1
lcd.createChar (2, Freccsu); // load Freccia su to memory 2
//RTC.adjust(DateTime(__DATE__, __TIME__));
if (! RTC.isrunning()) {
RTC.adjust(DateTime(__DATE__, __TIME__));
Serial.println("RTC fa le bizze e scrive quel che vuole");
}
}
void loop () {
DateTime now = RTC.now();
sprintf(buffer1, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
lcd.setCursor(12,0);
lcd.print( buffer1 );
sprintf(buffer2, "%02d/%02d/%d", now.day(), now.month(), now.year());
lcd.setCursor(0,0);
lcd.print( buffer2 );
lcd.setCursor (0,1); //posizione Temperatura
lcd.print("Temp:");
//lcd.print(sensors.getTempCByIndex(0));
lcd.print("XX,X");
lcd.print(char(0));
lcd.setCursor (12,1); //posizione Pompa
lcd.print("POMPA:");
lcd.print("XXX");
lcd.setCursor (0,2); //posizione Co2
lcd.print("CO");lcd.print(char(1));lcd.print(":");
//lcd.print("d");lcd.print("ppm ");
lcd.setCursor (8,2); //posizione Co2 valve
lcd.print("FASE:");
//lcd.print(char(1));lcd.print(" V:");lcd.print("STOP");
lcd.setCursor (0,3); //posizione ULTIMARIGA
lcd.print("RISC:");
// bisogna vedere se metterlo quando è acceso
lcd.print(char(2));
lcd.setCursor (11,3); //posizione ULTIMARIGA
lcd.print("LUCE:");lcd.print("XXX%");
delay(1000);
}