sketch domotica (ho risolto perchè non riesco a cancellare il post?)

ciao a tutti,
avrei bisogno di una mano nel compilare uno sketch dove arduino legga il valore di un pulsante collegato, il segnale ir di un telecomando, li confronti e accenda e spenga un relè in base allo stato dei due… quello che farebbero due deviatori in un impianto di casa…sono nuovo di programmazione e mi sto incasinando un pò…ù

questo è lo sketch ma se premo dal telecomando prima spegne e poi riaccende…il pulsante del telecomando è quello associato allo statoA

#include <IRremote.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(6,7,2,3,4,5);
#define A 10  
#define B 11  
#define C 12
#define D 13
int RECV_PIN = 9;
int STATUS_PIN = A3;
const int buttonPin = 8;
int buttonState = 0;
// accendi e spegni con lo stesso pulsante
int statoA = 0;  
int statoB = 0;  
int statoC = 0;
int statoD = 0;
IRrecv irrecv(RECV_PIN);
IRsend irsend;
int fading = 1; // se = 0 Sola acquisizione di segnali. Se = 1 funzionamento regolare
decode_results results;
void setup()
{
  lcd.begin(16,2);
  lcd.setCursor(0,0);
  lcd.print("Home Automation");
  Serial.begin(9600);
  irrecv.enableIRIn(); // Inizializza il ricevitore
  pinMode(buttonPin, INPUT);
  pinMode(STATUS_PIN, OUTPUT);
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
}
// Stoccaggio del codice registrato
int codeType = -1; // Tipo di codice
unsigned long codeValue; // Il valore del codice in formato RAW
unsigned int rawCodes[RAWBUF]; // La durata del RAW
int codeLen; // La lunghezza del codice
int toggle = 0;

void storeCode(decode_results *results) {
  codeType = results->decode_type;
  int count = results->rawlen;
  if (codeType == UNKNOWN) {
    Serial.println("Ricevuto un codice sconosciuto, lo salverò come RAW");
    codeLen = results->rawlen - 1;
    for (int i = 1; i <= codeLen; i++) {
      if (i % 2) {
        // Mark
        rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK - MARK_EXCESS;
        Serial.print(" m");
      } 
      else {
        // Space
        rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK + MARK_EXCESS;
        Serial.print(" s");
      }
      Serial.print(rawCodes[i - 1], DEC);
    }
    Serial.println("");
  }
  else {
    if (codeType == NEC) {
      Serial.print("Ricevuto codice NEC: ");
      if (results->value == REPEAT) {
        Serial.println("Ripetizione comando; Ignoro.");
        return;
      }
    } 
    else if (codeType == SONY) {
      Serial.print("Ricevuto codice SONY: ");
    } 
    else if (codeType == RC5) {
      Serial.print("Ricevuto codice RC5: ");
    } 
    else if (codeType == RC6) {
      Serial.print("Ricevuto codice RC6: ");
    } 
    else if (codeType == SAMSUNG) {
      Serial.print("Ricevuto codice Samsung: ");
    } 
    else {
      Serial.print("Tipo di codice sconosciuto ");
      Serial.print(codeType, DEC);
      Serial.println("");
    }
    Serial.println(results->value, HEX);
    codeValue = results->value;
    codeLen = results->bits;
  }
}
void loop() {
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH && statoA==0) {
   digitalWrite(A, HIGH); 
   }
 else if (buttonState == HIGH && statoA == 1){
   digitalWrite(A, LOW); 
  }
  else if (buttonState == LOW && statoA == 0){
   digitalWrite(A, LOW); 
  }
  else if (buttonState == LOW && statoA == 1){
   digitalWrite(A, HIGH); 
  }
  if (irrecv.decode(&results)) {
     digitalWrite(STATUS_PIN, HIGH);
     delay(200);               // wait for a second
     digitalWrite(STATUS_PIN, LOW);    // turn the LED off by making the voltage LOW
     delay(100);               // wait for a second
     digitalWrite(STATUS_PIN, HIGH);
     delay(200);               // wait for a second
     digitalWrite(STATUS_PIN, LOW);    // turn the LED off by making the voltage LOW
     delay(100);               // wait for a second
     digitalWrite(STATUS_PIN, HIGH);
     storeCode(&results);
     if (codeValue == 0xE0E036C9) {
      if (statoA==0 && buttonState == LOW ){
      digitalWrite(A,HIGH);
      digitalWrite(statoA,HIGH);
      delay (400);
      lcd.clear();
      lcd.setCursor(0,1);
      lcd.print("Luce Accesa");
      Serial.println("ON A");
      }
      else if (statoA==0 && buttonState == HIGH){
      digitalWrite(A,LOW);
      digitalWrite(statoA,LOW);
      delay (400);
      lcd.clear();
      lcd.setCursor(0,1);
      lcd.print("Luce Spenta");
      Serial.println("OFF A");
      }
      else if (statoA==1 && buttonState == HIGH){
      digitalWrite(A,HIGH);
      digitalWrite(statoA,HIGH);
      delay (400);
      lcd.clear();
      lcd.setCursor(0,1);
      lcd.print("Luce Spenta");
      Serial.println("OFF A");
      }
      else if (statoA==1 && buttonState == LOW){
      digitalWrite(A,LOW);
      digitalWrite(statoA,LOW);
      delay (400);
      lcd.clear();
      lcd.setCursor(0,1);
      lcd.print("Luce Spenta");
      Serial.println("OFF A");
      }
      }
    if (codeValue == 0xE0E028D7) {
      if (statoB==0) {
      digitalWrite(B,HIGH);
      statoB=1;
      delay (400);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Home Automation");
      lcd.setCursor(0,1);
      lcd.print("SX Spento");
      Serial.println("ON B");
      }
      else {
      digitalWrite(B,LOW);
      statoB=0;
      delay (400);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Home Automation");
      lcd.setCursor(0,1);
      lcd.print("SX Acceso");
      Serial.println("OFF B");
      }
      }
    if (codeValue == 0xE0E0A857) {
      if (statoC==0) {
      digitalWrite(C,HIGH);
      statoC=1;
      delay (400);
      Serial.println("ON C");
      }
      else {
      digitalWrite(C,LOW);
      statoC=0;
      delay (400);
      Serial.println("OFF C");
      }
      }
    if (codeValue == 0xE0E06897) {
      if (statoD==0) {
      digitalWrite(D,HIGH);
      statoD=1;
      delay (400);
      Serial.println("ON D");
      }
      else {
      digitalWrite(D,LOW);
      statoD=0;
      delay (400);
      Serial.println("OFF D");
      }
      }
      buttonState=statoA;
      irrecv.resume(); // resume receiver
      digitalWrite(STATUS_PIN, LOW);
      
      }
      }