Está en la página 1de 7
2016-17 PRIMEROS PASOS CON ARDUINO 2 NUESTRO PRIMER PROGRAMA Blinking LED. 2.1 OBJETIVOS. + Fijar algunas ideas basicas sobre programacién. + Comprender la estructura de un programa Arduino (Sketch). + Definir las estructuras de bloques. + Las primeras instrucciones. 2.2 MATERIAL REQUERIDO. + Arduino Uno o similar. + CableUSB, un cable USB adecuado al conector de tu Arduino. + PC, un PC con el entorno de Arduino correctamente instalado y configurado. 2.3 ALGUNAS IDEAS BASICAS SOBRE PROGRAMACION. Un programa de ordenador es basicamente el equivalente a una receta de cocina, pero destinado a.un pablico distinto. Mientras que las personas somos razonablemente buenas interpretando las vagas instrucciones de una receta de cocina, cuando programamos, quien debe entendernos es un ordenador que espera instrucciones precisas respecto a lo que debe hacer y que por otro lado carece por completo de la imaginacién 0 capacidad de improvisacién que posen los humanos. Por ello se desarrollan los lenguajes de programacién de ordenador, para dar instrucciones a una maquina de forma: + Precisa: Sin ambigiiedades inherentes a la comunicacién humana + Univoca: Solo se puede interpretar de una manera. + Concisa: Preteriblemente ordenes cortas. El Arduino se programa en una variante del lenguaje de programacién C++, que es un lenguaje muy extendido por sus caracteristicas, aunque no es un lenguaje sencillo. C++, fija reglas estrictas de cémo escribir estas instrucciones. Un programa es una serie de instrucciones que se ejecutan en secuencia, salvo que indiquemos ‘expresamente condiciones precisas en las que esta secuencia se ve alterada. Un programa interno _comprueba que la sintaxis de nuestro programa es acorde a la norma de C++, y si hay cualquier cosa que no le convence dara un error y finalizara la comprobacién ,obligandonos a revisar lo que hemos escrito. Cuando el comprobador acepta nuestro programa, invoca a otro programa que traduce lo que hemos escrito a instrucciones comprensibles para el procesador de nuestro Arduino. A este nuevo programa se le llama compilador. 7 de 57 2016-17 PRIMEROS PASOS CON ARDUINO as Esto es lo que nosotros entendemos. Esto es lo que entiende el procesador. El compilador convierte nuestras instrucciones (eédigo fuente) en instrucciones del procesador (cédigo ejecutable). 2.4 ESTRUCTURA DE UN PROGRAMA ARDUINO. Un programa disefiado para ejecutarse sobre un Arduino (un “sketch’) siempre se compone de tres seccione: La seccién de declaraciones de variables globales: ubicada directamente al principio del sketch, La secci6n llamada “void setup()”: delimitada por llaves de apertura y cierre La seccién llamada “void loop()”: delimitada por llaves de apertura y cierre. La primera secci6n del sketch (que no tiene ningun tipo de simbolo delimitador de inicio o de final) est reservada para escribir, tal como su nombre indica, las diferentes declaraciones de variables que necesitemos. En un apartado posterior explicaremos ampliamente qué significa todo esto. En el interior de las otras dos secciones (es decir, dentro de sus llaves) deberemos esoribir las instrucciones que deseemos ejecutar en nuestra placa, teniendo en cuenta lo siguiente: Las instrucciones escritas dentro de la seccién “void setup)” se ejecutan una dnica vez, ‘en el momento de encender (0 resetear) la placa Arduino. Las instrucciones escritas dentro de la seccién “void loop()” se ejecutan justo después de las de la seccién “void setup()" infinitas veces hasta que la placa se apague (0 se resetee). Es decir, el contenido de “void loop()" se ejecuta desde la primera instruccién hasta la tltima, para seguidamente volver a ejecutarse desde la primera instruccién hasta la ultima, para seguidamente ejecutarse desde la primera instruccién hasta la Ultima, y asi una y otra vez. Por tanto, las instrucciones escritas en la seccién “void setup()” normalmente sirven para realizar ciertas preconfiguraciones iniciales mientras que las instrucciones del interior de “Void loop()" son, de hecho, el programa en si que esta funcionando continuamente. 8 de 57 2016-17 PRIMEROS PASOS CON ARDUINO Cuando abrimos el IDE de Arduino o hacemos MenujVArchivo\nuevo el programa nos escribe ya estas dos funciones setup() y loo() Nétese que el principio de cada funcién se indica mediante la apertura de llave “ { “y el fin de la misma corresponde al simbolo de cerrar Ilave " De hecho el conjunto de instrucciones contenidas entre una apertura y cierre de llaves se llama bloque y es de capital importancia a la hora de que nuestro Arduino interprete de una u otra manera las instrucciones que le damos. Es obligatorio que a cada apertura de una lave corresponda un cierre de llave. En sucesivos capitulos ampliaremos este concepto. Por ahora resaltar las lineas que aparecen dentro de los bloques principales: // put your setup code here, /{ put your main code here, to run repeatedly La primera linea del sketch del ejemplo contiene un comentario (concretamente, son las dos primeras lineas: desde los simbolos /" hasta los simbolos */). Un “comentario” es un texto escrito intercalado con el cédigo del sketch que se utiliza para informar sobre cémo funciona ese cédigo a la persona que en algin momento lo esté leyendo. Es decir, los comentarios son texto de ayuda para los seres humanos que explica el cédigo asociado y ayudan a entenderlo y recordar su funcién. Los comentarios son completamente ignorados y desechados por el compilador, por lo que no forman parte nunca del cédigo binario que ejecuta el microcontrolador (asi que no ocupan espacio en su memoria). Los comentarios pueden aparecer dentro del cédigo de diferentes formas Comentarios compuestos por una linea entera (0 parte de ella): para afiadirlos deberemos dos barras ( i) al principio de cada linea que queramos convertir en comentario. ‘También podemos comentar solamente una parte de la linea, si escribimos las barras en otro punto que no sea el principio de esta; de esta manera solamente estaremos comentando lo que aparece detras de las barras hasta el final de la linea, pero lo anterior no. Comentarios compuestos por un bloque de varias lineas seguidas: para afiadirlos deberemos escribir una barra seguida de un asterisco ( /" ) al principio del bloque de texto que queramos convertir en comentario, y un asterisco seguido de una barra ( */) al final de dicho bloque. Todos los caracteres y lineas ubicados entre estas dos marcas de inicio y final seran tratadas automaticamente como comentarios. Hay que tener en cuenta, por otro lado, que comentarios unilineales se pueden escribir dentro un comentario multilineal, pero uno muttilineal dentro de otro no. Este es el tipo de comentario escrito en el sketch del ejemplo. Una practica bastante habitual en programacién es comentar en algin momento una (0 mas) partes del cédigo. De esta forma, se "borran” esas partes (es decir, se ignoran, y por tanto, ni se ‘compilan ni se ejecutan) sin borrarlas realmente. Normalmente, esto se hace para localizar posibles errores en el cédigo observando el comportamiento del programa con esas determinadas lineas comentadas. A lo largo de los ejemplos de este libro se ird viendo su utilidad 2.5 PRIMERAS INSTRUCCIONES EN ARDUINO C++. Parece obligado en el mundo Arduino, que el primer programa que hagamos sea el blinking LED, y esta bien porque ilustra algunas ideas interesantes en cuanto a las posibilidades de la programacién: 9 de 57 2016-17 PRIMEROS PASOS CON ARDUINO + La capacidad de Arduino para interactuar con el mundo externo. Algo bastante inusual para quienes estén acostumbrados a la informatica tradicional, donde la potencia de calculo ha crecido de forma espectacular, pero sigue siendo imposible, influir en el mundo exterior. + La sencillez del entorno de trabajo. En contraposicién a un sistema tradicional de editor / compitador / linker. Arduino puede relacionarse de diferentes maneras con el mundo que le rodea, Empezaremos por los pines digitales que pueden usarse de dos modos, como: + Entradas: Para leer informacién digital del mundo exterior. + Salidas: Para activar una sefial al mundo exterior. Las funciones que nos ofrece el lenguaje Arduino para trabajar con entradas y salidas digitales son: pinMode(): configura un pin digital (cuyo numero se ha de especificar como primer parametro) ‘como entrada o como salida de corriente, segin si el valor de su segundo parametro es la constante predefinida INPUT 0 bien OUTPUT, respectivamente. Esta funcién es necesaria porque los pines digitales a priori pueden actuar como entrada o salida, pero en nuestro sketch hay que definir previamente si queremos que actden de una forma u de otra. Es por ello que esta funcion se suele escribir dentro de "setup()”. No tiene valor de retorno. digitalWrite(): envia un valor ALTO (HIGH) 0 BAJO (LOW) a un pin digital; es decir, tan solo es capaz de enviar dos valores posibles. Por eso, de hecho, hablamos de salida “digital”. El pin al que se le envia la sefial se especifica como primer parametro (escribiendo su numero) y el valor concreto de esta sefial se especifica como segundo parametro (escribiendo la constante predefinida HIGH o bien la constante predefinida LOW, ambas de tipo “int’) IRead(): devuelve el valor leido del pin digital (configurado como entrada mediante pinMode()) cuyo némero se haya especificado como parametro. Este valor de retorno es de tipo “int” y puede tener dos Unicos valores (por eso, de hecho hablamos de entrada digital): la constante HIGH (1) 0 LOW (0). Arduino dispone de 14 pines que pueden ser usados de este modo, numerados del 0 al 13: DIGITAL (PWM En la sesién anterior cargamos un programa de ejemplo que hacia parpadear un LED en la placa ‘on una cadencia definida. Veamos como podemos programar Arduino para que realice esto, Primero configuraremos Arduino para que configure su pin 13 como de salida digital y después ‘encenderemos y apagaremos la sefial en esa salida, lo que hara que el LED que tiene conectado en serie se encienda o apague al ritmo que marquemos. Para indicar al sistema que deseamos usar el pin 13 como salida digital utilizamos la instrucci6n: 10 de 57 2016-17 PRIMEROS PASOS CON ARDUINO pinMode ( 13, OUTPUT ) ; El primer parametro indica el pin a usar y el segundo “OUTPUT” es para usarlo como salida, y también podriamos usar como segundo parametro “INPUT”, para indicar que usamos ese pin ‘como entrada, vamos a leer de este pin Estas definiciones se harén solo una vez al principio, en la funcién setup(). La nuestra quedara, con una Gnica instruccién que declara que vamos a usar el pin 13 como salida digital: void setup () { // initialize pinMode( 13, he digital pin as an output PUT) + } Es importante que nos fijemos en que a pesar de ser una Unica instruccién, hemos delimitado el bloque de esta funcién mediante abrir y cerrar llaves. Obsérvese que la instruccién finaliza con un" ;”. C++ obliga a terminar las instrucciones con un punto y coma que delimite la orden. Si se omite generara un error al compilar. Para encender el LED usaremos la instruccién: digitalWrite( 13, HIGH) ; Y otra instruccién similar que le ordena apagarlo: digitalWrite( 13, Lom) El primer parémetro 13 indica el pin a utilizar y segundo parémetro HIGH 0 LOW indican el valor que deseamos poner en esa salida. En Arduino corresponden SV para HIGH y OV para LOW. Si en la funcién loop() esoribiéramos estas dos instrucciones seguidas, Arduino cambiaria estos valores tan deprisa que no percibiriamos cambios, asi que necesitamos frenarle un poco para que podamos percibir el cambio. Para hacer este retraso de, digamos, un segundo, utilizaremos: delay (1000 // delay(n) “congela” Arduino n milisegundos Por tanto para programar una luz que se enciende y se apaga, tendriamos que generar una secuencia de érdenes (Como en una receta de cocina) que hicieran: Informar a Arduino de que vamos a utilizar el pin13 para escribir valores( en el Setup). Encender el LED : Poner un valor alto ( 5V) en dicho pin. Esperar un segundo, Apagar el LED: Poner valor bajo (OV) en dicho pin, Volver a esperar un segundo. A. Si omitiéramos este segundo retraso, apagaria la luz y volveria a empezar encontrandose la orden de volver a encender. No apreciariamos que se habia apagado. Comprobadio. B. El procesador de Arduino UNO es muy lento desde el punto de vista electrénico, pero es capaz de conmutar la luz, pasar de encendido a apagado y vuelta a encender, unas 15.000 veces por segundo. gReRe 11 de 57 2016-17 PRIMEROS PASOS CON ARDUINO El primer concepto que tenéis que recordar, es que los ordenadores procesan las ordenes en secuencia, una instruccién después de otra y en el orden en que se las dais. Nuestro programa instruye al ordenador para que ejecute esas instrucciones y fia el orden en el que se ejecutan. La forma de escribir un programa en Arduino C++ que haga lo anteriormente descrito es algo parecido a esto: void setup () { pinMode( 13 , OUTPUT); // Usaremos el pin 13 ) void loop () { ite(13., HIGH); // Enciende el LED delay(1000); // Esperar un segundo digitalWrite(13 , Low); // Apagar el LED delay(1000); // Esperar otro segundo } Conviene aclarar ya pequefios detalles que deberemos tener en cuenta a la hora de escribir nuestros sketches para evitarnos muchos dolores de cabeza. Por ejemplo, es necesario saber que el lenguaje Arduino es “case-sensitive”. Esto quiere decir que es totalmente diferente escribir una letra en mayuscula que en minuscula. Dicho de otra forma: para el lenguaje Arduino "HolA” y “hOLa’ son dos palabras distintas. Esto tiene una implicacién muy importante: no es lo mismo escribir por ejemplo “digitalWrite(13, HIGH);” que “digitalwrite(13 , HIGH);;". En el primer caso la instruccién estaria correctamente escrita, pero en el segundo, en el momento de compilar el c6digo el IDE se quejaria porque para él “write” (con “w" minuscula) no tiene ningun sentido. Asi que hay que vigilar mucho con respetar esta distincién en los cédigos que escribamos. Otro detalle: las tabulaciones de las instrucciones contenidas dentro de las secciones ‘void setup()” y “Void loop()" del sketch del ejemplo no son en absoluto necesarias para que la compilacién del sketch se produzca con éxito. Simplemente son una manera de escribir el cédigo de forma ordenada, clara y cémoda para el programador, facilitandole la tarea de leer cédigo ya escrito y mantener una cierta estructura a la hora de escribirlo. En los proximos ejemplos se ira viendo mejor su utilidad, Otro detalle: todas las instrucciones (incluyendo también las declaraciones de variables) acaban con un punto y coma. Es indispensable afiadir siempre este signo para no tener errores de compilacién, ya que el compilador necesita localizarlo para poder detectar el final de cada instruccién escrita en el sketch. Si se olvida, se mostrard un texto de error que puede ser obvio (‘falta un punto y coma’) 0 no. Si el texto del error es muy oscuro o sin légica, es buena idea ‘comprobar que la causa no sea la falta de un punto y coma en las lineas justamente anteriores a la marcada por el compilador como causante del problema ‘Cuando os equivoquéis ( y creadme, os vais a equivocar) el sangrado ayuda mucho a visualizar el programa. Solo hay dos tipos de programadores. Los que se equivocan y los que se van a ‘equivocar. Solo nos falta ya, comprobar si hay errores y para ello pulsamos el icono en amarillo, verificamos y compilamos: sketch api0da Arduino 1.5.6-r2 = Archivo Editar Programa Heuamientas Ayuda sketch_aprOtag 12 de 57 2016-17 PRIMEROS PASOS CON ARDUINO Si todo va bien,( si no hay errores en rojo al final de la ventana) podemos compilar y volar con la flecha, En caso contrario ( y creedme que os pasara con frecuencia) habra que revisar los posibles errores y corregirlos. Volveremos sobre esto en el futuro. © sketch apa Arduino 156-2 ‘Archivo Esitar Programa Herramientas Ayuda sketeh_aprda § La flecha en amarillo volcara nuestro programa a la placa Arduino y comprobaremos que la luz del pin 13 parpadea con una cadencia de un segundo. Sugerencia: Si modificamos los valores del delay, modificaremos la cadencia del parpadeo. Nota: Esto no funcionara con ningun otro Pin del Arduino UNO, porque solo el 13 tiene un LED conectado. 2. 6 RESUMEN DE LA SESION En esta sesién hemos aprendido varias cosas importantes: + El concepto clave de un programa, como secuencia de instrucciones que se ejecuta en ol orden marcado. » Hay dos funciones basicas en todo programa Arduino: Setup() y Loop(). + Para delimitar un bloque de instrucciones usamos apertura y cierre de llaves. + Todas las instrucciones acaban en punto y coma (Aunque hay excepciones). + Podemos usar comentarios usando // . + Hemos aprendido algunas instrucciones iniciales del Arduino C++. 13 de 57

También podría gustarte