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