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

Entradas populares