jueves, 22 de agosto de 2013

Arduino Tutorial 12: LCD + RGB



En esta práctica vamos a conectar el led rgb con la pantalla ldr. El color que vaya luciendo en el led, aparecerá escrito en la pantalla ldr. Le doy las gracias a Jenny y a Eloy por su trabajo.

El esquema de esta práctica es el siguiente:


Para el código, hemos juntado la práctica del led rgb y el la de la lcd:


#include <LiquidCrystal.h>



    //declaramos los pines de la ldr

    LiquidCrystal lcd(12, 11, 10, 9, 8, 7);

  

     //Declaramos los puertos de entradas y salidas y variables

    int ledRojo = 1; //Declarar Pin LED Rojo

    int ledVerde=3; //Declarar Pin LED Verde

    int ledAzul=2;  //Declarar Pin LED Azul

    

    //------------------------------------

    //Funcion principal

    //------------------------------------

    void setup() // Se ejecuta cada vez que el Arduino se inicia

    {

      pinMode(ledRojo,OUTPUT);  //El LED Rojo como salida

      pinMode(ledVerde,OUTPUT); //El LED Verde como salida

      pinMode(ledAzul,OUTPUT);  //El LED Azul como salida

    

    }

    

    //------------------------------------

    //Funcion ciclicla

    //------------------------------------

    void loop() // Esta funcion se mantiene ejecutando

    {           //  cuando se da energia al Arduino

    

       // Se llama a la funcion Color que recibe

       // 1er posicion: Rojo

       // 2da posición: Verde

       // 3ra posición: Azul

    

       lcd.print("Rojo");

       color(255,0,0);     //Rojo

      

       lcd.print("Verde");

       color(0,255,0);     //Verde

      

       lcd.print("Azul");

       color(0,0,255);     //Azul

      

     

    }

    

    //------------------------------------

    //Funcion color

    //------------------------------------

    void color(int rojo, int verde, int azul)

    {

        

        //Escritura del color Rojo

        analogWrite(ledRojo, 255-rojo);

    

        //Escritura del color Verde

        analogWrite(ledVerde, 255-verde);

    

        //Escritura del color Azul

        analogWrite(ledAzul, 255-azul);

       

          delay(1000);

          lcd.clear();  //limpia la pantalla ldr

          lcd.setCursor(0, 1);  //pone el cursor en el inicio de la pantalla ldr

    }

    

    //Fin programa





Aquí os dejo un vídeo de lo que hace la práctica:
video


Para los que sabéis un poco más de programación, aquí os dejo otro código más complicado, pero más profesional.
Debo dar las gracias a Eloy, un amigo informático, el cual ha sido capaz de hacer este código:



#include <LiquidCrystal.h>



#define SIZE_COLOR_ARRAY 3



    class COLOR_RGB {

      public:

              int red;

              int green;

              int blue;

              char *name;

              COLOR_RGB(char *_name, int _red, int _green, int _blue);

    };

   

    COLOR_RGB::COLOR_RGB(char *_name, int _red, int _green, int _blue)

    {

        name = _name;

        red = _red;

        green = _green;

        blue = _blue;

    }





    // initialize the library with the numbers of the interface pins

    LiquidCrystal lcd(12, 11, 10, 9, 8, 7);

    /*

     ---------------------------------------------

      LED RGB - Tabla de Colores

     ---------------------------------------------

    */

    

    //--------------------------------------------------

    //Declaramos los puertos de entradas y salidas y variables

    //--------------------------------------------------

    int ledRojo = 1; //Declarar Pin LED Rojo

    int ledVerde=3; //Declarar Pin LED Verde

    int ledAzul=2;  //Declarar Pin LED Azul

   

    COLOR_RGB colores[SIZE_COLOR_ARRAY] = {COLOR_RGB("Rojo",255,0,0),COLOR_RGB("Verde",0,255,0),COLOR_RGB("Azul",0,0,255)};

   

    //------------------------------------

    //Funcion principal

    //------------------------------------

    void setup() // Se ejecuta cada vez que el Arduino se inicia

    {

      pinMode(ledRojo,OUTPUT);  //El LED Rojo como salida

      pinMode(ledVerde,OUTPUT); //El LED Verde como salida

      pinMode(ledAzul,OUTPUT);  //El LED Azul como salida

    }

    

    //------------------------------------

    //Funcion ciclicla

    //------------------------------------

    void loop()            // Esta funcion se mantiene ejecutando

    {                            //  cuando se da energia al Arduino

    

       // Se llama a la funcion Color que recibe

       // 1er posicion: Rojo

       // 2da posición: Verde

       // 3ra posición: Azul

      

       while(1)

       {

           for(int i=0;i<SIZE_COLOR_ARRAY;i++)

           {

               setColor(i);

           }

       }

    }

    

    //------------------------------------

    //Funcion color

    //------------------------------------

   

    void setColor(int i)

    {

      // Limpiar pantalla

      lcd.clear();

       //Escritura del color Rojo

      analogWrite(ledRojo, 255-colores[i].red);

      

      //Escritura del color Verde

      analogWrite(ledVerde, 255-colores[i].green);

      

      //Escritura del color Azul en el LED

      analogWrite(ledAzul, 255-colores[i].blue);

     

      // Escribir el nombre en la pantalla LCD

      lcd.print(colores[i].name);

      

      delay(1000);

    }

//Fin programa