The Best Geek Forum

Programmazione di Arduino

Hai bisogno di aiuto per il tuo codice?? Posta qui il tuo problema! Degli utenti specializzati provvederanno subito ad assisterti!

Moderatore: Moderatore in prova

Salve a tutti, sto realizzando un dispositivo di automazione per l'illuminazione con Arduino Mega 2560, questo lo sketch che funziona ma ha alcuni problemi...

Codice: Seleziona tutto

#include <IRremote.h>

int IRpin = 11;    // IR Receiver

int RELE1 = 22;    // Relay 1
int RELE2 = 23;    // Relay 2
int RELE3 = 24;    // Relay 3
int RELE4 = 25;    // Relay 4

int beep = 22;     //Non collegato (buzzer)

IRrecv irrecv(IRpin);
decode_results results;

void setup() {
  //Pin scheda relay(4) output
pinMode(RELE1, OUTPUT);
pinMode(RELE2, OUTPUT);
pinMode(RELE3, OUTPUT);
pinMode(RELE4, OUTPUT);

Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  Serial.println("SISTEMA AUTOMAZIONE ILLUMINAZIONE - 4 RELAY");
Serial.println("Usare il telecomando infrarossi o la pulsantiera per controllare il dispositivo");
}

void loop() {
if (irrecv.decode(&results)) 
    {
      
      irrecv.resume();   // Receive the next value

    }
    int tasto = (results.value);
    switch(tasto)
 {

  case 16724175:
  if (digitalRead(RELE1) == HIGH){
  digitalWrite(RELE1, LOW); 
}
 else
 {
  digitalWrite(RELE1, HIGH);
 }
break;
 case 16718055:
  if (digitalRead(RELE2) == HIGH){
  digitalWrite(RELE2, LOW);
}
 else
 {
  digitalWrite(RELE2, HIGH);
 }
 break;
 case 16743045:
  if (digitalRead(RELE3) == HIGH){
  digitalWrite(RELE3, LOW); 
}
 else
 {
  digitalWrite(RELE3, HIGH);
 }
 break;
 case 16716015:
  if (digitalRead(RELE4) == HIGH){
  digitalWrite(RELE4, LOW); 
}
 else
 {
  digitalWrite(RELE4, HIGH);
 }
 
  break;
  
  }

}
Il problema principale è che quando premo uno dei 4 pulsanti sul telecomando IR, il relè corrispondente non sempre si accende ma si limita a lampeggiare il led corrispondente oppure si accendono 2 rele assieme invece che uno solo.
Per limitare il problema ho provato a mettere un delay(1000) dopo ogni CASE per evitare errori dati dalla velocità dell'esecuzione ma eliminati i problemi precedentemente detti, se attivo ad esempio il led 1 a volte va bene, altre inizia ad andare in loop ON OFF a tempo di delay, qualcuno ha idea di come si possa risolvere? grazie
Ho risolto portando a 0 il valore letto dal sensore IR subito dopo ogni case ed ho sostituito i case con delle if per integrare anche dei pulsanti collegati direttamente ad arduino :D