Chissà cosa starà pensando l'autore del Topic, che si è visto trasformare una semplice domanda in un comitato dei festeggiamenti "pro veterani" del forum
aahuaauhahu come vi siete permessi di festeggiare in casa mia in mia assenza??!
ad ogni modo, ho provato la tecnica che mi avete suggerito e ho una domanda:
la funzione millis() sicuramente non è adatta al funzionamento "in continuo" perchè se l'apparecchio è acceso 24h su 24h prima o poi andrà in overflow! pensate sia possibile utilizzare a tale scopo l'rtc (ds1307) che ho collegato all'arduino?
tra le altre cose non so perchè ma l'rtc (adafruit) mi porta sempre 4 minuti di ritardo rispetto al pc, anche subito dopo averlo impostato con apposita funzione! come è possibile?
e un'altra cosa:
ho preso anche un display, sempre dell'adafuit (cod. 417), munito di pulsantiera e vorrei creare un menù constestuale navigabile per settare, eventualmente, l'ora o piuttosto modificare dei valori: ovviamente vorrei , mentre interagisco, che tutto il resto funzioni (controllo pulsanti, sonde, pwm dei led...) pensate sia fattibile?
La funzione millis() fa in overflow dopo 49,7 giorni. Se hai un RTC esterno puoi semplicemente leggere i secondi e fare un ciclo basato sul cambio di questi. L'intervallo di 1s ti basta?
4 minuti fissi oppure uno scarto che poi cresce? Mi spiego, se imposti l'ora, vedi subito che ci sono 4 minuti di scarto ma poi restano 4 minuti anche dopo 1 giorno oppure lentamente lo scarto aumenta?
Il menu contestuale è sicuramente fattibile ma non è facile da scrivere: non so se sei alle prime armi. Ti conviene vedere se loro hanno un esempio e poi elaborare il tuo partendo da quello.
Stiamo parlando di un orario impostato tramite un'interfaccia oppure dello sketch compilato con le costanti DATE e TIME?
Queste prendono semplicemente l'orario di sistema e lo memorizzano nello sketch. Se resettassi il tuo circuito fra 1 mese, ripartirebbe con l'orario e la data in cui hai compilato il programma.
leo72:
Stiamo parlando di un orario impostato tramite un'interfaccia oppure dello sketch compilato con le costanti DATE e TIME?
Queste prendono semplicemente l'orario di sistema e lo memorizzano nello sketch. Se resettassi il tuo circuito fra 1 mese, ripartirebbe con l'orario e la data in cui hai compilato il programma.
zioTonino:
ciao, vado con le costanti date e time!
Quindi non fai altro che memorizzare nello sketch l'orario del computer al momento della compilazione. E' normale che resettando l'Arduino lo sketch riparta con l'orario preimpostato.
per il menu grazie... ma sembra molto più complesso di quel che pensavo...
E allora ricontrolla il tuo codice per vedere se alteri tu l'orario da qualche parte. Di più non so dirti. DATE e TIME prendono l'orario dal tuo sistema.
Scusa, ma non conosco il tuo grado di preparazione e non vorrei offendere, ma mi e' sorto un dubbio...
Dato le lo hai preso da ADA e ho visto un tuo post al riguardo, usi questo sketch di esempio....
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
void setup () {
Serial.begin(57600);
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
void loop () {
il comando RTC.adjust(DateTime(yy,mm,dd,hh,mm,ss)); si trova all'interno dell' IF e non te lo eseguira' mai.
O gli togli l'alimentazione e poi sfili la batteria e la reinserisci ...
o sposti l' RTC.adjust fuori dall'IF
brunello:
il comando RTC.adjust(DateTime(yy,mm,dd,hh,mm,ss)); si trova all'interno dell' IF e non te lo eseguira' mai.
O gli togli l'alimentazione e poi sfili la batteria e la reinserisci ...
o sposti l' RTC.adjust fuori dall'IF
Allora spieghiamo meglio ;). Quell'if serve a controllare se l'RTC sta lavorando. In caso negativo reimposta l'orario, in caso affermativo non lo "tocca".
si si, l'avevo messo fuori ...
ma non so perchè mi dava 4 minuti di scarto!
adesso va molto meglio!
cmq Arduino è fenomenale... chi mi sa spiegare perchè nonostante l'lcd sia RED il relè, attaccato al pin 10 è su on??
// if the LED is off turn it on and vice-versa:
if (boa2 == LOW){
lcd.setBacklight(RED);
st = true;
digitalWrite(10, LOW);
}
else {
if (boa1 == LOW) {
lcd.setBacklight(GREEN);
digitalWrite(10, LOW);
}
else{
lcd.setBacklight(YELLOW);
digitalWrite(10, HIGH);
}
}
ragazzi scusatemi ma non capisco come si comporta l'rtc!
ieri ho spento il pc ma ho lasciato arduino attaccato e funzionante: erano le 18 circa; ieri sera son tornato che erano le 24 e il display segnava le 21!
come diamine è possibile??
stamattina ho provato a staccare la batteria .... a rimetterla dopo 3 secondi ... dopo 1 minuto ... a lasciarlo senza batteria ma niente!
ogni volta riparte dalle 8.24! ho provato pure a fare reset dal pulsante su arduino!
la cosa strana è anche anche senza batteria riparte dalle 8.24! e sulla seriale mi dice "rtc ok"
c'è qualcosa che non va o sono io che mi sono rico??
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__,__TIME__));
}
else {
Serial.println("RTC OK");
}