Ok, il tuo esempio è chiarissimo.
Se posso, inserisco il codice di un meù per modificare la data e l’ora al quale ho aggiunto 2 led lampeggianti. Ecco, quando entro nel menù i led si bloccano :~
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int Sec, Min, Ore, Data, Mese,Anno;
int Puls_Set, Puls_Set_Old = LOW, Puls_Inc, Puls_Inc_Old = LOW, Puls_Dec, Puls_Dec_Old = LOW, Puls_Ok, Puls_Ok_Old = LOW;
int Set_HR = 0, Set_MIN = 0, Set_SEC, Set_DATA = 1, Set_MESE = 1, Set_ANNO = 10;
int Move_Set = 0;
const int led1 = 9;
const int led2 = 10;
long previousMillis = 0;
long previousMillis1 = 0;
int statoLed1 = LOW;
int statoLed2 = LOW;
void setup()
{
Serial.begin(9600);
lcd.begin(20,4);
lcd.clear();
pinMode(led1 , OUTPUT);
pinMode(led2 , OUTPUT);
RTC.stop(); //inizializzo RTC
RTC.set(DS1307_SEC,Set_SEC);
RTC.set(DS1307_MIN,Set_MIN);
RTC.set(DS1307_HR,Set_HR);
RTC.set(DS1307_DATE,Set_DATA);
RTC.set(DS1307_MTH,Set_MESE);
RTC.set(DS1307_YR,Set_ANNO);
RTC.start();
}
//-------------------------FUNZIONE PER MODIFICA ORA E DATA-----------------------------
void modifica_ora(){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Imposta data e ora");
while (true){
Puls_Inc = digitalRead(51);
Puls_Dec = digitalRead(49);
Puls_Ok = digitalRead(45);
//-----------------------------INCREMENTA ORA--------------------------------
if (Puls_Inc == HIGH && Puls_Inc_Old == LOW && Move_Set == 0){
Set_HR = Set_HR + 1;
if (Set_HR >23){
Set_HR = 0;
}
RTC.set(DS1307_HR,Set_HR);
Puls_Inc_Old = Puls_Inc;
}
if (Puls_Inc == LOW && Puls_Inc_Old == HIGH){
Puls_Inc_Old = Puls_Inc;
}
//----------------------------DECREMENTA ORA-----------------------------------
if (Puls_Dec == HIGH && Puls_Dec_Old == LOW && Move_Set == 0){
Set_HR = Set_HR - 1;
if (Set_HR <0){
Set_HR = 23;
}
RTC.set(DS1307_HR,Set_HR);
Puls_Dec_Old = Puls_Dec;
}
if (Puls_Dec == LOW && Puls_Dec_Old == HIGH){
Puls_Dec_Old = Puls_Dec;
}
//-----------------------------INCREMENTA MINUTI--------------------------------
if (Puls_Inc == HIGH && Puls_Inc_Old == LOW && Move_Set == 1){
Set_MIN = Set_MIN + 1;
if (Set_MIN >59){
Set_MIN = 0;
}
RTC.set(DS1307_MIN,Set_MIN);
Puls_Inc_Old = Puls_Inc;
}
if (Puls_Inc == LOW && Puls_Inc_Old == HIGH){
Puls_Inc_Old = Puls_Inc;
}
//----------------------------DECREMENTA MINUTI-----------------------------------
if (Puls_Dec == HIGH && Puls_Dec_Old == LOW && Move_Set == 1){
Set_MIN = Set_MIN - 1;
if (Set_MIN <0){
Set_MIN = 59;
}
RTC.set(DS1307_MIN,Set_MIN);
Puls_Dec_Old = Puls_Dec;
}
if (Puls_Dec == LOW && Puls_Dec_Old == HIGH){
Puls_Dec_Old = Puls_Dec;
}
//-----------------------------INCREMENTA DATA--------------------------------
if (Puls_Inc == HIGH && Puls_Inc_Old == LOW && Move_Set == 2){
Set_DATA = Set_DATA + 1;
if (Set_DATA >31){
Set_DATA = 0;
}
RTC.set(DS1307_DATE,Set_DATA);
Puls_Inc_Old = Puls_Inc;
}
if (Puls_Inc == LOW && Puls_Inc_Old == HIGH){
Puls_Inc_Old = Puls_Inc;
}
//----------------------------DECREMENTA DATA-----------------------------------
if (Puls_Dec == HIGH && Puls_Dec_Old == LOW && Move_Set == 2){
Set_DATA = Set_DATA - 1;
if (Set_DATA <0){
Set_DATA = 31;
}
RTC.set(DS1307_DATE,Set_DATA);
Puls_Dec_Old = Puls_Dec;
}
if (Puls_Dec == LOW && Puls_Dec_Old == HIGH){
Puls_Dec_Old = Puls_Dec;
}
//-----------------------------INCREMENTA MESE--------------------------------
if (Puls_Inc == HIGH && Puls_Inc_Old == LOW && Move_Set == 3){
Set_MESE = Set_MESE + 1;
if (Set_MESE >12){
Set_MESE = 0;
}
RTC.set(DS1307_MTH,Set_MESE);
Puls_Inc_Old = Puls_Inc;
}
if (Puls_Inc == LOW && Puls_Inc_Old == HIGH){
Puls_Inc_Old = Puls_Inc;
}
//----------------------------DECREMENTA MESE-----------------------------------
if (Puls_Dec == HIGH && Puls_Dec_Old == LOW && Move_Set == 3){
Set_MESE = Set_MESE - 1;
if (Set_MESE <0){
Set_MESE = 12;
}
RTC.set(DS1307_MTH,Set_MESE);
Puls_Dec_Old = Puls_Dec;
}
if (Puls_Dec == LOW && Puls_Dec_Old == HIGH){
Puls_Dec_Old = Puls_Dec;
}
//-----------------------------INCREMENTA ANNO--------------------------------
if (Puls_Inc == HIGH && Puls_Inc_Old == LOW && Move_Set == 4){
Set_ANNO = Set_ANNO + 1;
if (Set_ANNO >99){
Set_ANNO = 0;
}
RTC.set(DS1307_YR,Set_ANNO);
Puls_Inc_Old = Puls_Inc;
}
if (Puls_Inc == LOW && Puls_Inc_Old == HIGH){
Puls_Inc_Old = Puls_Inc;
}
//----------------------------DECREMENTA ANNO-----------------------------------
if (Puls_Dec == HIGH && Puls_Dec_Old == LOW && Move_Set == 4){
Set_ANNO = Set_ANNO - 1;
if (Set_ANNO <0){
Set_ANNO = 99;
}
RTC.set(DS1307_YR,Set_ANNO);
Puls_Dec_Old = Puls_Dec;
}
if (Puls_Dec == LOW && Puls_Dec_Old == HIGH){
Puls_Dec_Old = Puls_Dec;
}
lcd.setCursor(0, 2);
if (Set_HR < 10) {
lcd.print("0");
}
lcd.print(Set_HR);
if (Set_MIN < 10) {
lcd.print(":0");
}
else {
lcd.print(":");
}
lcd.print(Set_MIN);
//----------------------------------------------------VISUALIZZO DATA-------------------------
lcd.setCursor(10, 2);
if (Set_DATA < 10) {
lcd.print("0");
}
lcd.print(Set_DATA);
if (Set_MESE < 10) {
lcd.print("/0");
}
else {
lcd.print("/");
}
lcd.print(Set_MESE);
if (Set_ANNO < 10) {
lcd.print("/200");
}
else {
lcd.print("/20");
}
lcd.print(Set_ANNO);
//--------------------------------------------------ESCO DA MODIFICA ORA------------------
if (Puls_Ok == HIGH && Puls_Ok_Old == LOW){
Puls_Ok_Old = Puls_Ok;
Move_Set = Move_Set + 1;
if (Move_Set > 4){
lcd.clear();
Move_Set = 0;
break;
}
}
if (Puls_Ok == LOW && Puls_Ok_Old == HIGH){
Puls_Ok_Old = Puls_Ok;
}
}
loop();
}
void loop()
{
Ore = (RTC.get(DS1307_HR, true));
Min = (RTC.get(DS1307_MIN,false));
Sec = (RTC.get(DS1307_SEC,false));
Data = (RTC.get(DS1307_DATE,false));
Mese = (RTC.get(DS1307_MTH,false));
Anno = (RTC.get(DS1307_YR,false));
Puls_Set = digitalRead(53);
if (Puls_Set == HIGH && Puls_Set_Old == LOW){
Puls_Set == Puls_Set_Old;
modifica_ora();
}
if (Puls_Set == LOW && Puls_Set_Old == HIGH){
Puls_Set == Puls_Set_Old;
}
lcd.setCursor (0, 0);
Mostra_ora();
lcd.setCursor (10, 0);
Mostra_data();
//----------------------LED------------------------
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > 1000)
{
previousMillis = currentMillis;
if (statoLed1 == LOW)
statoLed1 = HIGH;
else
statoLed1 = LOW;
digitalWrite(led1, statoLed1);
}
unsigned long currentMillis1 = millis();
if (currentMillis1 - previousMillis1 > 150)
{
previousMillis1 = currentMillis1;
if (statoLed2 == LOW)
statoLed2 = HIGH;
else
statoLed2 = LOW;
digitalWrite(led2, statoLed2);
}
}