Saludos, lectores.
Éste será el primero de una serie de artículos eminentemente prácticos en que haremos cacharreos varios al mismo tiempo que vamos aprendiendo cositas del lenguaje Arduino. Veamos qué tenemos para hoy...
En este primer artículo me voy a limitar a explicar la estructura básica de un programa (también llamado sketch) Arduino y algunas funciones fundamentales. Los que hayan manejado C verán que la sintaxis es prácticamente idéntica.
Todo sketch Arduino consta de dos bloques, uno para configurar el funcionamiento de la placa y otro que será el funcionamiento en sí del programa, lo que queremos que haga.El primero servirá por ejemplo para establecer qué pines queremos establecer como entrada y qué pines como salida, mientras que el segundo es el que va a definir cuál va a ser la tarea a ejecutar. No os asustéis, es más difícil explicarlo que entenderlo.
Algunos podéis estar pensando: "¿Qué habla el pirado este de pines de entrada o pines de salida?". Veamos...
¿Os habéis fijado que la imagen tiene rodeados en rojo una serie de "agujeros"? Pues eso son los pines, ahí se podrán conectar cables a los diferentes elementos con los que interactuará nuestro Arduino (y según la placa que utilicéis tendréis más o menos). En cuanto a lo de entrada o salida es para indicar si por ese pin va a circular información, normalmente una señal eléctrica, hacia el Arduino para que haga algo con ella (por ejemplo la señal que generaría un detector de humo) o va a circular hacia el exterior. Siguiendo con el ejemplo del detector de humo, el pin por el que circularía la señal desde él hacia el Arduino sería de entrada, una vez que haya procesado esa señal podría activar una alarma enviando una señal por un pin configurado, como supongo habréis deducido, como salida.
Después de este alto, continúo con lo que estaba diciendo. En este primer artículo no vamos a inventar nada nuevo, simplemente vamos a ver un código ya hecho para entender su estructura. Abrid el entorno de desarrollo, y en la barra de menús id a Archivo/File -> Ejemplos/Examples -> 1. Basics -> Blink. Cuando hagáis click se os abrirá un nuevo entorno con este código:
/* Blink Turns on an LED on for one second, then off for one second, repeatedly. This example code is in the public domain. */ void setup() { // initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards: pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); // set the LED on delay(1000); // wait for a second digitalWrite(13, LOW); // set the LED off delay(1000); // wait for a second }
Es un código muy sencillo, lo único que hace es hacer parpadear un LED que la mayoría de placas suelen llevar puesto en el pin 13. Ahora sintiéndolo mucho, voy a tener que explicar un poquito de teoría, es necesario para poder continuar con esto...
Fijaos en las líneas 8-12. Es el primero de los bloques que comentaba, el de configuración. Este bloque se ejecutará una única vez al principio de todo, pero no por eso es menos importante porque de una buena configuración aquí depende que el Arduino haga lo que deseamos.
En este código concreto, dentro de ese bloque sólo se utiliza la función pinMode, que sirve para especificar que un pin sea de entrada o de salida. Recibe dos argumentos, el primero es el número de pin, el segundo será INPUT o OUTPUT en función de si lo queremos establecer como entrada o como salida, respectivamente. Mucho ojito con las llaves ({}), son muy importantes, ya que son las que indican qué código pertenece a ese bloque, por eso se mete el código hacia adentro, para hacerlo más fácil de entender con un golpe de vista.
A continuación, en las líneas 14-19 tenemos el bloque de funcionamiento, que se ejecutará continuamente una y otra y otra y otra vez. Cuando se ejecute su última instrucción, simplemente volverá a la primera y se repetirá ad infinitum. Aquí es donde se le dice al Arduino qué es lo que tiene que hacer.
En este caso concreto, utiliza la función digitalWrite, que recibe dos parámetros: el primero es un número de pin, el segundo es el estado en que se desea poner ese pin, alto o bajo, HIGH o LOW. También se utiliza la función delay, que hace que el Arduino "se duerma" durante un cierto número de milisegundos, tantos como se le diga.
IMPORTANTE: Aunque al principio se usa la función delay, es mala práctica porque bloquea por completo el sistema y no puede hacer nada durante ese intervalo de tiempo. Imaginad el detector de humos: hay humo pero como está bloqueado no es capaz de activar la alarma. De momento usaremos esta función pero más adelante os explicaré una forma de poder hacer temporizaciones sin bloquear el sistema.
Una vez comprendido como funciona el loop, podemos ver cuál va a ser su funcionamiento:
- Pone el pin 13 en nivel alto, con lo que se enciende el LED (línea 15).
- Espera 1000 milisegundos, o lo que es lo mismo, 1 segundo (línea 16).
- Pone el pin 13 en nivel bajo, con lo que se apaga el LED (línea 17).
- Espera otros 1000 milisegundos (línea 18).
- Vuelve a empezar (ya que no hay más código, vuelve a la línea 15).
Vale, ya tenemos algunas nociones de cómo va el código, ahora toca meterlo en la placa. La enchufamos por USB al ordenador si es que no lo hemos hecho ya. Fijaos en la fila de botones que hay debajo de la barra de menús (no pongo foto porque el entorno que yo uso es diferente al utilizar Linux), si vais pasando el ratón sobre ellos veis que os pone a la derecha qué hace el botón. Buscad el que pone "Upload", y pulsarlo. Con esto, y si no hay errores de sintaxis (como que falte un ; por ejemplo) se compilará el código (traducir a unos y ceros que es lo que Arduino entiende) y se grabará en su microcontrolador. Y listo, ya tenéis vuestro Arduino con un LED parpadeando. Aquí un vídeo del Arduino funcionando.
Recapitulando:
- Todo programa Arduino tiene un bloque de configuración y otro de funcionamiento.
- La función pinMode configura un pin como entrada o como salida.
- La función digitalWrite sirve para poner un pin a nivel alto o nivel bajo.
- La función delay sirve para dormir al sistema durante un cierto número de milisegundos.
Sed buenos!
leído!! ;) la página esta muy bien y se entiende todo!!
ResponderEliminarMuchas gracias, espero que la cosa siga siendo así xD
Eliminar