Pages: [1]   Go Down
Author Topic: Temporizzatore RTC e arduino  (Read 366 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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





Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6974
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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)
« Last Edit: July 19, 2013, 04:40:16 am by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 249
Posts: 21187
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 

Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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ù
« Last Edit: July 19, 2013, 12:55:06 pm by Sals_ » Logged

Pages: [1]   Go Up
Jump to: