richiesta modifica codice

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); 
 }