Temporizzatore RTC e arduino

Ciao a tutti ragazzi :slight_smile:
Ho un piccolo problema, io ho un arduino uno e un modulo RTC ds1307 e vorrei fare in modo che quando si attiva(per esempio dalle 14 alle 20) ogni 2 ore faccia andare alta un uscita. Praticamente una sveglia che suona ogni 2 ore :slight_smile:
Questa "sveglia" deve rimanere attiva 10 min massimo e se entro questo tempo nessuno la disattiva deve andare alta un'altra uscita
ci sarebbe un modo per farla?
Io ci sto provando ma con gli if sta diventanto lunghino come sketch..

Grazie in anticipo per l'aiuto

Sicuramente un modo c'è.
Posta il tuo scketch è vedremo di correggerlo o darti suggerimenti. :wink:

Mi raccomando, quando pubblichi lo sketch usa i tag CODE (per sapere come fare guarda il punto 7 del Regolamento --> [REGOLAMENTO] Come usare questa sezione del forum - Italiano - Arduino Forum)

Trasforma le ore e minuti in minuti, controlla se sei tra 840 e 1200 ( tra le 14h00 e 20h00) poi fai il modulo 120 dei minuti e fai i controlli su quelli.
Rimangono solo pochi if.
Ciao Uwe

Questo è lo sketch che sto utilizzando per far le prove ma non l’ho ancora finito
Per Programmare RTC ho usato uno sketch che ho trovato girando per internet e fino ora funziona bene
Io per il momento ho solo messo uno switch case per distinguere i diversi giorni della settimana.
Stavo pensando nel caso non si trovassero soluzioni potrei fare un programma al di fuori di quello principale che andrei a richiamare nei vai case ?

#include <LiquidCrystal.h>
#include <Wire.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
  pinMode(8,OUTPUT);
  pinMode(13,OUTPUT);
   lcd.begin(16, 2);
  Serial.begin(9600);
 

  Wire.begin();
 
  Wire.beginTransmission(0x68);
  Wire.write((byte)0x00);
  //specifico il tempo e la data
 ¬†Wire.write((byte)0x05); //1¬į byte SECONDI da 0x00 a 0x59
 ¬†Wire.write((byte)0x59); //2¬į byte MINUTI da 0x00 a 0x59
 ¬†Wire.write((byte)0x80 | 0x008); //3¬į byte ORE da 0x00 a 0x24
 ¬†Wire.write((byte)0x02); //4¬į byte GIORNO della settimana da 0x01 a 0x07
 ¬†Wire.write((byte)0x16); //5¬į byte GIORNO del mese da 0x00 a 0x31
 ¬†Wire.write((byte)0x7); //6¬į byte MESE da 0x00 a 0x12
 ¬†Wire.write((byte)0x13); //7¬į byte ANNO 0x00 a 0x99
  Wire.endTransmission();
}
 
void loop()
{
  
 
  Wire.beginTransmission(0x68);
  Wire.write((byte)0x00);
  Wire.endTransmission();
 

  Wire.requestFrom(0x68, 7);

  byte secondi = Wire.read();
  byte minuti = Wire.read();
  byte ora = Wire.read();
  byte giorno_sett = Wire.read();
  byte giorno_mese = Wire.read();
  byte mese = Wire.read();
  byte anno = Wire.read();
 
  lcd.setCursor(0,0);
  lcd.print(ora,HEX);
  lcd.print(":");
  lcd.print(minuti,HEX);
  lcd.print(":");
  lcd.print(secondi,HEX);
  
  
     switch(giorno_sett){
     case  1  : 
                lcd.setCursor(10,0);
                lcd.print("LUN");
                break;
     case  2 : 
                lcd.setCursor(10,0);
                lcd.print("MAR"); 
                if((ora==9)&&(minuti==02)){
                     lcd.setCursor(10,1);
                     lcd.print("AAA");
                     digitalWrite(8,HIGH);
                 }    
                if((ora==9)&&(minuti==12)){
                  digitalWrite(8,LOW);
                  lcd.setCursor(10,1);
                  lcd.print("FFF");
                  digitalWrite(13,HIGH);
                  
                }               
                break;
     case 3 : 
                lcd.setCursor(10,0);
                lcd.print("MERC"); 
                break;
     case 4 : 
                lcd.setCursor(10,0);
                lcd.print("GIOV");
                break;
     case 5 :
                lcd.setCursor(10,0);
                lcd.print("VEN");
                break;
     case 6 : 
                lcd.setCursor(10,0);
                lcd.print("SAB");
                break;
     case 7 : 
                lcd.setCursor(10,0);
                lcd.print("DOM");
                break;
    }
  lcd.setCursor(0,1);
  lcd.print(giorno_mese,HEX);
  lcd.print("/");
  lcd.print(mese,HEX);
  lcd.print("/");
  lcd.print(anno,HEX);
}

P.S Non capisco perchè se nel secondo if metto per esempio 05 il programma funziona bene
ma se provo a mettere 12 o comunque un altro numero il programma non funziona pi√Ļ