ciclare in background

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...

Eh, i menu non sono semplici.

si ma a compilare ci mette 30 secondi .. non 4 minuti!

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.

ho rincontrollato ma rimane 4 minuti! -.-"

potrei inserirlo io al posto di utilizzare le costanti? se si come?

per i menu, non esiste qualche esepio più "semplice"?

Certo che puoi, invece di mettere un TIME ci metti l'orario che vuoi.

e come? non riesco a capire il formato con cui inserirli sia il time che la data..

Guarda il formato che accetta la chiamata che imposta l'orario della libreria che stai usando.

Pare quasi che tu non ci scriva proprio sul DS1307.
Che libreria stai usando ?

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!

:wink:

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);
      }
      
    }

risolto! :slight_smile:
stò rinco dal caldo! avevo attaccato l'uscita del pin 10 direttamente al piedino del relè bypassando il transistor :stuck_out_tongue:

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!
:astonished:
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");
  }

grazie

credo che prima di RTC.runnin() devi fare un RTC.begin() o qualcosa di simile

lesto:
credo che prima di RTC.runnin() devi fare un RTC.begin() o qualcosa di simile

Se la libreria è la RTClib, alllora bisogna inizializzare sia la Wire che la RTC.

@zioTonino:
puoi postare tutto il codice che stai usando? Quella funzione lo sappiamo a memoria cosa fa :sweat_smile:
Puoi postare lo schema del tuo circuito per capire se hai messo la batteria tampone, se tutto è collegato giusto ecc..?

Leo mi ha tolto la tastiera dalle dita.....
Come diceva, se non posti lo sketch che REALMENTE stai usando e' difficile capire cosa puo' non andare

leo72:

lesto:
credo che prima di RTC.runnin() devi fare un RTC.begin() o qualcosa di simile

Se la libreria è la RTClib, alllora bisogna inizializzare sia la Wire che la RTC.

@zioTonino:
puoi postare tutto il codice che stai usando? Quella funzione lo sappiamo a memoria cosa fa :sweat_smile:
Puoi postare lo schema del tuo circuito per capire se hai messo la batteria tampone, se tutto è collegato giusto ecc..?

allora, il codice è questo:

// include the library code:
#include <Wire.h>
#include <Adafruit_MCP23017.h>
#include <Adafruit_RGBLCDShield.h>
#include "RTClib.h"


// The shield uses the I2C SCL and SDA pins. On classic Arduinos
// this is Analog 4 and 5 so you can't use those for analogRead() anymore
// However, you can connect other I2C sensors to the I2C bus and share
// the I2C bus.
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();
RTC_DS1307 RTC;

// These #defines make it easy to set the backlight color
#define RED 0x1
#define YELLOW 0x3
#define GREEN 0x2
#define TEAL 0x6
#define BLUE 0x4
#define VIOLET 0x5
#define WHITE 0x7

void setup() {
  // Debugging output
  Serial.begin(9600);
  
  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__));
 }

  // set up the LCD's number of rows and columns: 
  lcd.begin(16, 2);

}

uint8_t i=0;

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);

  DateTime now = RTC.now();

  uint8_t buttons = lcd.readButtons();

  lcd.setCursor(0,0);
  if(now.hour()<10) lcd.print("0");
  lcd.print(now.hour(), DEC);
  lcd.print(':');
  if(now.minute()<10) lcd.print("0");
  lcd.print(now.minute(), DEC);
  lcd.print(':');
  if(now.second()<10) lcd.print("0");
  lcd.print(now.second(), DEC);
  
  
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    delay(1000);
    
}

non riesco a settare l'ora...non capisco come fermare l'rtc!
basta togliere la batteria o occorre staccare tutto il pcb??
anche togliendo la batteria e rimettendola sembra che rimanga in memoria il vecchio orario

Devi togliere la batteria E staccare l'alimentazione.

Ricordati comunque che con questo codice:

  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__));
 }

L'orologio viene sempre reimpostato alla data/ora di compilazione.

e perchè anche senza batteria riprende da dove aveva lasciato?

zioTonino:
e perchè anche senza batteria riprende da dove aveva lasciato?

Ma che RTC è?