Está en la página 1de 8

CONTENIDOS HARDWARE LIBRE

CONTENIDOS
INTRODUCCION A ARDUINO
QUE 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
ROBOTICA UBB - HARDWARE LIBRE: ARDUINO

Contenidos en Lenguaje Arduino

Declaracion de
variables
Estructura General
Estructura de codigo

Tipos de variables
Comunicacion
Serie a la placa

Enviar datos desde


Lenguaje Comunicacion
la placa

Gestion de tiempo
Recibir datos
desde el exterior

Selectivos
Bloques

Repetitivos
https://123d.circuits.io/circuits/957588-the-unnamed-circuit#breadboard

ESCRITURA GENERAL DE UN SKETCH

Declaración de variables.

2
ROBOTICA UBB - HARDWARE LIBRE: ARDUINO

Declaración global se ha de declarar al principio de nuestro sketch; es


decir, antes (y fuera) de las secciones “void setup()” y “void loop()”.
Declaración local se ha de declarar en el interior de alguna de las
secciones de nuestro sketch (es decir, dentro de “void setup()” o de
“void loop()” o de otras que puedan existir).

Para declarar: tipovariable nombrevariable;


Para inicializar una VAR: tipoVar nombreVar=555;
Void Setup: Pre configuraciones, 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 ;
- 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. Se utilizan para almacenar un estado de entre
esos dos posibles, y así hacer que el skech reaccione según detecte en
ellas uno u otro. Una variable booleana con un valor cualquiera
diferente de 0 ya se interpreta que tiene un valor cierto.

El tipo “char”: el valor que puede tener una variable de este


tipo es siempre un solo carácter (una letra, un dígito, un
signo de puntuación...). 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.
Para saber a qué número interno corresponde un determinado carácter, y viceversa, la placa Arduino utiliza la
llamada tabla ASCII, la cual es una simple lista de equivalencias que asocia cada carácter con un número
determinado.

3
ROBOTICA UBB - 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.
Al igual que las variables de tipo “char”, las de tipo “byte” utilizan un byte (8 bits) para almacenar su valor y, por
tanto, tienen el mismo número de combinaciones numéricas posibles diferentes (256), pero a diferencia de
aquellas, los valores de una variable “byte” no pueden ser negativos.

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),
gracias a que utilizan 2 bytes (16 bits) de memoria para
almacenarse. Esto es así para todas las placas Arduino excepto
para la Due.

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).
El tipo “float”: el valor que puede tener una variable de este
tipo es un NÚMERO DECIMAL. Los valores “float” posibles
pueden ir desde el número -3,4028235·1038 hasta el número
3,4028235·1038. Debido a su grandísimo rango de valores
posibles, los números decimales son usados frecuentemente
para aproximar valores analógicos continuos. No obstante,
solo tienen 6 o 7 dígitos en total de precisión. Es decir, los
valores “float” no son exactos, y pueden producir resultados
inesperados, como por ejemplo que, 6.0/3.0 no dé exactamente 2.0.

El tipo “array”: Un ‘array’ es una colección


indexada (como un diccionario) de variables del
mismo tipo. 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).

Constantes: Es posible declarar una variable de


tal forma que consigamos que su valor (Del tipo
que sea) permanezca siempre inalterado. Const
int mivariable; o #mivariable;

Variables de tiempo
Millis(): devuelve el número de milisegundos (ms) desde que la placa Arduino empezó a ejecutar el sketch actual.
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, que es “unsigned long”). No tiene parámetros.
Micros(): devuelve el número de microsegundos (μs) desde que la placa Arduino empezó a ejecutar el sketch
actual. Este número –de tipo “unsignedlong”– se reseteará a cero aproximadamente después de 70 minutos.
Esta instrucción tiene una resolución de 4 μs (es decir, que el valor retornado es siempre un múltiplo de cuatro).
Recordar que 1000 μs es un milisegundo y por tanto, 1000000 μs es un segundo. No tiene parámetros.
Delay(): pausa el sketch durante la cantidad de milisegundos especificados como parámetro.
DelayMicroseconds(): pausa el sketch durante la cantidad de microsegundos especificados como parámetro –de
tipo “unsigned long”– . Actualmente el máximo valor que se puede utilizar con precisión es de 16383. Para
esperas mayores que esta, se recomienda usar la instrucción delay(). El mínimo valor que se puede utilizar con
precisión es de 3 μs. No tiene valor de retorno.

4
ROBOTICA UBB - HARDWARE LIBRE: ARDUINO

Variables Selectivas
If: Un bloque “if” sirve para comprobar si una
condición determinada es cierta (”true”,1) o falsa
(”false”,0). Si la condición es cierta, se ejecutarán
las instrucciones escritas en su interior (es decir,
dentro de las llaves de apertura y cierre). Si no se
cumple, puede no pasar nada, o bien, si existe
tras el bloque “if” un bloque “else” (opcional), se
ejecutarán las instrucciones escritas en el interior
de ese bloque “else”.
Es decir, si solo escribimos el bloque “if”, el
sketch tendrá respuesta solamente para cuando
sí se cumple la condición; 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. En general, la
sintaxis del bloque “if/else”.
Es posible anidar bloques “if” uno dentro de otro
sin ningún límite (es decir, se pueden poner más
bloques “if” dentro de otro bloque “if” o “else”, 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 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, 2 a la de moda, 3 a la de electrodomésticos, etc…).

El “break” al final de cada bloque de instrucciones


dentro de cada “case” es opcional. De no ponerlo, tras
haber ejecutado ese bloque se seguirían analizando los
demás casos hasta el final. Por tanto, 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).La instrucción “default” es también opcional.
Se utiliza cuando queremos que se realicen una serie de
acciones concretas en caso de que ninguno de los casos
anteriores haya sido activado.

5
ROBOTICA UBB - HARDWARE LIBRE: ARDUINO

Variables repetitivas
El bloque “while”: El bloque “while” (“mientras”, en inglés) es un
bloque que implementa un bucle; es decir, repite la ejecución de las
instrucciones que están dentro de sus llaves de apertura y cierre.
¿Cuántas veces? No hay un número fijo: se repetirán mientras la
condición especificada entre sus paréntesis sea cierta (“true”,1).
Si se llega por primera vez a una sentencia “while” y la condición resulta
falsa directamente, no se ejecutarán las sentencias interiores ninguna
vez. Este detalle es importante tenerlo en cuenta.
Las sentencias interiores a un bucle “while” pueden ser tantas como se
quieran y de cualquier tipo, incluyendo, por supuesto, nuevos bucles
“while”.

El bloque “do while”: El bucle


“do” funciona exactamente
igual que el bucle “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,
porque antes de llegar a comprobar esta, las instrucciones ya han sido leídas (a diferencia del bucle “while”,
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, pero en
un bucle “for” el número de
iteraciones se puede fijar a
un valor exacto. Por tanto,
usaremos el bucle “for” para
ejecutar un conjunto de
instrucciones (escritas
dentro de llaves de apertura
y cierre) un número
concreto de veces. Tiene un inicio y final.

6
ROBOTICA UBB - 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í. Esta conexión se pude hacer de dos formas: usando el cable USB, o mediante los pines digitales 0 (RX) y
1 (TX). Para la conexión al PC usaremos simplemente el cable USB, mientras que los pines TX/RX los
guardaremos para usarlos como entrada/salida o para comunicarse con otro dispositivo según se requiera.
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”. Serial es un
“objeto”, o en otras palabras, un contenedor de instrucciones con alguna relación entre ellas. A continuación, es
explica la sintaxis y funcionamiento de las instrucciones incluidas en el objeto Serial:

Serial.begin(): Abre el canal serie para que pueda empezar la comunicación por él. Por ello, su ejecución es
imprescindible antes de realizar la cualquier transmisión, y se suele escribir dentro de la sección “void setup()”.
Su único parámetro especifica la velocidad en bits/s a la que se producirá la transferencia serie de los datos.
Para la comunicación con un computador, se suele utilizar el valor de 9600.
Serial.end(): No tiene ningún argumento ni devuelve nada, y se encarga de cerrar el canal serie; de esta manera,
la comunicación serie se deshabilita y los pines RX y TX vuelven a estar disponibles para la entrada/salida general.
Para reabrir el canal serie otra vez, se debería usar de nuevo serial.begin().
Las siguientes instrucciones serial corresponden a conjuntos de instrucciones que permiten enviar datos desde
el microcontrolador hacia el exterior.

Comunicación desde la placa al exterior


Serial.print(): Envía a través del canal serie un dato desde el microcontrolador hacia el exterior. Ese dato puede
ser de cualquier tipo: carácter, cadena, número entero, número decimal (por defecto de dos decimales), etc. Si
el dato se especifica explícitamente (en vez de a través de una variable), hay que recordar que los caracteres se
han de escribir entre comillas simples y las cadenas entre comillas dobles.
La transmisión realizada por Serial.print() es asíncrona. 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. Si se desea que la
transmisión se complete antes de continuarse ejecutando el sketch, se puede añadir justo después de
Serial.print() la instrucción Serial.flush(), que no tiene ningún parámetro ni devuelve ningún valor de retorno.
Serial.println(): Hace exactamente lo mismo que Serial.print(), pero se efectúa un salto de línea al finalizar su
ejecución.
Serial.write(): envía un dato desde el microcontrolador al exterior , este solo puede ocupar un byte esdecir la
variable ha de ser “char” o “byte”.

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). 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.read().Si no hay bytes para leer, esta instrucción devolverá 0. No tiene
parámetros.
Serial.read(): Devuelve el primer byte aún no leído de los que estén almacenados en el buffer de entrada. Al
hacerlo, lo elimina de ese buffer. Para devolver (leer) el siguiente byte, se ha de volver a ejecutar Serial.read(). Y
hacer así hasta que se hayan leído todos. Cuando no haya más bytes disponibles, Serial.read() devolverá -1. No
tiene parámetros.

7
ROBOTICA UBB - HARDWARE LIBRE: ARDUINO

Serial.peek(): devuelve el primer byte aún no leído de los que estén almacenados en el buffer de entrada. No
obstante, a diferencia de Serial.read(), ese byte leído no se borra del buffer, con lo que las próximas veces que
se ejecute Serial.peek() se volverá a leer el mismo byte. Si no hay bytes disponibles para leer, Serial.peek()
devolverá -1. Esta instrucción no tiene parámetros.

También podría gustarte