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);
}
 
Grazie Marco !!!
RispondiEliminaBello .... ;) ... quando metterai gli schemi ?
RispondiElimina