Primero pruebe que el control remoto IR está funcionando.
Debería poder ver la luz IR LED usando la cámara en un teléfono inteligente o una cámara digital.
Si tiene un dispositivo con el que funciona el control remoto por infrarrojos, utilícelo para probarlo.
Luego simplifica el programa.
Intente algo que muestre que está recibiendo una señal IR.
#include <IRremote.h>
const int RECV_PIN = 11; // the pin where you connect the output pin of TSOP4838
const int led = 3;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600); // you can comment this line
irrecv.enableIRIn(); // Start the receiver
pinMode(led, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
digitalWrite(led, HIGH);
Serial.println(results.value, DEC);
irrecv.resume(); // Receive the next value
} else {
digitalWrite(led, LOW);
}
}
Si esto funciona, hay evidencia de que el control remoto IR está funcionando. Por lo tanto, un problema probable es que los códigos enviados para cada uno de '1' a '9' sean diferentes de los códigos que el programa está tratando de hacer coincidir. Por ejemplo, if(value == 6630)
está buscando un código de 6630, pero si el control remoto IR no lo envía cuando se presiona uno de sus botones '1' a '9', entonces no se reconocerá un botón.
Para saber qué códigos envía el control remoto por infrarrojos, abra el monitor en serie del Arduino IDE y vea qué códigos se imprimen cuando presiona cada uno de los botones '1' a '9'. Presiónelos uno por uno y anote los valores, luego repítalos varias veces para asegurarse de que sean razonablemente confiables.
Una vez que tenga estos códigos, actualice el programa para que coincida, y debería funcionar. Por ejemplo, cambie if(value == 6630){ brightness=25; }
para tener el código para el botón de control remoto IR '1'.
El programa en la pregunta usa brillo = 25 para brillo = 255.
Use un rango menor inicialmente, ya que los niveles de brillo muy bajos pueden ser difíciles de ver.
Sugiero comenzar con brillo = 100 para '1' a brillo = 255 para '9' inicialmente, y luego extenderlo hacia abajo si 100 es demasiado brillante.
La sensibilidad del ojo humano no es lineal, sino logarítmica, por lo que obtener buenos niveles de brillo puede ser bastante difícil.
Es posible que tenga un programa un poco más fácil de administrar si pudiera colocar sus códigos y valores en una tabla. Normalmente utilizaría una matriz de structs
, pero podría ser más fácil entender el código con dos matrices simples:
int button_codes[10] = {
0, // unused
6630, // '1'
// other codes
2550, // '9'
};
unsigned char brightness[10] = {
0, // unused
100, //'1'
// other matching brightness values
255,
};
// ...
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, DEC);
for (int i=0; i<0; i+=1) {
if (results.value == button_codes[i]) { // find a matching code
analogWrite(led, brightness[i]); // set LED to corresponding value
}
}
irrecv.resume(); // Receive the next value
}
}
Esto tiene el pequeño beneficio de que todos los valores de brillo están en un solo lugar. Además, podría ser útil usar la tabla brightness
para permitirle usar, digamos, los botones arriba y abajo para aumentar y disminuir el brillo de los LED.
Si este programa de prueba no funciona, y el LED no se enciende cuando se presiona una tecla IR, entonces las opciones obvias para eliminar son:
- El control remoto por infrarrojos no funciona correctamente
- El control remoto IR está funcionando pero su frecuencia de modulación es
lo suficientemente diferente del receptor IR que se está ignorando
(no muy probable)
- El cableado está roto
- El programa está roto