Buenas, he estado trasteando un receptor de infrarrojos y tengo un codigo que me va bien para encender un led para las pruebas, todo bien hasta que me he dicho ahora 2 botones para encender el led!!!
Y me he dado cuenta que no entiendo bien el funcionamiento del if y else xDD
El problema es que veo que solo funciona bien el ultimo if, en este codigo es la tecla del mando "100+" que es la unica que funciona bien, el otro boton "0" solo enciende el led, no lo apaga.
Y otra cosa es que tendria que poner un delay porque digamos que tiene rebote el boton del mando y ha veces presiono el boton y se enciende y apaga el led y tengo que darle rapido, como seria la mejor forma de poner un delay que solo actue cuando le doy al boton? (supongo que en el if que solo actua cuando le daria al boton "X").
Gracias por vuestra ayuda!!!
ACTUALIZO: Dejo el codigo para encender el pin 2 digital y el pin 13 digital con dos botones del mando a distancia.
Por el monitor serie si hacen click a un boton del mando os saldra el codigo que tiene ese boton y modificais el define num0 y 100 por el que querais de vuestro mando.
/*Conexion de Pins del receptor IR:
Pin 1 IR va al pin PWM que queremos del arduino en este caso el 8
Pin 2 del IR al negativo
Pin 3 del IR va al positivo poniendo una resistencia de 10k en medio.
*/
#include <IRremote.h>
#define num0 16738455
#define num100 16750695
int RECV_PIN = 8;
int ledPin = 13;
int ledPin2 = 2;
int estatpin13 = 0;
int estatpin2 = 0;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
}
void num1() {
if(results.value == num0){ //el 16738455 es el numero 0 para saber que numero tiene la tecla de qualquier mando compatible solo mirar el serial y darle a la tecla
estatpin13 = digitalRead(ledPin);
if (estatpin13 == LOW) {
digitalWrite(ledPin, HIGH);}
else {
digitalWrite(ledPin, LOW);}}
}
void numero100() {
if (results.value == num100){
estatpin2 = digitalRead(ledPin2);
if (estatpin2 == LOW) {
digitalWrite(ledPin2, HIGH);}
else {
digitalWrite(ledPin2, LOW);}}
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, DEC);
num1();
numero100();
irrecv.resume(); // Recivir siguiente valor
}}
/* Este codigo seria para enviar señales por infrarrojos, aun no he probado.
Se usa un led de infrarrojos en el pin 3 del arduino poniendo una resistencia de 100ohms(puedes cambiar de pin mientas sea PWM)
#include <IRremote.h>
IRsend irsend;
void setup()
{
Serial.begin(9600);
}
void loop() {
if (Serial.read() != -1) {
for (int i = 0; i < 3; i++) {
irsend.sendSony(0xa90, 12); // Sony TV power code
delay(100);
}
}
}
*/