DS1302

Ciao a tutti ragazzi ho un problema con questo maledetto rtc, sto diventando matto >:( >:( >:( … devo accendere delle luci o altre robe a un determinato giorno e orario… Questo è il programma secondo me il problema è nell’if in basso perchè se metto solo il giorno va se invece metto solo l’ora non va!!! e se metto giorno e ora non va neanche così… perfavore ditemi cosa sbaglio… Grazie in anticipo

//#define SCK_PIN 4
//#define IO_PIN 3
//#define RST_PIN 2
#include <DS1302.h>
DS1302 rtc(2, 3, 4);

const int ledPin =  13;      // the number of the LED pin

void setup() {
   rtc.halt(false);
  // Viene disattiva la protezione alla scrittura
  rtc.writeProtect(false);
  Serial.begin(9600);
  
  pinMode(ledPin, OUTPUT);
}

void loop() {
  rtc.setDOW(WEDNESDAY);
  rtc.setTime(22,18,00);
  rtc.setDate(30, 12, 2015); 
   
 Serial.print("It is ");
    Serial.print(rtc.getDOWStr());
    Serial.print(" ");
    Serial.print(rtc.getDateStr());
    Serial.print(" ");
    Serial.print("and the time is: ");
    Serial.println(rtc.getTimeStr());
  

  if ( rtc.getDOWStr () == "Tuesday" && rtc.getTimeStr () == "22:18:02") { 
    digitalWrite(ledPin, HIGH);
  }
}

rtc.getDOWStr () e rtc.getTimeStr () ritornano stringhe in stile C, non istanze della classe String, quindi devi confrontarle con strcmp():

if (strcmp (rtc.getDOWStr (), "Tuesday") == 0 && strcmp (rtc.getTimeStr (), "22:18:02") == 0) {

In realtà, invece di confrontare stringhe, sarebbe meglio usare la funzione getTime() e confrontare i singoli membri della struttura che ritorna:

Time t = getTime();
if (t.dow == TUESDAY && t.hour == 22 && t.min == 18) {

Presumo inoltre che dovrai mettere anche dei controlli sul fatto che l'ora sia minore del momento in cui vuoi spegnere, a meno di non voler accendere una tantum per l'eternità.

@Jacuzzy98: Essendo il tuo primo post, ti chiederei di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione) e di leggere con attenzione il REGOLAMENTO ... Grazie.

Guglielmo

Grazie @SukkoPera Comunque deve stare acceso per un periodo di tempo quindi faccio un altro if che a un certo orario mi spegne le luci.... Comunque dici che il problema che non mi va l'orario è dato perché devo dividere l'ora i minuti e i secondi?

No, dico che se gli dici di accendere, che so, a t > 15 e di spegnere a t > 18 devi stare attendo, perché ad esempio 19 è maggiore sia di 15 che di 18...

Il motivo per cui ora non va è scritto sopra, da nessuna parte parlo dei secondi.