venerdì 23 marzo 2012

Orologio con allarme: mia versione

Finalmente...dopo giorni e giorni di studio, ho finito di riscrivere il codice per l'orologio LCD con sveglia con arduino...
 Prossimamente lo schema...

Qui lo sketch:

/*
Collegare il display LCD nei pin 5,6,7,8,9

Collegare il rotary encoder con i pinA e B in pin 2 e pin 3, mentre il button nel pin4 di arduino
Collegare il modulo RTC nei pin 4 e 5 analogici.
*/
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8,9,7,6,5,4);
int ora = 12;
int minuti = 00;
int oraA = 13;
int minutiA = 00;
int val;
int encoder0PinA = 2;
int encoder0PinB = 3;
int encoder0Pos = 0;
int encoder0PinALast = LOW;
int n = LOW;
boolean OldButtonState = false;
boolean NewButtonState = false;


void setup()  {
  Serial.begin(9600);
  pinMode(10, INPUT);
  pinMode(3, INPUT);
  pinMode(2, INPUT);
  lcd.begin(16, 2);
  SetClock();
 
}




void loop(){ 
    ora = RTC.get(DS1307_HR, true);
    minuti = RTC.get(DS1307_MIN, false);
    visualizza_ora();
    visualizza_allarme();
    if (ButtonPressed()){
      SetAlarm();
      }
    if (ora == oraA && minuti == minutiA){
    allarme();
    delay(200);
      }
   
    }
   
void allarme(){
    lcd.setCursor(0,1);
    lcd.print("A L L A R M E!!!!");
    lcd.setCursor(0,0);
    lcd.print("                 ");
    delay(500);
    lcd.setCursor(0,0);
    lcd.print("A L L A R M E!!!!");
    lcd.setCursor(0,1);
    lcd.print("                 ");
    delay(500);
}
 
 
void visualizza_ora(){
  lcd.setCursor(0,0);
  lcd.print("  ");
  lcd.print("Orario ");
  if (ora <10){
  lcd.setCursor(9,0);
  lcd.print("0");
  lcd.print(ora);}
      else {  lcd.setCursor(9,0);
              lcd.print(ora);}
 
  lcd.setCursor(11,0);
  lcd.print(":");
 
  if (minuti <10){
  lcd.setCursor(12,0);
  lcd.print("0");
  lcd.print(minuti);}
      else {  lcd.setCursor(12,0);
              lcd.print(minuti);}
 
  lcd.print("  ");
}

void visualizza_allarme(){
  lcd.setCursor(0,1);
  lcd.print(" Allarme: ");
  if (oraA <10){
  lcd.setCursor(10,1);
  lcd.print("0");
  lcd.print(oraA);}
      else {  lcd.setCursor(10,1);
              lcd.print(oraA);}
 
  lcd.setCursor(12,1);
  lcd.print(":");
 
  if (minutiA <10){
  lcd.setCursor(13,1);
  lcd.print("0");
  lcd.print(minutiA);}
      else {  lcd.setCursor(13,1);
              lcd.print(minutiA);}
  lcd.setCursor(16,1);
  lcd.print(" ");
}

 
 
void SetAlarm(){
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Imposta  allarme");
   while (!ButtonPressed()){
    setOraA();   
    lcd.setCursor(6,1);
    if (oraA < 10){
      lcd.setCursor(6,1);
      lcd.print("0");
      lcd.print(oraA);
      } else
    {
      lcd.setCursor(6,1);
      lcd.print(oraA);
      }
    }
   while (!ButtonPressed()){
    setMinutiA();
    lcd.setCursor(8,1);
    lcd.print(":");
    if (minutiA < 10){
      lcd.setCursor(9,1);
      lcd.print("0");
      lcd.print(minutiA);
      } else
    {
      lcd.setCursor(9,1);
      lcd.print(minutiA);
      }
    }
  }


void SetClock(){
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Imposta l'orario");

  
  while (!ButtonPressed()){
    setOra();   
    lcd.setCursor(6,1);
    if (ora < 10){
      lcd.setCursor(6,1);
      lcd.print("0");
      lcd.print(ora);
      } else
    {
      lcd.setCursor(6,1);
      lcd.print(ora);
      }

    }
 
 
  while (!ButtonPressed()){
    setMinuti();
    lcd.setCursor(8,1);
    lcd.print(":");
    if (minuti < 10){
      lcd.setCursor(9,1);
      lcd.print("0");
      lcd.print(minuti);
      } else
    {
      lcd.setCursor(9,1);
      lcd.print(minuti);
      }
    }
    RTC.stop();
    RTC.set(DS1307_MIN, minuti);     //set the minutes
    RTC.set(DS1307_HR,ora);       //set the hours
    RTC.start();
  }

void setOraA() {
   n = digitalRead(encoder0PinA);
   if ((encoder0PinALast == LOW) && (n == HIGH)) {
     if (digitalRead(encoder0PinB) == LOW) {
       oraA--;
      if (oraA < 0){
         oraA = 23;}
      } else {
       oraA++;
       if (oraA >= 24){
         oraA = 00;      
         }
     }
   }
   encoder0PinALast = n;
 }

void setMinutiA() {
   n = digitalRead(encoder0PinA);
   if ((encoder0PinALast == LOW) && (n == HIGH)) {
     if (digitalRead(encoder0PinB) == LOW) {
       minutiA--;
      if (minutiA < 0){
         minutiA = 59;}
      } else {
       minutiA++;
       if (minutiA >= 59){
         minutiA = 00;      
         }
     }
   }
   encoder0PinALast = n;
 }


void setOra() {
   n = digitalRead(encoder0PinA);
   if ((encoder0PinALast == LOW) && (n == HIGH)) {
     if (digitalRead(encoder0PinB) == LOW) {
       ora--;
      if (ora < 0){
         ora = 23;}
      } else {
       ora++;
       if (ora >= 24){
         ora = 00;      
         }
     }
     Serial.print ("Ora impostata: ");
     Serial.println (ora);
   }
   encoder0PinALast = n;
 }

void setMinuti() {
   n = digitalRead(encoder0PinA);
   if ((encoder0PinALast == LOW) && (n == HIGH)) {
     if (digitalRead(encoder0PinB) == LOW) {
       minuti--;
      if (minuti < 0){
         minuti = 59;}
      } else {
       minuti++;
       if (minuti >= 59){
         minuti = 00;      
         }
     }
     Serial.print ("Minuti impostati: ");
     Serial.println (minuti);
   }
   encoder0PinALast = n;
 }

boolean ButtonPressed() {
    boolean WasIt;  // as in, "Was It pressed?"
    NewButtonState = !digitalRead(10);
    if ((!OldButtonState) && (NewButtonState)) {
        WasIt = true;
    } else {
        WasIt = false;
    }
    OldButtonState = NewButtonState;
    return(WasIt);
}





 

2 commenti: