miércoles, 30 de abril de 2014

Crear nueva libreria(I)

En este post intentaré explicar como crear una librería sencilla, para usar un módulo de led RGB con 7 colores.

Lo primero hay que mencionar los archivos básicos de la librería, que son dos, uno con extensión .h y otro con extensión .cpp.

A la librería le llamaremos Rgb, por lo tanto serán los archivos Rgb.h y Rgb.cpp

Empezamos con el .h

  •  Rgb.h
/*
Rgb.h
Created by millan2525 http://arduinofacill.blogspot.com.es/
*/
#ifndef Rgb_h
#define Rgb_h
#include "Arduino.h"

class Rgb
{
   public: Rgb(int red, int green, int blue); void color(int rojo, int verde, int azul);
   private:
   int _red;
   int _green;
   int _blue;
};

#endif

Si vamos por partes, el ifndef y el define Rgb_h lo quita errores de incompatibilidad al llamar varias veces a la clase.

El #include "Arduino.h" incluye las funciones principales de arduino, que un scketch carga por defecto.

Despues simplemente nombramos los metodos y procesos, y los asignamos según sean públicos o privados(Solo pueden ser editados y ejecutados desde dentro de la clase).

#endif finaliza la clase.


Si pasamos al segundo archivo, el cpp.

Rgb.cpp
/*
Rgb.cpp
Created by millan2525 http://arduinofacill.blogspot.com.es/
*/

#include "Arduino.h"
#include "Rgb.h"

Rgb::Rgb(int red, int green, int blue)
{
   pinMode(red, OUTPUT);
   pinMode(green, OUTPUT);
   pinMode(blue, OUTPUT);
   _red = red;
   _green = green;
   _blue = blue;
}

void Rgb::color(int rojo, int verde, int azul)
{
 if(rojo == 1){
   digitalWrite(_red, HIGH);
   } else {
   digitalWrite(_red, LOW); }
 if(verde == 1){
   digitalWrite(_green, HIGH);
   } else {
   digitalWrite(_green, LOW); }
 if(azul == 1){
   digitalWrite(_blue, HIGH);
   } else {
   digitalWrite(_blue, LOW); }
}


#include "Arduino.h"
#include "Rgb.h"

Incluye los archivos Arduino.h y Rgb.h(el que hemos creado y el de arduino básico)

Rgb::Rgb(int red, int green, int blue)
{
   pinMode(red, OUTPUT);
   pinMode(green, OUTPUT);
   pinMode(blue, OUTPUT);
   _red = red;
   _green = green;
   _blue = blue;
}

Inicia los valores al iniciar la clase, Rgb:Rgb hace referencia a la clase.

void Rgb::color(int rojo, int verde, int azul)
{
 if(rojo == 1){
   digitalWrite(_red, HIGH);
   } else {
   digitalWrite(_red, LOW); }
 if(verde == 1){
   digitalWrite(_green, HIGH);
   } else {
   digitalWrite(_green, LOW); }
 if(azul == 1){
   digitalWrite(_blue, HIGH);
   } else {
   digitalWrite(_blue, LOW); }
}

crea la función color, con los parametros de los tres leds independientes.

Mañana explicaré como se usa y algunas otras cosas
Un saludo ;)

martes, 29 de abril de 2014

Módulo RGB con Aruino Mega

Se trata de ir cambiando el color de un led cada segundo


Un Módulo RGB es una luz con tres diodos de distintos colores juntos, RGB significan Red(rojo), Green(verde) y Blue(Azul).

Usando unas resistencias de 220 ohminos y conectando el B(azul) en la salida 2, la G(verde) en la 3, y la R(roja), en la 4.

Conectando el común al negativo.

Quedaría así:

Y el esquema así:


El código hemos usado salidas digitales y quedaría así:

// Primero indicamos las salidas
int R = 2;
int G = 3;
int B = 4;

void setup() {       
// Las marcamamos como salidas 
pinMode(R, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(B, OUTPUT);  
}
// Hacemos las 9 conbinaciones posibles
void loop() {
  digitalWrite(R, LOW); 
  digitalWrite(G, LOW);  
  digitalWrite(B, LOW); 
  delay(1000);
  digitalWrite(R, LOW); 
  digitalWrite(G, LOW);  
  digitalWrite(B, HIGH); 
  delay(1000);
  digitalWrite(R, LOW); 
  digitalWrite(G, HIGH);  
  digitalWrite(B, LOW); 
  delay(1000);
  digitalWrite(R, LOW); 
  digitalWrite(G, HIGH);  
  digitalWrite(B, HIGH); 
  delay(1000);
  digitalWrite(R, HIGH); 
  digitalWrite(G, LOW);  
  digitalWrite(B, LOW); 
  delay(1000);
  digitalWrite(R, HIGH); 
  digitalWrite(G, LOW);  
  digitalWrite(B, HIGH); 
  delay(1000);
  digitalWrite(R, HIGH); 
  digitalWrite(G, HIGH);  
  digitalWrite(B, LOW); 
  delay(1000);
    digitalWrite(R, HIGH); 
  digitalWrite(G, HIGH);  
  digitalWrite(B, HIGH                              ); 
  delay(1000);
 
}

Y ya solo queda probar