Código escenas RGB
Buenas tardes,
A continuación os presento el desarrollo de un proyecto de Arduino capaz de crear distintas escenas con un LED RGB. Las escenas serán controladas mediante un control remoto de IR:
Podéis simularlo a continuación:
Antes un esquema de colorimetría RGB:Después de ver este esquema, realizaremos el algoritmo mezclando los colores para crear 7 escenas:
- El botón 1 dará luz roja
- El botón 2 dará luz verde
- El botón 3 dará luz azul
- El botón 4 dará luz roja + verde = amarillo
- El botón 5 dará luz roja + azul = morado
- El botón 6 dará luz verde + azul = cían
- El botón 7 dará luz verde + azul + roja = blanca
- El botón 0 apagará las 3 luces.
El montaje y los elementos podéis verlos en el siguiente esquema:
El código de programación es el siguiente:
#include <IRremote.h> //incluimos en el programa la librería para el IRremote
int red=9; //Designamos el número entero 9 para la palabra red
int green=13; //Designamos el número entero 13 para la palabra green
int blue=10; //Designamos el número entero 10 para la palabra blu
int RECV_PIN = 11; //Designamos el número entero 11 para la señal del IR
IRrecv irrecv(RECV_PIN); //Asignamos la palabra IRrecev al pin que llega la señal IR
decode_results results; //Asignamos la palabra decode_results al código que llega en la señal IR
void setup() //definimos los pines de entrada y salida (el montaje)
{
pinMode(red, OUTPUT);//asignamos el pin del led rojo como salida
pinMode(green, OUTPUT);//asignamos el pin del led verde como salida
pinMode(blue, OUTPUT);//asignamos el pin del led blue como salida
Serial.begin(9600); //comenzamos el monitor en serie a 9600baudios
Serial.println("Enabling IRin");//Comienza la escritura de los datos del IR en el monitor
irrecv.enableIRIn();//comando para habilitar el funcionamiento del sensor IR
Serial.println("Enabled IRin");//Escritura ya comenzada del IR en el monitor
}
void loop() //comenzamos el bucle de programación
{
if (irrecv.decode(&results))
{
Serial.println(results.value, HEX);
irrecv.resume();
if (results.value==0xFD30CF) //si recibimos el valor 0
{
digitalWrite(red, LOW); //rojo sin activar
digitalWrite(green, LOW);//verde sin activar
digitalWrite(blue, LOW);//azul sin activar
}
else if (results.value==0xFD08F7) //si recibimos el valor 1
{
digitalWrite(red, HIGH); //rojo activo
digitalWrite(green, LOW);//verde sin activar
digitalWrite(blue, LOW);//azul sin activar
}
else if (results.value==0xFD8877) //si recibimos el valor 2
{
digitalWrite(red, LOW); //rojo sin activar
digitalWrite(green, HIGH);//verde activo
digitalWrite(blue, LOW);//azul sin activar
}
else if (results.value==0xFD48B7) //si recibimos el valor 3
{
digitalWrite(red, LOW); //rojo sin activar
digitalWrite(green, LOW);//verde sin activar
digitalWrite(blue, HIGH);//azul activo
}
else if (results.value==0xFD28D7) //si recibimos el valor 4
{
digitalWrite(red, HIGH); //rojo activo
digitalWrite(green, HIGH);//verde activo
digitalWrite(blue, LOW);//azul sin activar
}
else if (results.value==0xFDA857) //si recibimos el valor 5
{
digitalWrite(red, HIGH); //rojo activo
digitalWrite(green, LOW);//verde sin activar
digitalWrite(blue, HIGH);//azul activo
}
else if (results.value==0xFD6897) //si recibimos el valor 6
{
digitalWrite(red, LOW); //rojo sin activar
digitalWrite(green, HIGH);//verde activo
digitalWrite(blue, HIGH);//azul activo
}
else if (results.value==0xFD18E7) //si recibimos el valor 7
{
digitalWrite(red, HIGH); //rojo activo
digitalWrite(green, HIGH);//verde activo
digitalWrite(blue, HIGH);//azul activo
}
}
delay(100); //retraso de 100 msg antes de volver recomenzar el bucle
}

Comentarios
Publicar un comentario