Semáforo
Semáforo
Semáforo
En este nuevo post daremos unas pautas sobre cmo debe estructurarse un
programa en Arduino, tambin veremos cmo son las sentencias bsicas usadas
con esta IDE, cmo cargar nuestro programa a la placa y para finalizar,
realizaremos un ejemplo con el que encenderemos leds con Arduino montando
nuestro propio semforo.
Para poder realizar un cdigo Arduino debemos tener las herramientas con las que
decirle a nuestro microcontrolador que es lo que debe hacer en cada momento.
Estas herramientas son las sentencias y funciones.
Arduino usa una serie de sentencias y comandos bsicos muy sencillitos pero a la
vez muy potentes. Combinndolos crearemos programas para decirle a nuestra
placa que haga prcticamente cualquier cosa que queramos.
Las sentencias se dividen por su manera de funcionar dentro del programa,
pudiendo dividirlas en 3 grades grupos:
crearnos nuestras propias funciones para que sean llamadas en las zonas
de setup o loop cuando lo necesitemos. Son muy tiles cuando
necesitamos realizar un grupo de acciones varias veces en distintas zonas
del cdigo. Tambin es una buena forma de ahorrar lneas y de
organizarse. Ejemplo de funciones tenemos pinMode, digitalWrite, delay,
max, sin, cos, analogWrite
Como explicar qu accin concreta realiza cada sentencia o funcin sera muy
extenso, os dejamos este enlacepara que podis consultarlos. Nosotros iremos
comentando todos los que vayamos usando en nuestros ejemplos.
Otra cosa importante son las libreras. Son una serie de sentencias y funciones
especficas de cada elemento o shield que conectemos a Arduino, que no estn
dentro de las propias de la IDE, y que realizarn acciones especficas de cada uno
facilitndonos mucho la programacin.
Por ltimo nombraremos un par de pequeos detalles necesarios para poder
programar nuestro cdigo. Para que cada sentencia o funcin se ejecute debe
llevar al final de cada orden el signo de puntuacin punto y coma ; y al utilizar la
doble barra // le decimos al cdigo que lo que se escriba a la derecha es un
comentario y que no debe ejecutarlo (Arduino lo colorear en gris). Esto veris que
es muy til
para
explicar que
Compilacin y carga.
Una vez que hayamos escrito nuestro cdigo en la IDE Arduino procederemos a
verificar que est correctamente escrito. Para ello pulsamos el botn
arriba a
la izquierda. Arduino leer el texto y nos dir si es correcto o no. Para ello lo que
har ser compilarlo, que significa traducir el cdigo del lenguaje de programacin
a un lenguaje que entienda el microcontrolador directamente.
En el caso de contener un error nos aparecer en la consola una explicacin
orientativa del error. (Ilustracin 5)
Ejemplo: Semforo
Como primer proyecto, realizaremos un semforo con unos Leds. Es ideal para
iniciarnos en la programacin y el montaje de circuitos porque, como veris, es
muy
fcil.
1 x Arduino UNO R3
1 x Protoboard
3 x resistencias de 220.
Una vez que tenemos todo, hacemos nuestro montaje siguiendo el siguiente
esquema.
/*************/
/* SEMAFORO */
/*************/
/*** Fernando Martinez Mendoza ***/
//** Definiciones **//
int rojo=2;
//definimos el valor del pin para el led rojo
int amarillo=4; //definimos el valor del pin para el led amarillo
int verde=7;
//definimos el valor del pin para el led verde
//** Programa **//
void setup() {
pinMode(verde,OUTPUT); //declaramos el pin verde como salida
pinMode(amarillo,OUTPUT);//declaramos el pin amarillo como salida
pinMode(rojo,OUTPUT); //declaramos el pin rojo como salida
}
void loop() {
digitalWrite(verde,HIGH); //encendemos el led rojo
delay(2000);
//esperamos 2 segundos
digitalWrite(verde,LOW); //apagamos el led rojo
delay(500);
//esperamos medio segundo
digitalWrite(amarillo,HIGH); //encendemos el led amarillo
delay(2000);
//esperamos 2 segundos
digitalWrite(amarillo,LOW); //apagamos el led amarillo
delay(500);
//esperamos medio segundo
digitalWrite(rojo,HIGH); //encendemos el led verde
delay(2000);
//esperamos 2 segundos
digitalWrite(rojo,LOW); //apagamos el led verde
delay(500);
//esperamos medio segundo
}
Con la sentencia int estamos declarando una variable numrica entera, para
poderla
usar
despus
en
nuestro
cdigo.
en
milisegundos,
dentro
de
los
parntesis.
Una vez tenemos montados y conectados los componentes, tan slo nos
faltarconectar los LEDs y el botn a nuestro Arduino UNO. Estas
conexiones las haremos de la siguiente manera:
Los LEDs los conectaremos desde la salida de la resistencia hacia el
controlador. (ver imagen)
-
LED
LED
LED
LED
LED
LED
Por ltimo nos faltar conectar el botn a nuestro controlador. La pata superior
izquierda la conectaremos al PIN 8 del Arduino UNO. Cable negro de la imagen.
}
// El pin del boton lo ponemos como entrada
pinMode(button, INPUT);
}
// Funcion para el primer semaforo y sus cambios de estado
void semaphoreOne() {
digitalWrite(2, HIGH);
int count = 0;
while (count < 30) {
// El ciclo esta en espera mientras el boton no es presionado
if (digitalRead(button) == true) {
break;
}
count++;
delay(200);
}
// Programamos el cambio entre semaforos. Cuando el LED tiene la posicion LOW
estara apagado, mientras que si esta en posicion HIGH estada encendido.
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
delay(2500);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(7, LOW);
// Mandamos a llamar al otro semaforo
semaphoreTwo();
}
// Funcion para el segundo semaforo y sus cambios de estado
void semaphoreTwo() {
digitalWrite(5, HIGH);
int count = 0;
while (count < 30) {
if (digitalRead(button) == true) {
break;
}
count++;
delay(200);
}
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
delay(500);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
delay(2500);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(4, LOW);
// Mandamos a llamar al otro semaforo
semaphoreOne();
}
// Iniciamos nuestro semaforo
void loop() {
// Cambiamos el estado de todos los leds para
// que esten apagados todos al inicio
for (int pin = 2; pin <= 7; pin++) {
digitalWrite(pin, LOW);
}
// Prendemos el verde de un semaforo y el
// rojo del otro semaforo
digitalWrite(2, HIGH);
digitalWrite(7, HIGH);
// Iniciamos el primer semaforo
semaphoreOne();
}