INTRODUCCION A ARDUINOQUE ES UN ARDUINO ¿QUÉ QUIERE DECIR QUE ARDUINO SEA “SOFTWARE Y HARDWARE LIBRE”? PLATAFORMAS DE ARDUINO HARDWARE DE ARDUINO UNO CARACTERÍSTICAS DE LA MICRO PLACA MODELO DEL MICROCONTROLADOR FUNCIONAMIENTO DE PINES SHIELD ARDUINOS HARDWARE ANEXO (MODULOS, SENSORES Y ACTUADORES) SOFTWARE ARDUINO UNO INTALACION DE SOFTWARE (Cualquier Sistema Linux, Window , Mac OS x) FUNCIONES DEL SOFTWARE DE ARDUINO LENGUAJE ARDUINO IDE O SKETCH IDE’S ALTERNATIVOS TIPOS DE VARIABLES LIBRERIAS ESTRUCTURA GENERAL DE UN SKETCH EJEMPLOS NIVEL BASICOS EJEMPLOS NIVEL USUARIO EJEMPLO NIVEL AVANZADO CONTENIDOS HARDWARE LIBRE CONTENIDOS 2 .ROBOTICA UBB .circuits.HARDWARE LIBRE: ARDUINO Contenidos en Lenguaje Arduino Estructura General Declaracion de variables Estructura de codigo Tipos de variables Lenguaje Comunicacion Serie a la placa Comunicacion Enviar datos desde la placa Gestion de tiempo Recibir datos desde el exterior Selectivos Bloques Repetitivos https://123d.io/circuits/957588-the-unnamed-circuit#breadboard ESCRITURA GENERAL DE UN SKETCH Declaración de variables. antes (y fuera) de las secciones “void setup()” y “void loop()”. la cual es una simple lista de equivalencias que asocia cada carácter con un número determinado. ejecuta una instrucción Void loop: Se realiza la ejecución continua y repetida infinitas veces hasta que se apague la placa Estructura y sintaxis del Código - Empezar con mayúsculas cada instruccion No es necesario tabular Acabar con .ROBOTICA UBB .. 3 . y así hacer que el skech reaccione según detecte en ellas uno u otro. Para saber a qué número interno corresponde un determinado carácter. Para inicializar una VAR: tipoVar nombreVar=555. es decir. la placa Arduino utiliza la llamada tabla ASCII. Para declarar: tipovariable nombrevariable.. Los dispositivos electrónicos son incapaces de trabajar con “letras” directamente: las han de “traducir” siempre primero a números para entonces poderlas almacenar y procesar. un signo de puntuación. Se utilizan para almacenar un estado de entre esos dos posibles. y viceversa. dentro de “void setup()” o de “void loop()” o de otras que puedan existir). Una variable booleana con un valor cualquiera diferente de 0 ya se interpreta que tiene un valor cierto. Declaración local se ha de declarar en el interior de alguna de las secciones de nuestro sketch (es decir.HARDWARE LIBRE: ARDUINO Declaración global se ha de declarar al principio de nuestro sketch.). Comentarios /* o // Llamar o leer variables con () Designar ecuaciones con signo = TIPOS DE VARIABLES Variables generales El tipo “boolean”: las variables de este tipo solo pueden tener dos valores: cierto o falso. Void Setup: Pre configuraciones. un dígito. El tipo “char”: el valor que puede tener una variable de este tipo es siempre un solo carácter (una letra. los valores de una variable “byte” no pueden ser negativos. por tanto. El tipo “int”: el valor que puede tener una variable de este tipo es un número entero entre -32768 (-215) y 32767 (215-1).4028235·1038. los números decimales son usados frecuentemente para aproximar valores analógicos continuos. gracias a que utilizan 2 bytes (16 bits) de memoria para almacenarse. Este número se reseteará a cero aproximadamente después de 50 días (cuando su valor supere el máximo permitido por su tipo. Actualmente el máximo valor que se puede utilizar con precisión es de 16383.HARDWARE LIBRE: ARDUINO El tipo “byte”: el valor que puede tener una variable de este tipo es siempre un número ENTERO entre 0 y 255. Recordar que 1000 μs es un milisegundo y por tanto. los valores “float” no son exactos. o #mivariable. No tiene parámetros. No tiene valor de retorno. Es decir. se recomienda usar la instrucción delay(). DelayMicroseconds(): pausa el sketch durante la cantidad de microsegundos especificados como parámetro –de tipo “unsigned long”– .4028235·1038 hasta el número 3. Esto es así para todas las placas Arduino excepto para la Due. No tiene parámetros.ROBOTICA UBB . tienen el mismo número de combinaciones numéricas posibles diferentes (256). 6. Const int mivariable. El mínimo valor que se puede utilizar con precisión es de 3 μs. Al igual que las variables de tipo “char”. El tipo “word”: Se puede tener una variable “word” en todas las placas excepto la Arduino Due es un número entero entre 0 y 65535 (216-1). Debido a su grandísimo rango de valores posibles. que es “unsigned long”). Los valores “float” posibles pueden ir desde el número -3. En el caso de un array el índice es simplemente un número (que corresponde al número de orden de la variable concreta dentro del array). como por ejemplo que. solo tienen 6 o 7 dígitos en total de precisión. No obstante. y pueden producir resultados inesperados. Esta instrucción tiene una resolución de 4 μs (es decir. 4 . pero a diferencia de aquellas.0/3. que el valor retornado es siempre un múltiplo de cuatro). 1000000 μs es un segundo.0 no dé exactamente 2. Micros(): devuelve el número de microsegundos (μs) desde que la placa Arduino empezó a ejecutar el sketch actual. Variables de tiempo Millis(): devuelve el número de milisegundos (ms) desde que la placa Arduino empezó a ejecutar el sketch actual. las de tipo “byte” utilizan un byte (8 bits) para almacenar su valor y. Este número –de tipo “unsignedlong”– se reseteará a cero aproximadamente después de 70 minutos. Delay(): pausa el sketch durante la cantidad de milisegundos especificados como parámetro.0. El tipo “float”: el valor que puede tener una variable de este tipo es un NÚMERO DECIMAL. Constantes: Es posible declarar una variable de tal forma que consigamos que su valor (Del tipo que sea) permanezca siempre inalterado. Para esperas mayores que esta. El tipo “array”: Un ‘array’ es una colección indexada (como un diccionario) de variables del mismo tipo. Si la condición es cierta. si así lo necesitamos). Switch case: Es la opción ideal cuando tenemos que elegir entre un número más o menos elevado de opciones. De no ponerlo.ROBOTICA UBB .La instrucción “default” es también opcional.0). Si no se cumple. es conveniente incluir la instrucción “break” al final de cada bloque si queremos impedir que el sketch se siga ejecutando dentro del “switch” (esto hará nuestro sketch más eficiente).HARDWARE LIBRE: ARDUINO Variables Selectivas If: Un bloque “if” sirve para comprobar si una condición determinada es cierta (”true”. 2 a la de moda. Se utiliza cuando queremos que se realicen una serie de acciones concretas en caso de que ninguno de los casos anteriores haya sido activado. si solo escribimos el bloque “if”. la sintaxis del bloque “if/else”. puede no pasar nada. En general. etc…). Por tanto. 5 . si existe tras el bloque “if” un bloque “else” (opcional). tras haber ejecutado ese bloque se seguirían analizando los demás casos hasta el final. El “break” al final de cada bloque de instrucciones dentro de cada “case” es opcional. se ejecutarán las instrucciones escritas en su interior (es decir. 3 a la de electrodomésticos. Es decir. el sketch tendrá respuesta solamente para cuando sí se cumple la condición.1) o falsa (”false”. pero si además escribimos un bloque “else”. el sketch tendrá respuesta para cuando sí se cumple la condición y para cuando no se cumple también. o bien. se ejecutarán las instrucciones escritas en el interior de ese bloque “else”. dentro de las llaves de apertura y cierre). De algún modo es como el panel de botones en un ascensor dentro de unos grandes almacenes (si pulsas 1 vas a la planta deportes. se pueden poner más bloques “if” dentro de otro bloque “if” o “else”. Es posible anidar bloques “if” uno dentro de otro sin ningún límite (es decir. donde si la condición ya de entrada era falsa las instrucciones no se ejecutaban nunca) El bloque “for” La diferencia entre un bucle “while” (o “do”) y un bucle “for” está en que en el primero el número de iteraciones realizadas depende del estado de la condición definida. repite la ejecución de las instrucciones que están dentro de sus llaves de apertura y cierre. en inglés) es un bloque que implementa un bucle. Las sentencias interiores a un bucle “while” pueden ser tantas como se quieran y de cualquier tipo. las instrucciones ya han sido leídas (a diferencia del bucle “while”.ROBOTICA UBB . por supuesto. usaremos el bucle “for” para ejecutar un conjunto de instrucciones (escritas dentro de llaves de apertura y cierre) un número concreto de veces. El bloque “do while”: El bucle “do” funciona exactamente igual que el bucle “while”. porque antes de llegar a comprobar esta. no se ejecutarán las sentencias interiores ninguna vez.HARDWARE LIBRE: ARDUINO Variables repetitivas El bloque “while”: El bloque “while” (“mientras”. nuevos bucles “while”. con la excepción de que la condición es evaluada después de ejecutar las instrucciones escritas dentro de las llaves. Esto hace que las instrucciones siempre sean ejecutadas como mínimo una vez aun cuando la condición sea falsa. ¿Cuántas veces? No hay un número fijo: se repetirán mientras la condición especificada entre sus paréntesis sea cierta (“true”. incluyendo. Si se llega por primera vez a una sentencia “while” y la condición resulta falsa directamente. es decir. Este detalle es importante tenerlo en cuenta. Por tanto. 6 .1). Tiene un inicio y final. pero en un bucle “for” el número de iteraciones se puede fijar a un valor exacto. es explica la sintaxis y funcionamiento de las instrucciones incluidas en el objeto Serial: Serial. Esta conexión se pude hacer de dos formas: usando el cable USB. se ha de volver a ejecutar Serial. No tiene parámetros. de esta manera. número entero.write(): envía un dato desde el microcontrolador al exterior . Para la comunicación con un computador. etc. lo elimina de ese buffer. Serial es un “objeto”. No tiene parámetros. y se encarga de cerrar el canal serie.print() es asíncrona. pero se efectúa un salto de línea al finalizar su ejecución.HARDWARE LIBRE: ARDUINO COMUNICACION Comunicación Serie a la placa La placa Arduino se puede conectar a otros dispositivos mediante una conexión serie para poder transferir datos entre sí.begin(). Dentro de nuestros sketches podemos hacer uso de este receptor/transmisor para enviar datos al microcontrolador (o recibirlos de él) gracias al elemento del lenguaje Arduino llamado “Serial”. mientras que los pines TX/RX los guardaremos para usarlos como entrada/salida o para comunicarse con otro dispositivo según se requiera. se suele utilizar el valor de 9600. número decimal (por defecto de dos decimales).ROBOTICA UBB . Si se desea que la transmisión se complete antes de continuarse ejecutando el sketch.end(): No tiene ningún argumento ni devuelve nada. Estos bytes ya han llegado al microcontrolador y permanecen almacenados temporalmente en una pequeña memoria de 64 llamada “buffer” bytes hasta ser procesados por la instrucción Serial. un contenedor de instrucciones con alguna relación entre ellas. Para la conexión al PC usaremos simplemente el cable USB. se puede añadir justo después de Serial.read(). A continuación.read() devolverá -1. 7 . Si el dato se especifica explícitamente (en vez de a través de una variable). Las siguientes instrucciones serial corresponden a conjuntos de instrucciones que permiten enviar datos desde el microcontrolador hacia el exterior. Serial. Serial. Al hacerlo. su ejecución es imprescindible antes de realizar la cualquier transmisión. esta instrucción devolverá 0. Eso significa que el sketch pasará a la siguiente instrucción y seguirá ejecutándose sin esperar a que empiece a realizarse el envío de los datos.read().print() la instrucción Serial. o en otras palabras. Por ello.read(): Devuelve el primer byte aún no leído de los que estén almacenados en el buffer de entrada.print(). Serial. y se suele escribir dentro de la sección “void setup()”. Comunicación para recibir datos desde el exterior Serial.available(): Devuelve el número de bytes –caracteres– disponibles para ser leídos que provienen del exterior a través del canal serie (vía USB o vía pines TX/RX). Para reabrir el canal serie otra vez. La transmisión realizada por Serial.begin(): Abre el canal serie para que pueda empezar la comunicación por él.print(): Envía a través del canal serie un dato desde el microcontrolador hacia el exterior. cadena. Serial. Su único parámetro especifica la velocidad en bits/s a la que se producirá la transferencia serie de los datos. Y hacer así hasta que se hayan leído todos. este solo puede ocupar un byte esdecir la variable ha de ser “char” o “byte”. Comunicación desde la placa al exterior Serial.println(): Hace exactamente lo mismo que Serial. se debería usar de nuevo serial. o mediante los pines digitales 0 (RX) y 1 (TX). Cuando no haya más bytes disponibles. que no tiene ningún parámetro ni devuelve ningún valor de retorno. hay que recordar que los caracteres se han de escribir entre comillas simples y las cadenas entre comillas dobles.Si no hay bytes para leer. Para devolver (leer) el siguiente byte. Ese dato puede ser de cualquier tipo: carácter.flush(). la comunicación serie se deshabilita y los pines RX y TX vuelven a estar disponibles para la entrada/salida general. Serial. peek() se volverá a leer el mismo byte. ese byte leído no se borra del buffer. Si no hay bytes disponibles para leer. No obstante. Serial. con lo que las próximas veces que se ejecute Serial. Esta instrucción no tiene parámetros.peek() devolverá -1.HARDWARE LIBRE: ARDUINO Serial. a diferencia de Serial.ROBOTICA UBB . 8 .read().peek(): devuelve el primer byte aún no leído de los que estén almacenados en el buffer de entrada.