La programación en Arduino
Estructura de un programa
Como se ha visto en el capítulo anterior, el lenguaje utilizado con Arduino es muy próximo al lenguaje C o C++. Es el caso fundamentalmente de la sintaxis y los tipos de variables. Sin embargo, este lenguaje presenta algunas diferencias, fundamentalmente en la estructura de un programa.
Un programa Arduino se descompone en dos partes principales: una primera parte llamada setup, y una segunda llamada loop. Estas dos partes son representativas de la manera de funcionar de un microcontrolador y se invocan en este orden. De hecho, un microcontrolador está destinado a ejecutar las instrucciones contenidas en su memoria de manera cíclica e infinita. Antes de ejecutarse, el microcontrolador necesita una fase de « configuración » de su entorno, principalmente para parametrizar los conectores de entrada/salida o simplemente para fijar las variables globales. Esta fase corresponde a la función setup.
La función setup se presenta de la siguiente manera:
void setup(){
[Instrucciones];
}
Las instrucciones contenidas en esta función solo se ejecutan una vez y ocurre cuando la tarjeta se enchufa a la corriente.
Se aconseja reinicializar la tarjeta cuando se enchufa a la corriente. La función setup también se ejecuta después de un reset.
Una vez hecha la configuración, el microcontrolador inicia la ejecución...
Variables y constantes específicas
Las variables y constantes utilizas por el lenguaje Arduino también comparten esta similitud con el lenguaje C y C++. Por tanto, todas las variables presentadas en el capítulo anterior son aplicables a la programación en Arduino. Esto también vale para las constantes. Sin embargo, el lenguaje Arduino presenta algunas constantes que le son propias. Estas últimas no están en los demás lenguajes y solo son aplicables a la programación en Arduino.
Estas constantes específicas se utilizan principalmente, para controlar los conectores de entrada/salida de la tarjeta Arduino. De manera más concreta, se trata de constantes que permiten configurar sus modos de funcionamiento.
HIGH y LOW
Estas dos constantes se usan con los conectores digitales. Como hemos visto anteriormente (consulte el capítulo El módulo Arduino, sección Entradas/salidas), los conectores digitales manipulan los datos digitales en forma de señales lógicas. Los dos valores representables se definen por estas constantes. En la práctica, corresponden a los valores de tensión que se utilizarán por los conectores de Arduino. Estas constantes tienen propiedades particulares que dependen del modo de funcionamiento que le hemos asignado a los conectores digitales.
Cuando estos conectores están en modo lectura, la constante HIGH corresponde a un valor...
Funciones propias de Arduino
También existe un número de funciones específicas al uso en Arduino. Estas funciones son directamente accesibles en el entorno de desarrollo Arduino, sin tener que utilizar nuevas librerías.
1. Entradas/salidas
Las funciones de entrada/salida permiten utilizar los conectores presentes en las tarjetas Arduino. Podemos distinguir dos tipos de funciones, dado que existen dos tipos de conectores. De hecho, los conectores analógicos y digitales no se controlan de la misma manera y existen funciones específicas para estos dos casos.
Conectores digitales
Las siguientes funciones permiten manipular los conectores digitales de las tarjetas Arduino.
-
pinMode()
Los conectores digitales pueden funcionar en modo lectura o escritura. Esta función permite indicar este modo de funcionamiento. Idealmente se debe llamar durante la función setup() del programa principal.
pinMode(número de conector, modo de funcionamiento);
El conector que se quiere configurar se debe indicar en los argumentos de la función como un número. Este último se representa por el número que está grabado en la tarjeta. En las tarjetas Arduino Uno, este número va de 0 a 13. Es importante observar que los conectores analógicos también pueden servir de entrada/salida digital. Los números a utilizar en este caso, para una tarjeta Arduino Uno por ejemplo, van de A0 a A5. Para terminar, el modo de funcionamiento se declara utilizando las dos constantes INPUT y OUTPUT, definidas en la parte anterior. Por defecto, todos los conectores están configurados en modo INPUT. No es técnicamente necesario hacerlo si queremos utilizar un conector en modo lectura, pero es muy aconsejable realizar sistemáticamente este trabajo de configuración para facilitar la legibilidad del programa.
-
digitalWrite()
Ahora, la escritura en los conectores digitales es la siguiente etapa. Para esto, la función digitalWrite() entra en juego. Un conector configurado en modo escritura debe enviar un valor y esta función indica qué valor utilizar.
digitalWrite(número del conector, valor a enviar);
El número del conector, como en la función anterior, se debe indicar en los argumentos como un número. Después, el valor a enviar corresponde a las dos constantes HIGH y LOW introducidas en la parte anterior.
-
digitalRead()...
Librerías y objetos
1. Definiciones
Una librería es un conjunto de funciones registradas en un archivo y listas para ser utilizadas por un programa informático. Se tienen que incluir antes de su uso en el archivo del programa actual utilizando la directiva adecuada (consulte el capítulo Conceptos básicos de programación, sección Inclusiones y definiciones). El uso de las librerías es habitual en informática, porque muchas funciones ya existen. Es más práctico recurrir a ellas que volver a escribirlas dentro de su programa. Esto adquiere mayor importancia en la programación en Arduino. De hecho, existen numerosos circuitos y captadores compatibles con Arduino, y los propios fabricantes desarrollan, habitualmente, extensiones. Las librerías que permiten su uso en el entorno Arduino generalmente se ofrecen con estos productos.
Como Arduino es un entorno abierto, también es posible aportar sus propias librerías, principalmente cuando queremos nuestras propias extensiones de hardware. Estas librerías también son muy útiles cuando se trata de « factorizar » su código. No es raro tener que llamar a las mismas funciones en varios sketchs Arduino. Por tanto, puede ser oportuno agruparlas en un mismo archivo para facilitar su reutilización.
2. Creación de una librería
Es posible crear librerías en Arduino utilizando el lenguaje C o C++. Estos dos lenguajes no se basan en el mismo estilo de programación. El primero es un lenguaje declarativo, mientras que el segundo es un lenguaje orientado a objetos. Para hacerlo sencillo, estos dos estilos de programación se basan en dos métodos diferentes. El lenguaje declarativo es un lenguaje en el que las operaciones se describen en una sucesión de instrucciones, mientras que el lenguaje orientado a objeto se basa en la creación y manipulación « de objetos de software » que representan los conceptos y contienen toda la información y funciones que permiten manipularlos.
Cada uno de estos dos métodos presenta ventajas e inconvenientes. El objetivo de esta parte es presentar los dos métodos. El lenguaje C++ deriva del lenguaje C, las librerías en estos dos lenguajes presentan similitudes a nivel de su construcción. Todas se dividen en dos archivos, un archivo...