Allarme e funzione if con temperatura

Ciao a tutti, ho collegato ad arduino un modulo ds3231 che possiede anche un sensore di temperatura. Ho fatto partire uno sketch che mi permette di impostare l’orario e legge orario e temperatura dal monitor seriale e funziona. Ora vorrei sfruttare il tutto per far eseguire un’operazione ogni giorno ad una certa ora e far eseguire un’operazione superata una certa temperatura. Ho scritto il seguente sketch:

#include <Time.h>
#include <TimeAlarms.h>
#include <DS3231.h>
DS3231  rtc(SDA, SCL);

void setup()
{
  Serial.begin(115200);
  delay(100);
 
  pinMode(13, OUTPUT);

  
  rtc.begin();
  //rtc.setDOW(WEDNESDAY);     // Set Day-of-Week to SUNDAY
  //rtc.setTime(12, 0, 0);     // Set the time to 12:00:00 (24hr format)
  //rtc.setDate(1, 1, 2014);   // Set the date to January 1st, 2014
  Alarm.alarmRepeat(15,30,0, ledBlink);
}

void loop()
{
  Serial.print(rtc.getDOWStr());
  Serial.print(" ");
  Serial.print(rtc.getDateStr());
  Serial.print(" -- ");
  Serial.println(rtc.getTimeStr());
  Serial.print(" -- ");
  Serial.print("Temperature: ");
  Serial.print(rtc.getTemp());
  Serial.println(" C");
  delay (1000);
if("Temperature:">30)  {
  digitalWrite(13, HIGH);
}
}
void ledBlink()
{
  //blinka il led onboard
  digitalWrite(13, HIGH);
  delay(500);
  digitalWrite(13, LOW);
  delay(500);
  digitalWrite(13, HIGH);
  delay(500);
  digitalWrite(13, LOW);
  delay(500);
}

Il problema è che non funziona sia l’operazione con la temperatura, sia la funzione con il tempo. Cosa potrei aver sbagliato?
Grazie mille.

Non si possono conoscere tutte le librerie esistenti per arduino, quindi dovresti specificare dove hai preso le librerie e gli esempi su cui ti sei basato.

Facendo una ricerca online ho trovato questo sito http://www.logicaprogrammabile.it/tutorial-arduino-time-timealarms-ds1307rtc/

Dove descrive un uso diverso di TimeAlarms, mi pare sia una libreria indipendente dal componente elettronico, quindi sbagli proprio il suo uso...

per quanto riguarda la temperatura tu scrivi questo

if("Temperature:">30) { digitalWrite(13, HIGH);

}

Se la stringa "Temperature:" p maggiore di 30, non ha senso e non risulta mai vera

dovresti usare qualcosa del genere

if(rtc.getTemp()>30)

Scusami tanto ma pensavo che esistesse solo una libreria time… ho utilizzato proprio quella che mi hai linkato ma non riesco a farla funzionare. Ho solo inserito il codice di quella pagina nel mio codice, non mi compare nessun errore di compilazione ma l’allarme non parte. Forse può dipendere da un formato dell’ora scritto in modo diverso? Nel mio codice ho trascurato la stringa per impostare l’ora perché già è salvata correttamente nel 3231.
Per quanto riguarda la temperatura funziona perfettamente adesso!
Chiedo scusa della mia ignoranza ma sto cercando di imparare come funziona il C++

Ciao, non ho mai utilizzato il componente elettronico e neanche le librerie da te usate.

Però vedendo gli esempi secondo me dovresti fare qualcosa del genere.

#include <DS3231.h>
DS3231  rtc(SDA, SCL);
Time t;
void setup()
{
  Serial.begin(115200);
  delay(100);
 
  pinMode(13, OUTPUT);

  
  rtc.begin();
  //rtc.setDOW(WEDNESDAY);     // Set Day-of-Week to SUNDAY
  //rtc.setTime(12, 0, 0);     // Set the time to 12:00:00 (24hr format)
  //rtc.setDate(1, 1, 2014);   // Set the date to January 1st, 2014
  
}

void loop()
{
  t= rtc.getTime();
  Serial.print(rtc.getDOWStr());
  Serial.print(" ");
  Serial.print(rtc.getDateStr());
  Serial.print(" -- ");
  Serial.println(rtc.getTimeStr());
  Serial.print(" -- ");
  Serial.print("Temperature: ");
  Serial.print(rtc.getTemp());
  Serial.println(" C");
  delay (1000);
if(rtc.getTemp()>30)  {
  digitalWrite(13, HIGH);
}
if(t.hour==15 && t.min==30 && (t.sec>=1 && t.sec <=4)){ // si attiva  per i primi 4 secondi
 
      ledBlink();

}
}
void ledBlink()
{
  //blinka il led onboard
  digitalWrite(13, HIGH);
  delay(500);
  digitalWrite(13, LOW);
  delay(500);
  digitalWrite(13, HIGH);
  delay(500);
  digitalWrite(13, LOW);
  delay(500);
}

torn24 ha linkato una pagina per il RTC DS1307 Tu hai un DS3231. Com puó funzionare?

Ciao Uwe

torn24:
Ciao, non ho mai utilizzato il componente elettronico e neanche le librerie da te usate.

Però vedendo gli esempi secondo me dovresti fare qualcosa del genere.

#include <DS3231.h>

DS3231  rtc(SDA, SCL);
Time t;
void setup()
{
  Serial.begin(115200);
  delay(100);

pinMode(13, OUTPUT);

rtc.begin();
  //rtc.setDOW(WEDNESDAY);    // Set Day-of-Week to SUNDAY
  //rtc.setTime(12, 0, 0);    // Set the time to 12:00:00 (24hr format)
  //rtc.setDate(1, 1, 2014);  // Set the date to January 1st, 2014
 
}

void loop()
{
  t= rtc.getTime();
  Serial.print(rtc.getDOWStr());
  Serial.print(" “);
  Serial.print(rtc.getDateStr());
  Serial.print(” – “);
  Serial.println(rtc.getTimeStr());
  Serial.print(” – ");
  Serial.print(“Temperature: “);
  Serial.print(rtc.getTemp());
  Serial.println(” C”);
  delay (1000);
if(rtc.getTemp()>30)  {
  digitalWrite(13, HIGH);
}
if(t.hour==15 && t.min==30 && (t.sec>=1 && t.sec <=4)){ // si attiva  per i primi 4 secondi

ledBlink();

}
}
void ledBlink()
{
  //blinka il led onboard
  digitalWrite(13, HIGH);
  delay(500);
  digitalWrite(13, LOW);
  delay(500);
  digitalWrite(13, HIGH);
  delay(500);
  digitalWrite(13, LOW);
  delay(500);
}

Risolto!
Grazie a tutti per l’aiuto.