comando remoto ir

salve a tutti, sono alle prime armi con arduino.
ho bisogno di aiuto ho copiato in rete il codice per accendere e spegnere un led con telecomando samsun con due tasti diversi , e fin qui' tutto bene , ma vorrei alla sola pressione di un unico tasto accendere e al rilascio spegnere il led.
questo e' il mio :
#include <IRremote.h>

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
String stato;

void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}

void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value);

if (results.value == 1906441864) {
stato = "acceso";
}
else if (results.value == 3672802284) {
stato = "spento";
};

if(stato == "acceso"){
digitalWrite(13, HIGH);
}
else if (stato == "spento") {
digitalWrite(13, LOW);
};
irrecv.resume(); // Receive the next value
}
}

Benvenuto. :slight_smile:
Ti invitiamo a presentarti qui: Re: Presentazioni nuovi iscritti, fatevi conoscere da tutti! (Part 1) - Generale - Arduino Forum
e a leggere il regolamento: [REGOLAMENTO] Come usare questa sezione del forum - Italiano - Arduino Forum

Il codice deve essere racchiuso nei tag code, vedi regolamento, sezione 7 ti spiega come si fa

Quello che vuoi fare è un pò un casino.
Prima di tutto bisogna sapere se il tuo telecomando, quando tieni premuto di continuo lo stesso tasto, invia di continuo lo stesso codice oppure 0xFFFFFFF.

Alcuni consigli:

  • alla fine delle graffe chiuse degli else il punto e virgola è inutile
  • all'inizio della setup() è utile, se si spediscono dati al pc attraverso la seriale (Serial) mettere un ritardo di 1 secondo
  • queste MCU hanno poca memoria, non è Visual Basic su PC con molta ram. Perciò evita se puoi le String.
    Nel tuo codice è molto più semplice usare una variabile numerica (byte) e dichiarare due costanti mnemoniche.
#include <IRremote.h>

const byte LED_PIN  = 13;
const byte RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
#define K_SPENTO 0
#define K_ACCESO 1
byte stato=K_SPENTO;

void setup()
{ delay(1000);
  pinMode(LED_PIN, OUTPUT);
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop()  {
  if ( irrecv.decode(&results) )  {
    Serial.println(results.value); 
    if (results.value == 1906441864) {
      stato = K_ACCESO;
    }
    else if (results.value == 3672802284) { 
      stato = K_SPENTO; 
    }
    
    if(stato == K_ACCESO) { 
      digitalWrite(LED_PIN, HIGH); 
    }
    else if (stato == K_SPENTO)  {
      digitalWrite(LED_PIN, LOW);  
    }    
    irrecv.resume(); // Receive the next value
  }
}