Go Down

Topic: Temporizzatore RTC e arduino (Read 477 times) previous topic - next topic

Sals_

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..

Grazie in anticipo per l'aiuto 






PaoloP

#1
Jul 19, 2013, 11:38 am Last Edit: Jul 19, 2013, 11:40 am by PaoloP Reason: 1
Sicuramente un modo c'è.
Posta il tuo scketch è vedremo di correggerlo o darti suggerimenti.  ;)

Mi raccomando, quando pubblichi lo sketch usa i tag CODE (per sapere come fare guarda il punto 7 del Regolamento --> http://forum.arduino.cc/index.php?topic=149082.0)

uwefed

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 


Sals_

#3
Jul 19, 2013, 07:43 pm Last Edit: Jul 19, 2013, 07:55 pm by Sals_ Reason: 1
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 ?




Code: [Select]
#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ù

Go Up