Arduino User Manual Es
Arduino User Manual Es
I.T.I. Sistemas
Universidad de Crdoba
[email protected]
ndice general
1. PREFACIO
2. INTRODUCCIN
7
8
2.1. Qu es ARDUINO? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2. Por qu ARDUINO? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3. HARDWARE
8
8
10
4. SOFTWARE
11
12
12
13
13
14
15
15
16
30
Estructura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Tipos de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Aritmtica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
34
35
5.5. Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.6. Control de ujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.7. E/S digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.8. E/S analgica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.9. Tiempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.10.Matemticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.11.Aleatorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.12.Serie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
41
45
45
46
46
47
49
ndice de cuadros
3.1. Caractersticas tcnicas de Arduino Diecimila . . . . . . . . . . . . . . . . . . . . .
5.1. Relacin valor-salida con analogWrite() . . . . . . . . . . . . . . . . . . . . . . . . .
12
41
ndice de guras
3.1. Placa Arduino Diecimila (USB) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1. Descripcin de componentes de la placa Arduino Diecimila . . . . . . . . . . . . . .
11
17
18
18
19
19
20
21
45
46
46
47
24
25
Captulo 1
PREFACIO
Esta gua de usuario intenta ser una forma de acercarse al diseo y desarrollo de
proyectos basados en Arduino para aquellas personas que nunca han trabajado con l pero
que poseen un buen nivel en programacin y electrnica. Por esta razn y para hacerlo fcil,
se ha excluido mucha informacin existente en Internet y otros manuales para centrarse en
los aspectos ms bsicos de las caractersticas y la programacin de Arduino.
Otro de los objetivos de esta gua es organizar un poco la gran cantidad de informacin
sobre este tema existente en la red. Para ello casi toda la informacin se ha obtenido a
travs de la fuente http://www.arduino.cc o de manuales basados en ella pero algo ms
estructurados. En general, el texto es una traduccin libre al espaol del documento original
Arduino Programming Notebook escrito y compilado por Brian W. Evans .
Por ltimo, la gua est pensada para aquellas personas que no han usado Arduino pero
les gustara iniciarse en este campo, por lo que si eres un usuario avanzado de esta
plataforma no te aportar nada nuevo (slo te servir para repasar conceptos bsicos).
Espero que les sea de utilidad.
Captulo 2
INTRODUCCIN
2.1.
Qu es ARDUINO?
Arduino puede sentir el entorno mediante la recepcin de entradas desde una variedad
de sensores y puede afectar a su alrededor mediante el control de luces, motores y otros
artefactos. El microcontrolador de la placa se programa usando el Arduino Programming
Language (basado en Wiring1) y el Arduino Development Environment (basado en
Processing 2). Los proyectos de Arduino pueden ser autonomos o se pueden comunicar con
software en ejecucin en un ordenador (por ejemplo con Flash, Processing, MaxMSP, etc.).
Las placas se pueden ensamblar a mano 3 o encargarlas preensambladas 4; el software se
puede descargar5 gratuitamente. Los diseos de referencia del hardware (archivos CAD) estn
disponibles bajo licencia open-source, por lo que eres libre de adaptarlas a tus necesidades.
Arduino recibi una mencin honorca en la seccin Digital Communities del Ars
Electronica Prix en 2006.
2.2.
Por qu ARDUINO?
Ms informacin en http://wiring.org.co
Ms informacin en http://www.processing.org
3
Ms informacin en http://www.arduino.cc/en/Main/USBAssembly
4
Ms informacin en http://www.arduino.cc/en/Main/Buy
5
Ms informacin en http://www.arduino.cc/en/Main/Software
2
Barato: Las placas Arduino son relativamente baratas comparadas con otras plataformas
microcontroladoras. La versin menos cara del modulo Arduino puede ser ensamblada a
mano, e incluso los mdulos de Arduino preensamblados cuestan menos de 50$.
Captulo 3
HARDWARE
Hay mltiples versiones de la placa Arduino. La mayora usan el ATmega168 de Atmel,
mientras que las placas ms antiguas usan el ATmega8.
Nota: Los diseos de referencia para Arduino se distribuyen bajo licencia Creative
Commons Attribution-ShareAlike 2.5.
3.1.
Placas E/S
Diecimila: Esta es la placa Arduino ms popular. Se conecta al ordenador con un cable
estndar USB y contiene todo lo que necesitas para programar y usar la placa. Puede ser
ampliada con variedad de dispositivos: placas hijas con caractersticas especcas.
Nano: Una placa compacta diseada para uso como tabla de pruebas, el Nano se
conecta al ordenador usando un cable USB Mini-B.
LilyPad: Diseada para aplicaciones listas para llevar , esta placa puede ser
conectada en fbrica, y un estilo sublime.
Mini: Esta es la placa ms pequea de Arduino. Trabaja bien en tabla de pruebas o para
aplicaciones en las que prima el espacio. Se conecta al ordenador usando el cable Mini USB.
Serial: Es una placa bsica que usa RS232 como un interfaz con el ordenador para programacin y comunicacin. Esta placa es fcil de ensamblar incluso como ejercicio de aprendizaje.
Serial Single Sided: Esta placa est diseada para ser grabada y ensamblada a mano.
Es ligeramente ms grande que la Diecimila, pero aun compatible con los dispositivos.
10
3.2.
3.2.1.
Arduino Diecimila
Visin General
Diecimila quiere decir 10000 en italiano y fue llamado as para resaltar el hecho de que
ms de 10000 placas Arduino han sido fabricadas. El Diecimila es el ltimo en la serie de
placas USB Arduino.
11
3.2.2.
Resumen
Caracterstica
Descripcin
Microcontrolador
Voltaje de operacin
Tensin de entrada (recomendada)
Tensin de entrada (lmite)
Pines digitales de E/S
Pines de entrada analgicos
Corriente DC por pin E/S
Corriente DC para pin 3.3 V
Memoria Flash
SRAM
EEPROM
Frecuencia de reloj
ATmega168
5V
7 - 12 V
6 - 20 V
14 (de los cuales 6 proveen salidas PWM)
6
40 mA
50 mA
16 KB (de los cuales 2 KB usados para bootloader)
1 KB
512 bytes
16 MHz
3.2.3.
Alimentacin
El Arduino Diecimila puede ser alimentado a travs de la conexin USB o con un suministro de
energa externo. La fuente de energa se selecciona mediante el jumper PWR_SEL: para alimentar a
la placa desde la conexin USB, colocarlo en los dos pines ms cercanos al conector USB, para un
suministro de energa externo, en los dos pines ms cercanos al conector de alimentacin externa.
La alimentacin externa (no USB) puede venir o desde un adaptador AC-a-DC (wall-wart)
o desde una batera. El adaptador puede ser conectado mediante un enchufe centro-positivo
en el conector de alimentacin de la placa. Los cables de la batera pueden insertarse en las
cabeceras de los pines Gnd y Vin del conector POWER. Un regulador de bajo abandono
proporciona eciencia energtica mejorada.
La placa puede operar con un suministro externo de 6 a 20 voltios. Si es suministrada
con menos de 7 V, sin embargo, el pin de 5 V puede suministrar menos de cinco voltios y la
placa podra ser inestable. Si usa ms de 12 V, el regulador de tensin puede
sobrecalentarse y daar la placa. El rango recomendado es de 7 a 12 voltios.
Los pines de alimentacin son los siguientes:
VIN. La entrada de tensin a la placa Arduino cuando est usando una fuente de alimentacin externa (al contrario de los 5 voltios de la conexin USB u otra fuente de alimentacin
regulada). Puedes suministrar tensin a travs de este pin, o, si suministra tensin a travs
del conector de alimentacin, acceder a l a travs de este pin.
12
3.2.4.
Memoria
El ATmega168 tiene 16 KB de memoria Flash para almacenar cdigo (de los cuales 2 KB
se usa para el bootloader ). Tiene 1 KB de SRAM y 512 bytes de EEPROM (que puede ser
leida y escrita con la librera EEPROM 1).
3.2.5.
Entrada y Salida
Cada uno de los 14 pines digitales del Diecimila puede ser usado como entrada o salida, usando
funciones pinMode(), digitalWrite() y digitalRead() 2. Operan a 5 voltios. Cada pin puede propor-cionar
o recibir un mximo de 40 mA y tiene una resistencia interna pull-up (desconectada por defecto) de
20-50 KOhms. Adems, algunos pines tienen funciones especiales:
Serial: 0 (Rx) y 1 (Tx). Usados para recibir (Rx) y transmitir (Tx) datos TTL en serie. Estos
pines estan conectados a los pines correspondientes del chip FTDI USB-a-TTL Serie.
El Diecimila tiene 6 entradas analgicas, cada una de las cuales proporciona 10 bits de
resolucin (por ejemplo 1024 valores diferentes). Por defecto miden 5 voltios desde tierra,
aunque es posible cambiar el valor ms alto de su rango usando el pin ARF y algn cdigo
de bajo nivel. Adems, algunos pines tienen funcionalidad especializada:
AREF. Voltaje de referencia para las entradas analgicas. Usado con analogReference() 6.
Reset. Pone esta linea a LOW para resetear el microcontrolador. Tpicamente usada
para aadir un botn de reset a dispositivos que bloquean a la placa principal.
1
13
3.2.6.
Comunicacin
3.2.7.
Programacin
3.2.8.
En lugar de requerir una pulsacin fsica del botn de reset antes de una subida, el Arduino
Diecimila esta diseado de forma que permite ser reseteado por software en ejecucin en una
computadora conectada. Una de las lineas de control de ujo de hardware (DTR) del FT232RL
esta conectada a la linea de reset del ATmega168 a travs de un condensador de 100 nF.
Cuando esta linea toma el valor LOW, la linea reset se mantiene el tiempo suciente para resetear
el chip. La version 0009 del software Arduino usa esta capacidad para permitirte cargar cdigo
simplemente presionando el botn upload en el entorno Arduino. Esto signica que el bootloader
puede tener un tiempo de espera ms corto, mientras la bajada del DTR puede ser coordinada
correctamente con el comienzo de la subida.
Esta conguracin tiene otras repercusiones. Cuando el Diecimila esta conectado a un ordenador
que ejecuta o Mac OS X o Linux, se resetea cada vez que se hace una conexin a l por software (a
travs de USB). Durante el siguiente medio segundo aproximadamente, el bootloader se ejecutar en
el Diecimila. Mientras est programado para ignorar datos malformados (por ejemplo, cualquiera
excepto una subida de cdigo nuevo), interceptar los primeros bytes de datos enviados a la placa
despues de abrir la conexin. Si una rutina que se ejecuta en la placa recibe una conguracin una
7
14
vez u otros datos cuando empieza, asegurarse de que el software con el que se comunica
espera un segundo despus de abrir la conexin y antes de enviar estos datos.
3.2.9.
El Arduino Diecimila tiene un fusible reseteable que protege tus puertos USB del
ordenador de cortes y sobrecargas. Aunque la mayora de los ordenadores proporcionan su
propia proteccin interna, el fusible proporciona una capa de proteccin extra. Si ms de 500
mA se aplican al puerto USB, el fusible automticamente romper la conexin hasta que el
corte o la sobrecarga sean eliminados.
3.2.10.
Caractersticas Fsicas
La mxima longitud y anchura del Diecimila PCB son 2.7 y 2.1 pulgadas respectivamente,
con el conector USB y el conector de alimentacin que se extienden ms alla de las primeras
dimensiones. Tres agujeros de tornillo permiten a la placa atornillarse a una supercie o caja.
15
Captulo 4
SOFTWARE
4.1.
Esta seccin explica como instalar el software Arduino en un ordenador que ejecute
cualquiera de los siguientes Sistemas Operativos: Windows, Mac OS X, GNU/Linux.
Este documento explica como conectar tu placa Arduino al ordenador y cargar tu primera rutina.
4.1.1.
Windows
4.Conectar la placa.
La fuente de alimentacin se selecciona mediante el jumper entre los conectores del USB
y alimentacin. Para alimentar la placa desde el puerto USB (bueno para controlar
dispositivos de baja potencia como LEDs), coloca el jumper en los dos pines ms cercanos al
conector USB. Para alimentar la placa desde una fuente externa (6-12 V), coloca el jumper
en los dos pines ms cercanos al conector de alimentacin. En cualquier caso, conecta la
placa a un puerto USB de tu ordenador.
17
Selecciona Instalar desde una lista o ubicacin especicada (Avanzado) y haz click en siguiente.
18
7.Subir un programa.
Abrir la rutina de ejemplo de parpadeo del LED: File > Sketchbook > Examples > Digital >
Blink.
Seleccionar el dispositivo serie de la placa Arduino desde el menu Herramientas > Puerto Serie .
En Windows, este debera ser COM1 o COM2 para la placa serie Arduino, o COM3, COM4 o
COM5 para la placa USB. Para descubrirlo, abrir el Administrador de Dispositivos de Windows
(En la pestaa Hardware o en el Panel de Control de Sistema). Buscar un USB Serial Port
en la seccin Puertos; esa es la placa Arduino.
20
4.1.2.
VCP.htm.
4.Conectar la placa.
La fuente de alimentacin se selecciona mediante el jumper entre los conectores del USB
y alimentacin. Para alimentar la placa desde el puerto USB (bueno para controlar
dispositivos de baja potencia como LEDs), coloca el jumper en los dos pines ms cercanos al
conector USB. Para alimentar la placa desde una fuente externa (6-12 V), coloca el jumper
en los dos pines ms cercanos al conector de alimentacin. En cualquier caso, conecta la
placa a un puerto USB de tu ordenador.
El LED de alimentacin debera encenderse.
23
7.Subir un programa.
Abrir la rutina de ejemplo de parpadeo del LED: File > Sketchbook > Examples > Digital >
Blink.
24
Selecciona el dispositivo de la placa Arduino desde el men Tools > Serial Port. En el
Mac, debera ser algo con /dev/tty.usbserial .
Asegurate de que Arduino Diecimila est seleccionado en el men Tools > Board.
25
4.1.3.
GNU/Linux
26
4.2.
4.2.1.
Verify/Compile
New
Carga tu cdigo a la placa Arduino I/O. Asegrate de guardar o vericar tu rutina antes de
cargarla.
Serial Monitor
Muestra datos serie enviados desde la placa Arduino (placa serie o USB). Para enviar datos a
la placa, introduce el texto y haz click en el botn Send o presiona Enter . Elige la velocidad de
transmisin de datos desde el desplegable que asigna la velocidad pasada al Serial.being en
tu rutina. Recuerda que en Mac o GNU/Linux, la placa Arduino se reiniciar (vuelve a
ejecutar tu rutina desde del principio) cuando conectes con el Serial monitor .
Puedes comunicarte tambin con la placa desde Processing, Flash, MaxMSP, etc
(consulta http://www.arduino.cc/playground/Main/Interfacing para ms detalles).
Tab Menu
Permite gestionar las rutinas con ms de un archivo (cada uno de los cuales aparece en
su propia pestaa). Estos pueden ser:
Archivos de cdigo de Arduino (sin extensin).
Archivos de C (extensin .c).
Archivos de C++ (extensin .cpp).
Archivos de cabecera (extensin .h).
28
4.2.2.
Mens
Sketch
Verify/Compile: Comprueba tu rutina para errores.
Import Library: Utiliza una librera en tu rutina. Trabaja aadiendo #include en la cima
de tu cdigo. Esto aade funcionalidad extra a tu rutina, pero incrementa su tamao.
Para parar de usar una librera, elimina el #include apropiado de la cima de tu rutina.
Show Sketch Folder: Abre la carpeta de rutinas en tu escritorio.
Add File... : Aade otro chero fuente a la rutina. El nuevo archivo aparece en una nueva
pestaa en la ventana de la rutina. Esto facilita y agranda proyectos con mltiples archivos
fuente. Los archivos pueden ser eliminados de una rutina usando el Tab Menu.
Tools
Auto Format: Esto formatea tu cdigo amigablemente.
Copy for Discourse: Copia el cdigo de tu rutina al portapapeles de forma conveniente
para postear en un foro, completa con resaltado de sintaxis.
Board: Selecciona la placa que estas usando. Esto controla la forma en que tu rutina es
compilada y cargada as como el comportamiento de los elementos del men Burn Bootloader.
Serial Port: Este men contiene todos los dispositivos serie (reales o virtuales) de tu mquina.
Debera actualizarse automticamente cada vez que abres el nivel superior del men Tools.
Antes de subir tu rutina, necesitas seleccionar el elemento de este men que representa a
tu placa Arduino. En el Mac, esto es probablemente algo como /dev/tty.usbserial-1B1
(para la placa USB), o /dev/tty.USA19QW1b1P1.1 (para una placa Serie conectada
4.2.3.
Preferencias
Algunas preferencias pueden ser ajustadas en el dilogo Preferences (se encuentra bajo
el men Arduino en el Mac, o File en Windows y GNU/Linux). El resto se puede encontrar en
los archivos de preferencias.
29
Captulo 5
COMENZANDO CON ARDUINO
5.1.
Estructura
setup()
La funcin setup debera contener la declaracin de cualquier variable al comienzo del
programa. Es la primera funcin a ejecutar en el programa, es ejecutada una vez y es usada
para asignar pinMode o inicializar las comunicaciones serie.
void setup()
{
pinMode(pin, OUTPUT); //ajusta 'pin' como salida
}
loop()
La funcin loop se ejecuta a continuacin e incluye el cdigo que se ejecuta
contnuamente - leyendo entradas, activando salidas, etc. Esta funcin es el ncleo de todos
los programas Arduino y hace la mayor parte del trabajo.
30
void loop()
{
digitalWrite(pin, HIGH);
delay(1000);
digitalWrite(pin, LOW);
delay(1000);
}
//Activa 'pin'
//espera un segundo
//Desactiva 'pin'
//espera un segundo
funciones
Una funcin es un bloque de cdigo que tiene un nombre y un grupo de declaraciones
que se ejecutan cuando se llama a la funcin. Podemos hacer uso de funciones integradas
como void setup() y void loop() o escribir nuevas.
Las funciones se escriben para ejecutar tareas repetitivas y reducir el desorden en un
progra-ma. En primer lugar se declara el tipo de la funcin, que ser el valor retornado por la
funcin (int, void...). A continuacin del tipo, se declara el nombre de la funcin y, entre
parntesis, los parmetros que se pasan a la funcin.
type functionName(parameters)
{
statements;
}
La siguiente funcin int delayVal(), asigna un valor de retardo en un programa por lectura del
valor de un potencimetro.
int
{
delayVal()
int v;
//crea una variable temporal 'v'
v = analogRead(pot); //lee el valor del potencimetro
v /= 4;
//convierte 0-1023 a 0-255
return v;
//devuelve el valor final de v
llaves {}
Las llaves denen el comienzo y el nal de bloques de funcin y bloques de declaraciones como
void loop() y sentencias for e if. Las llaves deben estar balanceadas (a una llave de apertura { debe
seguirle una llave de cierre }). Las llaves no balanceadas provocan errores de compilacin.
void loop()
{
statements;
}
El entorno Arduino incluye una prctica caracterstica para chequear el balance de llaves.
Slo selecciona una llave y su compaera lgica aparecer resaltada.
31
punto y coma ;
Un punto y coma debe usarse al nal de cada declaracin y separa los elementos del
programa. Tambin se usa para separar los elementos en un bucle for.
int x = 13; //declara la variable 'x' como el entero 13
Nota: Olvidar un punto y coma al nal de una declaracin producir un error de compilacin.
Como los comentarios son ignorados por el programa y no ocupan espacio en memoria
deben usarse genersamente y tambin pueden usarse para comentar bloques de cdigo
con propositos de depuracin.
comentarios de lnea //
Comentarios de una lnea empiezan con // y terminan con la siguiente lnea de cdigo. Como
el bloque de comentarios, son ignorados por el programa y no toman espacio en memoria.
// este es un comentario de una lnea
Comentarios de una lnea se usan a menudo despues de declaraciones vlidas para proporcionar
ms informacin sobre qu lleva la declaracin o proporcionar un recordatorio en el futuro.
5.2.
Variables
Una variable es una forma de llamar y almacenar un valor numrico para usarse despus por
el programa. Como su nombre indica, las variables son nmeros que pueden cambiarse
continuamente al contrario que las constantes, cuyo valor nunca cambia. Una variable necesita
ser declarada y, opcionalmente, asignada al valor que necesita para ser almacenada.
int inputVariable = 0; //declara una variable y asigna el valor a 0 inputVariable =
analogRead(2); //ajusta la variable al valor del pin
//analgico 2
32
Una vez que una variable ha sido asignada, o reasignada, puedes testear su valor para ver
si cumple ciertas condiciones, o puedes usarlo directamente.
if(inputVariable < 100)
{
inputVariable = 100;
}
delay(inputVariable);
//comprueba si
//si es cierto
la
//usa la variable
como retardo
declaracin de variable
Todas las variables tienen que ser declaradas antes de que puedan ser usadas. Declarar una
variable signica denir su tipo de valor, como int, long, oat, etc., denir un nombre especco, y,
opcionalmente, asignar un valor inicial. Esto slo necesita hacerse una vez en un programa pero
el valor puede cambiarse en cualquier momento usando aritmtica y varias asignaciones.
int inputVariable = 0;
Una variable puede ser declarada en un nmero de posiciones en todo el programa y donde
esta decinicin tiene lugar determina que partes del programa pueden usar la variable.
mbito de la variable
Una variable puede ser declarada al comienzo del programa antes del void setup(),
localmente dentro de funciones, y algunas veces en un bloque de declaracin, por ejemplo
bucles for. Donde la variable es declarada determina el mbito de la variable, o la abilidad de
ciertas partes de un programa de hacer uso de la variable.
Una variable global es una que puede ser vista y usada por cualquier funcin y declaracin
en un programa. Esta variable se declara al comienzo del programa, antes de la funcin setup().
Una variable local es una que se dene dentro de una funcin o como parte de un bucle
for. Slo es visible y slo puede ser usada dentro de la funcin en la cual fue declarada.
Adems, es posible tener dos o ms variables del mismo nombre en diferentes partes del
programa que contienen diferentes valores.
int value; //'value' es visible por cualquier funcin
void setup()
{
//no se necesita setup
}
void loop()
{
for(int i=0; i<20;) //'i' es slo visible dentro del bucle for
{
i++;
33
}
float f; //'f' es slo visible dentro de loop
}
5.3.
Tipos de datos
byte
Byte almacena un valor numrico de 8 bits sin puntos decimales. Tienen un rango de 0 a 255.
byte someVariable = 180; //declara 'someVariable' como un tipo byte
int
Enteros son los tipos de datos primarios para almacenamiento de nmeros sin puntos
decimales y almacenan un valor de 16 bits con un rango de -32,768 a 32,767.
int someVariable = 1500; //declara 'someVariable' como tipo int
long
Tipo de datos de tamao extendido para enteros largos, sin puntos decimales,
almacenados en un valor de 32 bits con un rango de -2,146,483,648 a 2,147,483,647.
long someVariable = 90000; //declara 'someVariable' como tipo long
oat
Un tipo de datos para nmeros en punto otante, o nmeros que tienen un punto decimal.
Los nmeros en punto otante tienen mayor resolucin que los enteros y se almacenan como
valor de 32 bits con un rango de -3.4028235E+38 a 3.4028235E+38.
float someVariable = 3.14; //declara 'someVariable' como tipo float
arrays
Un array es una coleccin de valores que son accedidos con un ndice numrico. Cualquier valor
en el array debe llamarse escribiendo el nombre del array y el ndice numrico del valor. Los arrays
estn indexados a cero, con el primer valor en el array comenzando con el ndice nmero 0. Un array
necesita ser declarado y opcionalmente asignarle valores antes de que puedan ser usados.
int myArray[] = {value0, value1, value2...};
Asimismo es posible declarar un array declarando el tipo del array y el tamao y luego
asignarle valores a una posicin del ndice.
34
Para recibir un valor desde un array, asignamos una variable al array y la posicin del ndice:
x = myArray[3]; //x ahora es igual a 10
5.4.
Aritmtica
La operacin es llevada a cabo usando del tipo de datos de los operandos, as 9/4 devuelve 2 en
lugar de 2.25. Si los operandos son de tipos diferentes, el tipo mayor es usado para el clculo.
Nota: Usar el operador cast, por ejemplo (int)myFloat para convertir un tipo de variable a
otro al vuelo.
asignaciones compuestas
Las asignaciones compuestas combinan una operacin aritmtica con una asignacin de
varia-ble. Estas son muy frecuentemente encontradas en bucles for. Las asignaciones
compuestas ms comunes incluyen:
x++;
x--;
//lo
//lo
operadores de comparacin
Las comparaciones de una variable o constante con otra se usan a menudo en
declaraciones if para comprobar si un condicin especca es cierta.
x == y; //x es igual a y
x != y; //x no es igual a y
x < y; //x es menor que
y
x > y; //x es mayor que
y
x <= y; //x
es menor o igual que y
x >= y; //x
es mayor o igual que y
35
operadores lgicos
Los operadores lgicos son normalmente una forma de comparar dos expresiones y
devuelven TRUE o FALSE dependiendo del operador. Hay tres operadores lgicos, AND,
OR y NOT, que se usan a menudo en declaraciones if.
5.5.
//AND logico:
if(x>0 && x<5)
//OR logico:
if(x>0 || y>0)
//NOT logico:
if(!(x>0))
Constantes
El lenguaje Arduino tiene unos cuantos valores predenidos que se llaman constantes. Se
usan para hacer los programas ms legibles. Las constantes se clasican en grupos.
true/false
Estas son constantes Booleanas que denen niveles lgicos. FALSE se dene como 0
(cero) mientras TRUE es 1 o un valor distinto de 0.
if(b == TRUE)
{
doSomething;
}
high/low
Estas constantes denen los niveles de pin como HIGH o LOW y se usan cuando se leen
o se escriben los pines digitales. HIGH esta denido como el nivel 1 lgico, ON 5 V,
mientras que LOW es el nivel lgico 0, OFF 0 V.
digitalWrite(13, HIGH);
input/output
Constantes usadas con la funcin pinMode() para denir el modo de un pin digital como
INPUT u OUTPUT.
pinMode(13, OUTPUT);
36
5.6.
Control de ujo
if
Las sentencias if comprueban si cierta condicin ha sido alcanzada y ejecutan todas las sentencias dentro de las llaves si la declaracin es cierta. Si es falsa el programa ignora la sentencia.
if(someVariable ?? value)
{
doSomething;
}
if. . . else
if. . . else permite tomar decisiones este - o este .
if(inputPin == HIGH)
{
doThingA;
}
else
{
doThingB;
}
else puede preceder a otra comprobacin if, por lo que multiples y mutuas comprobaciones
exclu-sivas pueden ejecutarse al mismo tiempo.
if(inputPin < 500)
{
doThingA;
}
else if(inputPin >= 1000)
{
doThingB;
}
else
{
doThingC;
}
37
for
La sentencia for se usa para repetir un bloque de declaraciones encerradas en llaves un
nmero especco de veces. Un contador de incremento se usa a menudo para incrementar y
terminar el bucle. Hay tres partes seperadas por punto y coma ( ;), en la cabecera del bucle.
for(inicializacion; condicion; expresion)
{
doSomething;
}
La inicializacin de una variable local, o contador de incremento, sucede primero y una sola
una vez. Cada vez que pasa el bucle, la condicin siguiente es comprobada. Si la condicin
devuelve TRUE, las declaraciones y expresiones que siguen se ejecutan y la condicin se
comprueba de nuevo. Cuando la condicin se vuelve FALSE, el bucle termina.
for(int i=0; i<20;
{
digitalWrite(13,
delay(250);
digitalWrite(13,
delay(250);
}
i++)
HIGH);
LOW);
while
El bucle while se repetir continuamente, e innitamente, hasta que la expresin dentro del
parntesis se vuelva falsa. Algo debe cambiar la variable testeada, o el bucle while nunca
saldr. Esto podra estar en tu cdigo, como por ejemplo una variable incrementada, o una
condicin externa, como un sensor de comprobacin.
while(someVariable ?? value)
{
doSomething;
}
while(someVariable < 200)
{
doSomething;
someVariable++;
}
do. . . while
El bucle do. . . while es un bucle que trabaja de la misma forma que el bucle while, con la
excepcin de que la condicin es testeada al nal del bucle, por lo que el bucle do. . . while
siempre se ejecutar al menos una vez.
38
do
{
doSomething; }while(someVariable
?? value);
do
{
x = readSensors();
delay(50);
}while(x < 100);
5.7.
E/S digital
pinMode(pin, mode)
Se usa en void setup() para congurar un pin especco para que se comporte o como
INPUT o como OUTPUT.
pintMode(pin, OUTPUT);
Los pines digitales de Arduino estan ajustados a INPUT por defecto, por lo que no necesitan
ser declarados explcitamente como entradas con pinMode(). Los pines congurados como
INPUT se dice que estn e un estado de alta impedancia.
Hay tambin convenientes resistencias de pull-up de 20KOhm, integradas en el chip
ATmega que pueden ser accedidas por software. A estas resistencias pull-up integradas se
accede de la siguiente manera.
pinMode(pin, INPUT);
digitalWrite(pin, HIGH);
//ajusta
//activa
Las resistencias de pull-up se usaran normalmente para conectar entradas como interruptores.
Los pines congurados como OUTPUT se dice que estn en un estado de baja impedancia y
pueden proporcionar 40 mA a otros dispositivos/circuitos.
Nota: Cortocircuitos en los pines de Arduino o corriente excesiva puden daar o destruir
el pin de salida, o daar el chip ATmega. A menudo es una buena idea conectar un pin
OUTPUT a un dispositivo externo en serie con una resistencia de 470Ohm o 1KOhm.
digitalRead(pin)
Lee el valor desde un pin digital especicado con el resultado HIGH o LOW. El pin puede
ser especicado o como una variable o como una constante (0 - 13).
value = digitalRead(Pin);
digitalWrite(pin, value)
Devuelve o el nivel lgico HIGH o LOW a (activa o desactiva) un pin digital especicado.
El pin puede ser especicado como una variable o constante (0 - 13).
digitalWrite(pin, HIGH);
//Ejemplo de programa
}
void loop()
{
value = digitalRead(pin);
digitalWrite(led, value);
5.8.
E/S analgica
analogRead(pin)
Lee el valor desde un pin analgico especicado con una resolucin de 10 bits. Esta
funcin slo trabaja en los pines analgicos (0 - 5). Los valores enteros devueltos estn en
el rango de 0 a 1023.
value = analogRead(pin);
Nota: Los pines analgicos al contrario que los digitales, no necesitan ser declarados al
principio como INPUT u OUTPUT.
analogWrite(pin, value)
Escribe un valor pseudo analgico usando modulacin por ancho de pulso (PWM en
ingls) a un pin de salida marcado como PWM. En los Arduinos ms nuevos con el chip
ATmega168, esta funcin trabaja en los pines 3, 5, 6, 9, 10 y 11. Los Arduinos ms antiguos
con un ATmega8 slo soporta los pines 9, 10 y 11. El valor puede ser especicado como una
variable o constante con un valor de 0 a 255.
analogWrite(pin, value);
Valor
0
64
128
192
255
Nivel de salida
0 V (t)
0 V (3/4 de t) y 5 V (1/4 de t)
0 V (1/2 de t) y 5 V (1/2 de t)
0 V (1/4 de t) y 5 v (3/4 de t)
5 V (t)
void setup(){}
//setup no es necesario
void loop()
{
value = analogRead(pin);
value /= 4; analogWrite(led,
value);
}
5.9.
Tiempo
delay(ms)
Pausa tu programa por la cantidad de tiempo especicada en milisegundos, donde 1000
es igual a 1 segundo.
delay(1000);
millis()
Devuelve el nmero de milisegundos desde que la placa Arduino empez a ejecutar el
programa actual como un valor long sin signo.
value = millis(); //ajusta 'value' igual a millis()
Nota: Este nmero se desbordar (resetear de nuevo a cero), despus de aproximadamente 9 horas.
41
5.10. Matemticas
min(x,y)
Calcula el mnimo de dos nmeros de cualquier tipo de datos y devuelve el nmero ms pequeo.
value = min(value, 100); //asigna a 'value' al ms pequeo de 'value' o 100, //asegurandose que
nunca superara 100.
max(x,y)
Calcula el mximo de dos nmeros de cualquier tipo de datos y devuelve el nmero ms grande.
value = max(value, 100); //asigna a 'value' al ms grande de 'value' o 100, //asegurandose que es
al menos 100.
5.11.
Aleatorio
randomSeed(seed)
Asigna un valor, o semilla (seed en ingls), como el punto de partida para la funcin random().
randomSeed(value);
random(max)
random(min, max)
La funcin random te permite devolver nmeros pseudo aleatorios en un rango
especicado por los valores min y max.
value = random(100, 200); //asigna a 'value' un nmero aleatorio //entre 100 y 200.
randNumber;
int
led = 10;
42
void setup(){}
//setup no es necesario
void loop()
{
randomSeed(millis());
randNumber = random(255);
analogWrite(led, randNumber);
delay(500);
}
5.12. Serie
Serial.begin(rate)
Abre el puerto serie y asigna la tasa de baudios para la transmisin de datos serie. La tpica tasa
de baudios para comunicarse con el ordenador es 9600 aunque otras velocidades estn soportadas.
void setup()
{
Serial.begin(9600);
Nota: Cuando se usa la comunicacin serie, los pines digitales 0 (Rx) y 1 (Tx) no pueden
ser usados al mismo tiempo.
Serial.println(data)
Imprime datos al puerto serie, seguido de un retorno de carro y avance de lnea
automticos. Este comando toma la misma forma que Serial.print(), pero es ms fcil para
leer datos en el Serial Monitor 1.
Serial.println(analogValue);
//Ejemplo de aplicacion
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println(analogRead(0));
delay(1000);
}
1
43
Bibliografa
[1] EVANS, Brian W., (2007) Arduino Programming Notebook.
[2] SANTO ORCERO, David, (2007), Hardware Libre , Todo Linux, Madrid: Studio Press.
Pp: 12-17.
[3] ARDUINO - Wikipedia, the free encyclopedia, (ltima modicacin, Marzo 2008).
Disponible en: http://en.wikipedia.org/wiki/Arduino
[4] ARDUINO : Homepage, (ltima modicacin, Marzo 2006). Disponible en: http://www.
arduino.cc/es/
[5] ARDUINO - Homepage, (ltima modicacin, Julio 2008). Disponible en: http://www.
arduino.cc
44
Apndice A
Ejemplos de Aplicacin con Arduino
A.1.
Salida digital
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
//ejecutar una y otra vez
{
digitalWrite(ledPin, HIGH); //activa el LED
delay(1000);
//pausa 1 segundo
digitalWrite(ledPin, LOW);
//desactiva el LED
delay(1000);
//pausa 1 segundo
}
45
A.2.
Entrada digital
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(inPin, INPUT);
}
void loop()
{
if(digitalRead(inPin == HIGH)
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
}
A.3.
Salida PWM
La modulacin de ancho de pulso (PWM) es una forma de falsicar una salida analgica por
la salida pulsante. Esto podra usarse para atenuar e iluminar un LED o posteriormente controlar
un servomotor. El siguiente ejemplo ilumina y atenua lentamente un LED usando bucles for.
int ledPin = 9;
void setup(){}
void loop()
{
for(int i=0; i<=255; i++)
{
analogWrite(ledPin, i);
delay(100);
}
for(int i=255; i>=0; i--)
{
analogWrite(ledPin, i);
delay(100);
}
}
A.4.
Entrada de potenciometro
0;
13;
//pin
//pin
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH);
delay(analogRead(potPin));
digitalWrite(ledPin, LOW);
delay(analogRead(potPin));
}
//activa ledPin
//pausa el programa
//desactiva ledPin
//pausa el programa
48
Apndice B
Esquemtico de Arduino Diecimila
49