Ciao a tutti ragazzi
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
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..
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ù