Eccovi il codice che ho:
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>
#include <ByVacLCD.h>
int addr; ByVacLCD
lcd = ByVacLCD(0x21,4,20);
int rtc[7];
int countdown = 180;
int count_t = 0;
int luxPin = 7;
int lux_active = 0;
int ledPin5_2 = 5;
int ledPin6_3 = 6;
int sensore_magnetico_1 =2;
int sensore_magnetico_2 =3;
int val1 = 0;
int val2 = 0;
int val1_1 = 1;
int val2_2 = 0;
int val_chiusa = 0;
int val_in_apertura = 0;
int val_aperta = 0;
int val_in_chiusura = 0;
void setup()
{
Serial.begin(9600);
lcd.init();
lcd.clear();
pinMode(ledPin5_2, OUTPUT);
pinMode(ledPin6_3, OUTPUT);
pinMode(luxPin, OUTPUT);
pinMode(sensore_magnetico_1, INPUT);
pinMode(sensore_magnetico_2, INPUT);
}
void loop()
{
val1 = digitalRead(sensore_magnetico_1);
if(val1 == LOW){
val1_1 = 1;
val2_2 = 0;
digitalWrite(ledPin5_2, HIGH);
Serial.println(val_chiusa);
if( val_chiusa==0 ){
lcd.setCursor(3,0);
lcd.print("chiusa ");
val_chiusa=1;
}
}
if(val1 == HIGH){
digitalWrite(ledPin5_2, LOW);
lcd.setCursor(3,0);
lcd.print("aperta");
val_chiusa=0;
if( val1_1 == HIGH ){
while(val1_1 == HIGH){
lcd.setCursor(3,0);
lcd.print("in apertura ");
lux();
val_chiusa=0;
digitalWrite(ledPin6_3, HIGH);
delay(500);
digitalWrite(ledPin6_3, LOW);
delay(500);
val1 = digitalRead(sensore_magnetico_1);
val2 = digitalRead(sensore_magnetico_2);
if((val1 == LOW || val2 == LOW)) { val1_1 = LOW; }
ora();
}
}
}
val2 = digitalRead(sensore_magnetico_2);
if(val2 == LOW) {
val2_2 = 1;
digitalWrite(ledPin6_3, HIGH);
lcd.setCursor(3,0);
lcd.print("aperta ");
val_chiusa=0;
}
if(val2 == HIGH) {
digitalWrite(ledPin6_3, LOW);
if(val2_2 == HIGH){
while(val2_2 == HIGH){
//lcd.clear();
lcd.setCursor(3,0);
lcd.print("in chiusura ");
val_chiusa=0;
digitalWrite(ledPin5_2, HIGH);
delay(500);
digitalWrite(ledPin5_2, LOW);
delay(500);
val1 = digitalRead(sensore_magnetico_1);
val2 = digitalRead(sensore_magnetico_2);
if((val1 == LOW || val2 == LOW)) { val2_2 = LOW; }
ora();
}
}
}
ora();
if(lux_active == 1){
lux_close();
}
}
void lux()
{
RTC.get(rtc,true);
if( lux_active == 0 ){
if(rtc[5]>=3 && rtc[5]<=9){
if(rtc[2]>=20 || rtc[2]<=8){
lux_active = 1;
digitalWrite(luxPin, HIGH);
}
}
}
}
void lux_close(){
/*if(val_chiusa==0){
digitalWrite(luxPin, LOW);
lux_active = 0;
}*/
if( count_t >= countdown){
digitalWrite(luxPin, LOW);
count_t = 0;
lux_active = 0;
}else{
delay(1000);
count_t = count_t + 1;
}
}
void ora()
{
// rtc -> lcd
lcd.setCursor(0,0);
RTC.get(rtc,true);
if(rtc[2]<10){ lcd.print("0"); }
lcd.print(rtc[2]);
lcd.print(":");
if(rtc[1]<10){ lcd.print("0"); }
lcd.print(rtc[1]);//min
lcd.print(":");
if(rtc[0]<10){ lcd.print("0"); }
lcd.print(rtc[0]);//sec
lcd.print(" ");
lcd.print(rtc[4]);//giorno
lcd.print("/");
lcd.print(rtc[5]);//mese
lcd.print("/");
lcd.print(rtc[6]);//anno
delay(1);
}