rtc ed allarmi

ho problemi ad impostare allarme, con tutorial da seriale tutto bene, semplice… ma non riesco ad
applicare la logica al mio codice per il display

void draw(void) {
 
  u8g.setFont(u8g_font_helvB08); 
 
  //***** RTC **********
  DateTime now = RTC.now();
  // display date at bottom of screen
  thisDay = String(now.day(), DEC) + "/"; 
  thisMonth="";
  for (int i=0; i<=2; i++){
    thisMonth += monthString[monthIndex[now.month()-1]+i];
  }  
  thisDay=thisDay + thisMonth + "/"; 
  thisDay=thisDay + String(now.year() , DEC);
  const char* newDay = (const char*) thisDay.c_str(); 
  u8g.drawStr(60,11, newDay);   
  // ********************* 
  // display time in digital format
  thisTime="";
  thisTime=String(now.hour()) + ".";
  if (now.minute() < 10){ thisTime=thisTime + "0";} // add leading zero if required
  thisTime=thisTime + String(now.minute()) + ".";
  if (now.second() < 10){ thisTime=thisTime + "0";} // add leading zero if required
  thisTime=thisTime + String(now.second());
  const char* newTime = (const char*) thisTime.c_str();
  u8g.setFont(u8g_font_helvB08);
  u8g.drawStr(2,11, newTime);
void setup(void) {
 
{ 
 

  Serial.begin(9600);
 
  Wire.begin();
  RTC.begin();
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
   
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
  setTime(now.hour,now. minute, now.second, now.month, now.year);

   Alarm.alarmRepeat(15,22,00, LUCEon); 
}

non riesco a capire come scrivere la riga SetTime :confused:

onestamente ho capito poco di quello che vuoi fare… spiega meglio e posta il codice completo.
però nella setTime c’è uno spazio tra now. e minute che probabilmente non ci va.
poi credo che setTime vada chiamata riferita a qualche oggetto… tipo RTC.setTime()

solamente come esercizio, vorrei capire come usare timers e alarms di questa libreria

#include <Wire.h>
#include "U8glib.h"
#include <RTClib.h>
#include <Time.h>
#include <TimeAlarms.h>
 
 // setup u8g  
U8GLIB_ST7920_128X64_4X u8g(18, 16, 17);// SPI Com: SCK = en = 8, MOSI = rw = 9, CS = di = 10

 //setup RTC
RTC_DS1307 RTC;
  char monthString[37]= {"GenFebMarAprMagGiuLugAgoSetOttNovDic"};
  int  monthIndex[122] ={0,3,6,9,12,15,18,21,24,27,30,33};
  String thisMonth = "";
  String thisTime = "";
  String thisDay="";

void draw(void) {
   // graphic commands to redraw the complete screen should be placed here  
 
  u8g.setFont(u8g_font_helvB08); 
  //
  //***** RTC **********
  DateTime now = RTC.now();
  // display date at bottom of screen
  thisDay = String(now.day(), DEC) + "/"; 
  thisMonth="";
  for (int i=0; i<=2; i++){
    thisMonth += monthString[monthIndex[now.month()-1]+i];
  }  
  thisDay=thisDay + thisMonth + "/"; 
  thisDay=thisDay + String(now.year() , DEC);
  const char* newDay = (const char*) thisDay.c_str(); 
  u8g.drawStr(0,20, newDay);   
  // ********************* 
  // display time in digital format
  thisTime="";
  thisTime=String(now.hour()) + ".";
  if (now.minute() < 10){ thisTime=thisTime + "0";} // add leading zero if required
  thisTime=thisTime + String(now.minute()) + ".";
  if (now.second() < 10){ thisTime=thisTime + "0";} // add leading zero if required
  thisTime=thisTime + String(now.second());
  const char* newTime = (const char*) thisTime.c_str();
  u8g.setFont(u8g_font_timB18);
  u8g.drawStr(0,60, newTime);  

}

void setup(void) {
  pinMode(52, OUTPUT);
  Serial.begin(9600);
   Wire.begin();
  RTC.begin();
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    
    RTC.adjust(DateTime(__DATE__, __TIME__));
    
 setTime(now.hour,now.minute, now.second, now.month, now.year);
 
 Alarm.alarmRepeat(16,21,0, AccendoLed);
  
  }

}

void loop() {
  // picture loop
  u8g.firstPage();  
  do {
      Alarm.delay(500);
   draw();
   
  } while( u8g.nextPage() );

  }
  
void AccendoLed()
{
  //Accendo led verde
  digitalWrite(52, HIGH);
 }

il codice stampa data ed ora corrente su display128x64 ed un alarm dovrebbe accendere un led.

Non ho aggiunto come dici tu Fratt RTC.setTime() perchè come da esempio fornito dalla libreria non è indicato, però anche provando non funziona: class RTC_DS1307 has not member named “setTime”.

Il codice postato da il seguente errore: request for member ‘hour’ in ‘now’, wich is non-class type ‘time_t() {aka long unsigned int()}’

gutty:
Non ho aggiunto come dici tu Fratt RTC.setTime() perchè come da esempio fornito dalla libreria non è indicato, però anche provando non funziona: class RTC_DS1307 has not member named "setTime".

allora avrei fatto meglio a leggere bene come funziona quella libreria prima di rispondere... :wink:

@gutty: QUALE (delle tante) libreria RTC stai usando ? Metti il link perché c'è sicuramente il metodo per regolare data ed ora ... probabilmente è il metodo adjust() ::slight_smile:

Guglielmo

il metodo adjust c'è sicuramente... c'è scritto nel tuo/suo codice sopra la riga setTime...
per regolare l'ora dovrebbe bastare questo:

rtc.adjust(DateTime(AA,MM,GG,hh,mm,ss));

Detto tra di noi, comunque NON ho mai capito chi usa una libreria per gestire il DS1307 ...
... è un chip di una banalità unica che si gestisce molto facilmente direttamente con le chiamate alla Wire e se ne ha il pieno controllo senza legarsi ad una libreria od ad un altra.

Va beh, scusate ... considerazione personale ... :grin:

Guglielmo

:-* ......

gpb01:
@gutty: QUALE (delle tante) libreria RTC stai usando ? Metti il link perché c'è sicuramente il metodo per regolare data ed ora ... probabilmente è il metodo adjust() ::slight_smile:

Guglielmo

RTClib.h // Code by JeeLabs http://news.jeelabs.org/code/

non mi sono mai posto il problema, a dirla tutta non sapevo che con la Wire si potesse gestire l'ora, non avendo basi di programmazione si va come le pecore :smiley:

gutty:
RTClib.h // Code by JeeLabs http://news.jeelabs.org/code/

il link http://news.jeelabs.org/code/ non porta da nessuna parte ... comunque consiglio SEMPRE di scaricare le librerie UFFICIALI (ed aggiornate) che si trovano attraverso il "Library Manager" dell'IDE (Sketch -> Include Library -> Manage Libraries).

gutty:
... non mi sono mai posto il problema, a dirla tutta non sapevo che con la Wire si potesse gestire l'ora ...

Perché, come al solito, NON fate un po' di ricerche qui sul forum dove ci sono DUE thread, a cui partecipai anni fa, dove, tra una tirata d'orecchi ed una altra all'utente "geppopazzo" :grin: , è spiegato per filo e per segno come fare questo e molto altro :smiling_imp:

Guglielmo

grazie Guglielmo
con Wire geppopazzo credo di aver trovato, riguarda tutorial orologio cronometro... mi ci vuole un po di calma stasera per leggere il tutto e vedere se riesco a capirci qualcosa :stuck_out_tongue:

https://www.pjrc.com/teensy/td_libs_TimeAlarms.html

questo è il link della libreria timeAlarms, l'uso è semplice da seriale impostando manualmente il tempo.
ma non capisco come passargli il tempo del RTC, sembrava logico come nel codice che ho postato:

 setTime(now.hour,now.minute, now.second, now.month, now.year);

evidentemente non lo è :o

gutty:
https:/nsy/td_libs_TimeAlarms.html/www.pjrc.com/tee

questo è il link della libreria timeAlarms, l'uso è semplice da seriale impostando manualmente il tempo.
ma non capisco come passargli il tempo del RTC, sembrava logico come nel codice che ho postato:

 setTime(now.hour,now.minute, now.second, now.month, now.year);

evidentemente non lo è :o

Anche perché NON mi sembra che quella libreria abbia quella funzione, anzi ...
... NON ne ha proprio per regolare il tempo !

Guglielmo

gutty:
grazie Guglielmo
con Wire geppopazzo credo di aver trovato, riguarda tutorial orologio cronometro... mi ci vuole un po di calma stasera per leggere il tutto e vedere se riesco a capirci qualcosa :stuck_out_tongue:

Sono due lunghi thread dove si sono esaminati un sacco di argomenti ... il PRIMO ed il SECONDO ...
... se hai la pazienza e la voglia di leggerli ... scoprirai molte cose utili :wink:

Guglielmo

gpb01:
Anche perché NON mi sembra che quella libreria abbia quella funzione, anzi ...
... NON ne ha proprio per regolare il tempo !

Guglielmo

ahi... quindi non sto a perderci tempo oltre, lo dedicherò ai link che hai postato.
Grazie!