martes, 20 de mayo de 2014

Nos hemos mudado a http://arduinofacil.es

jueves, 1 de mayo de 2014

Crear nueva libreria(II)

Una vez tenemos lo que es la librería ya preparada, le vamos a añadir un ejemplo para facilitar posteriormente su uso.

Se creará una carpeta llamada ejemplos.

Que contendrá nuestro archivo de ejemplo realizado con Arduino, lo llamaremos ejemplo.ino

ejemplo.ino

#include <Rgb.h>
// Indicar las salidas (rojo, verde, azul)
Rgb rgb(4,3,2);

void setup() {}

void loop()
{// Indicar el color (rojo, verde, azul)
   rgb.color(1,0,0);
   delay(3000);
}

Como se puede ver, incluirá la libreria al principio, posteriormente se llamará a la función, y después el setup quedará vacio.

Posteriormente llamamos a la función color(1,0,0)

Con esto ya esta terminada la librería, aprenderemos más cosas útiles en los próximos capítulos

Un saludo

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

miércoles, 26 de marzo de 2014

Display de 7 segmentos arduino cambiar numeros cada x tiempo

Segunda práctica, DISPLAY de 7 segmentos de ánodo común

Lo primero he encontrado una imagen para ver la diferencia de conexión entre un ánodo común y el cátodo común, creo que se entiende

imagen extraida de: http://picmind.es.tl/Conectando-Un-Display-7-Segmentos-A-Un-Pic.htm


Habrá que tener en cuenta que la resistencia siempre se pondrá en el común para que no necesitemos una por segmento.

Para realizarlos en orden, considero que lo mejor es que asignemos a cada salida el valor que tienen, aunque personalmente no me gusta usar el 0 y el 1 por si algún día quiero usar la conexión via pc.


Quedaría así, conectando el que no tiene número(ánodo común) a 5V, y en medio una resistencia de 300 Ohmnios





Explicaciones complementarias: Al estar cargado el ánodo con 5V, las salidas deberán marcar 0V(LOW) para que se encienda cada led, y 5V(HIGH) para que estén apagadas.

Programando:

/*
EJERCICIO NUMEROS DISPLAY 7 SEGMENTOS www.arduinofacill.blogspot.com
AUTOR: ASSM
LICENCIA: GNU
OBJETIVO: HACER LOS NÚMEROS DEL 0 AL 9 QUE SE VALLAN CAMBIANDO TRÁS UN TIEMPO(300 MILISEGUNDO)
 */


int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 7;
int led7 = 8;
int led8 = 9;
// the setup routine runs once when you press reset:
void setup() {               
  // initialize the digital pin as an output.
  pinMode(led1, OUTPUT); // SUPERIOR DERECHA
  pinMode(led2, OUTPUT); // INFERIOR DERECHA
  pinMode(led3, OUTPUT); // INFERIOR
  pinMode(led4, OUTPUT); // INFERIOR IZQUIERDA
  pinMode(led5, OUTPUT); // SUPERIOR IZQUIERDA
  pinMode(led6, OUTPUT); // SUPERIOR
  pinMode(led7, OUTPUT); // CENTRAL
  pinMode(led8, OUTPUT); // PUNTO, NO USADO
}

void uno(){
  digitalWrite(led1, HIGH);
  digitalWrite(led2, HIGH); 
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);  
  digitalWrite(led5, HIGH);
  digitalWrite(led6, HIGH);
  digitalWrite(led7, HIGH);
  digitalWrite(led8, HIGH);
}

void dos(){
  digitalWrite(led1, LOW);  
  digitalWrite(led2, HIGH);  
  digitalWrite(led3, LOW);  
  digitalWrite(led4, LOW); 
  digitalWrite(led5, LOW); 
  digitalWrite(led6, LOW);
  digitalWrite(led7, HIGH);
  digitalWrite(led8, HIGH);   
 
}

void tres(){
  digitalWrite(led1, LOW);
  digitalWrite(led2, HIGH); 
  digitalWrite(led3, LOW); 
  digitalWrite(led4, LOW);  
  digitalWrite(led5, HIGH); 
  digitalWrite(led6, LOW);  
  digitalWrite(led7, LOW);
  digitalWrite(led8, HIGH); 
 
}
void cuatro(){
  digitalWrite(led1, HIGH);
  digitalWrite(led2, HIGH); 
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  digitalWrite(led5, LOW);
  digitalWrite(led6, LOW);
  digitalWrite(led7, HIGH);
  digitalWrite(led8, HIGH);
 
}
void cinco(){
  digitalWrite(led1, HIGH);
  digitalWrite(led2, HIGH);
  digitalWrite(led3, HIGH);
  digitalWrite(led4, LOW);
  digitalWrite(led5, LOW); 
  digitalWrite(led6, HIGH); 
  digitalWrite(led7, HIGH); 
  digitalWrite(led8, HIGH); 
 
}
void seis(){
  digitalWrite(led1, HIGH);  
  digitalWrite(led2, HIGH);
  digitalWrite(led3, HIGH);  
  digitalWrite(led4, LOW);  
  digitalWrite(led5, HIGH); 
  digitalWrite(led6, HIGH);
  digitalWrite(led7, HIGH); 
  digitalWrite(led8, HIGH); 
 
}
void siete(){
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW); 
  digitalWrite(led3, HIGH); 
  digitalWrite(led4, HIGH);  
  digitalWrite(led5, LOW);
  digitalWrite(led6, LOW);   
  digitalWrite(led7, HIGH); 
  digitalWrite(led8, HIGH);  
}
void ocho(){
  digitalWrite(led1, LOW);  
  digitalWrite(led2, LOW);   
  digitalWrite(led3, LOW);  
  digitalWrite(led4, LOW);  
  digitalWrite(led5, LOW); 
  digitalWrite(led6, LOW);   
  digitalWrite(led7, LOW);
  digitalWrite(led8, HIGH); 
 
}
void nueve(){
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW); 
  digitalWrite(led3, LOW);  
  digitalWrite(led4, LOW); 
  digitalWrite(led5, HIGH);
  digitalWrite(led6, LOW);
  digitalWrite(led7, LOW);
  digitalWrite(led8, HIGH);
 
}
void cero(){
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);  
  digitalWrite(led3, LOW); 
  digitalWrite(led4, LOW);
  digitalWrite(led5, LOW);
  digitalWrite(led6, LOW); 
  digitalWrite(led7, HIGH);
  digitalWrite(led8, HIGH); 
 
}
void loop() {
  uno();
  delay(400);
  dos();
  delay(400);
    tres();
  delay(400);
    cuatro();
  delay(400);
    cinco();
  delay(400);
    seis();
  delay(400);
    siete();
  delay(400);
    ocho();
  delay(400);
    nueve();
  delay(400);
    cero();
  delay(400);
}

Como se puede ver, cada número ha sido convertido en una función, según  los leds que deben quedar encendidos y posteriormente se ha llamado a cada número por su función.

El video que pongo no es el real, ya que se me ha estropeado el Display de 7 segmentos y un caracter, espero próximamente poneros este(de cuatro digitos) en funcionamiento con cuatro números, pero la idea era que se viese la idea.

jueves, 6 de marzo de 2014

Primer ejercicio, led parpadeante

Conexión
Habrá que tener en cuenta que el pin que va cargado es el 13, por lo



Programa:

Primero debemos siempre seleccionar el tipo de tarjeta que tengamos para arrancarlo por primera vez



 Posteriormente hemos elegido comenzar con el programa que viene por defecto, y, dentro de él, analizar el programa.




El código queda:
/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  This example code is in the public domain.
 */

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:
void setup() {               
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);    
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}
 Como podemos ver lo que realizará es un encendido y apagado constante de un segundo en el pin13.


El funcionamiento es sencillo, al principio se seleciona la salida(int led = 13;), a tener en cuenta que de elegir otra habrá que añadir una resistencia(en esta salida viene incorporada de serie)

Lo segundo
 void setup() {               
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);    
}
 Esta secuencia le comunica a la constante que es una salida

Y la parte de accionamiento

void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}
 Como se ve, pone el led a encendido(digitalWrite(led,HIHG)), espera un segundo(delay(1000)), apaga el led y espera otro segundo.


 Os subiré mañana un video
EDITO:
Aquí esta lo prometido



Un saludo