Sei sulla pagina 1di 14

Lenguaje de programacin Arduino

La plataforma Arduino se programa mediante el uso de un lenguaje propio basado en el lenguaje


de programacin de alto nivel Processing. Sin embargo, es posible utilizar otros lenguajes de
programacin y aplicaciones populares en Arduino,
21
debido a que Arduino usa la transmisin
serial de datos soportada por la mayora de los lenguajes mencionados. Para los que no soportan
el formato serie de forma nativa, es posible utilizar software intermediario que traduzca los
mensajes enviados por ambas partes para permitir una comunicacin fluida. Algunos ejemplos son:
3DVIA Virtools: aplicaciones interactivas y de tiempo real.
Adobe Director
BlitzMax (con acceso restringido)
C
C++ (mediante libSerial o en Windows)
C#
Cocoa/Objective-C (para Mac OS X)
Flash (mediante ActionScript)
Gambas
Isadora (Interactividad audiovisual en tiempo real)
Instant Reality (X3D)
Java
Liberlab (software de medicin y experimentacin)
Mathematica
Matlab
MaxMSP: Entorno grfico de programacin para aplicaciones musicales, de audio y multimedia
Minibloq: Entorno grfico de programacin, corre tambin en las computadoras OLPC
Perl
Php
Physical Etoys: Entorno grfico de programacin usado para proyectos de robtica educativa
Processing
Pure Data
Python
Ruby
Scratch for Arduino (S4A): Entorno grfico de programacin, modificacin del entorno para
nios Scratch, del MIT)
Squeak: Implementacin libre de Smalltalk
SuperCollider: Sntesis de audio en tiempo real
VBScript
Visual Basic .NET
VVVV: Sntesis de vdeo en tiempo real

Funciones bsicas y operadores
Arduino est basado en C y soporta todas las funciones del estndar C y algunas de C++.
22
A
continuacin se muestra un resumen con la estructura y sintaxis del lenguaje Arduino:
Sintaxis Bsica
Delimitadores:;, {}
Comentarios: //, /* */
Cabeceras: #define, #include
Operadores aritmticos: +, -, *, /, %
Asignacin: =
Operadores de comparacin: ==, !=, <, >, <=, >=
Operadores Booleanos: &&, ||, !
Operadores de acceso a punteros: *, &
Operadores de bits: &, |, ^, ~, <<, >>
Operadores compuestos:
Incremento y decremento de variables: ++, --
Asignacin y operacin: +=, -=, *=, /=, &=, |=
Estructuras de control
Condicionales: if, if...else, switch case
Bucles: for, while, do... while
Bifurcaciones y saltos: break, continue, return, goto
Variables
En cuanto al tratamiento de las variables tambin comparte un gran parecido con el lenguaje C.
Constantes
HIGH/LOW: representan los niveles alto y bajo de las seales de entrada y salida. Los niveles
altos son aquellos de 3 voltios o ms.
INPUT/OUTPUT: entrada o salida.
false (falso): Seal que representa al cero lgico. A diferencia de las seales HIGH/LOW, su
nombre se escribe en letra minscula.
true (verdadero): Seal cuya definicin es ms amplia que la de false. Cualquier nmero
entero diferente de cero es "verdadero", segn el lgebra de Boole, como en el caso de -200, -
1 o 1. Si es cero, es "falso".
Tipos de datos
void, boolean, char, unsigned char, byte, int, unsigned int, word, long, unsigned long, float,
double, string, array.


Conversin entre tipos

Estas funciones reciben como argumento una variable de cualquier tipo y devuelven una variable
convertida en el tipo deseado.
char(), byte(), int(), word(), long(), float()
Cualificadores y mbito de las variables
static, volatile, const
Utilidades
sizeof()
Funciones Bsicas
E/S Digital[
pinMode(pin, modo)
digitalWrite(pin, valor)
int digitalRead(pin)
E/S Analgica
analogReference(tipo)
int analogRead(pin)
analogWrite(pin, valor)
E/S Avanzada
shiftOut(dataPin, clockPin, bitOrder, valor)
unsigned long pulseIn(pin, valor)
Tiempo
unsigned long millis()
unsigned long micros()
delay(ms)
delayMicroseconds(microsegundos)
Matemticas
min(x, y), max(x, y), abs(x), constrain(x, a, b), map(valor, fromLow, fromHigh, toLow, toHigh),
pow(base, exponente), sqrt(x)
Trigonometra
sin(rad), cos(rad), tan(rad)
Nmeros aleatorios
randomSeed(semilla), long random(mx), long random(mn, mx)
Bits y Bytes
lowByte(), highByte(), bitRead(), bitWrite(), bitSet(), bitClear(), bit()
Interrupciones externas
attachInterrupt(interrupcin, funcin, modo)
detachInterrupt(interrupcin)
Interrupciones
interrupts(), noInterrupts()
Comunicacin por puerto serie
Las funciones de manejo del puerto serie deben ir precedidas de la palabra "Serial" aunque no
necesitan ninguna declaracin en la cabecera del programa. Por esto se consideran funciones
base del lenguaje.
23
Estas son las funciones para transmisin serial:
begin(), available(), read(), flush(), print(), println(), write()
Manipulacin de puertos
Los registros de puertos permiten la manipulacin a ms bajo nivel y de forma ms rpida de los
contactos de entrada/salida del microcontrolador de las placas Arduino.
24
Los contactos elctricos
de las placas Arduino estn repartidos entre los registros B(0-7), C (analgicos) y D(8-13).
Mediante estas variables ser observado y modificado su estado:
DDR[B/C/D]: Data Direction Register (o direccin del registro de datos) del puerto B, C D. Es
una variable de Lectura/Escritura que sirve para especificar cuales contactos sern usados
como entrada y salida.
PORT[B/C/D]: Data Register (o registro de datos) del puerto B, C D. Es una variable de
Lectura/Escritura.
PIN[B/C/D]: Input Pins Register (o registro de pines de entrada) del puerto B, C D. Variable
de slo lectura.
Por ejemplo, para especificar los contactos 9 a 13 como salidas y el 8 como entrada (puesto que el
puerto D usa los pines de la placa Arduino 8 al 13 digitales) bastara utilizar la siguiente asignacin:
DDRD = B11111110;
Como se ha podido comprobar, el conocimiento del lenguaje C, permite la programacin en
Arduino debido a la similitud entre ste y el lenguaje nativo del proyecto, lo que implica el
aprendizaje de algunas funciones especficas de que dispone el lenguaje del proyecto para
manejar los diferentes parmetros. Se pueden construir aplicaciones de cierta complejidad sin
necesidad de muchos conceptos previos.


AVR Libc
Los programas compilados con Arduino (salvo en las placas con CorteX M3) se enlazan contra
AVR Libc
22
por lo que tienen acceso a algunas de sus funciones. AVR Libc es un proyecto de
software libre con el objetivo de proporcionar una biblioteca C de alta calidad para utilizarse con el
compilador GCC sobre microcontroladores Atmel AVR. Se compone de 3 partes:
avr-binutils
avr-gcc
avr-libc
La mayora del lenguaje de programacin Arduino est escrita con constantes y funciones de AVR
y ciertas funcionalidades slo se pueden obtener haciendo uso de AVR.
25

Interrupciones
Las seales de interrupcin son las siguientes:
cli(): desactiva las interrupciones globales
sei(): activa las interrupciones
Esto afectar al temporizador y a la comunicacin serial. La funcin delayMicroseconds() desactiva
las interrupciones cuando se ejecuta.
Temporizadores
La funcin delayMicroseconds() crea el menor retardo posible del lenguaje Arduino que ronda los
2s. Para retardos ms pequeos se debe utilizar la llamada de ensamblador 'nop' (no operacin).
Cada sentencia 'nop' se ejecutar en un ciclo de mquina (16 MHz) de aproximadamente 62.5ns.
Manipulacin de puertos
La manipulacin de puertos con cdigo AVR es ms rpida que utilizar la funcin digitalWrite() de
Arduino.
Establecer Bits en variables
cbi y sbi son mecanismos estndar (AVR) para establecer o limpiar bits en PORT y otras variables.
Diferencias con Processing
La sintaxis del lenguaje de programacin Arduino es una versin simplificada de C/C++ y tiene
algunas diferencias respecto de Processing.
26

27
Debido a que Arduino est basado en C/C++
mientras que Processing se basa en Java, existen varias diferencias en cuanto a la sintaxis de
ambos lenguajes y el modo en que se programa:
Arreglos
Arduino Processing
int bar[8]; int[] bar = new int[8];
bar[0] = 1; bar[0] = 1;
int foo[] = { 0, 1, 2 };
int foo[] = { 0, 1, 2 };
o bien
int[] foo = { 0, 1, 2 };
Impresin de cadenas
Arduino Processing
Serial.println("hello world"); println("hello world");
int i = 5;
Serial.println(i);
int i = 5;
println(i);
int i = 5;
Serial.print("i = ");
Serial.print(i);
Serial.println();
int i="5;"
println("i =" + i);
Ejemplo sencillo de programacin en Arduino
El primer paso antes de comprobar que la instalacin es correcta y empezar a trabajar con Arduino,
es usar ejemplos prcticos que vienen disponibles con el dispositivo. Se recomienda abrir el
ejemplo led_blink el cual crea una intermitencia por segundo en un led conectado en el pin 13. El
cdigo necesario es el siguiente:
# define LED_PIN 13
void setup () {
// Activado del contacto 13 para salida digital
pinMode (LED_PIN, OUTPUT);
}
// Bucle infinito
void loop () {
// Encendido del diodo LED enviando una seal alta
digitalWrite (LED_PIN, HIGH);
// Tiempo de espera de 1 segundo (1000 ms)
delay (1000);
// Apagado del diodo LED enviando una seal baja.
digitalWrite (LED_PIN, LOW);
// Tiempo de espera de 1 segundo
delay (1000);
}
Bibliotecas en Arduino
Las bibliotecas estndar que ofrece Arduino son las siguientes:
28

Serial
Lectura y escritura por el puerto serie.
EEPROM
Lectura y escritura en el almacenamiento permanente.
29

read(), write()
Ethernet
Conexin a Internet mediante Arduino Ethernet Shield. Puede funcionar como servidor que
acepta peticiones remotas o como cliente. Se permiten hasta cuatro conexiones simultneas.
30
Los
comandos usados son los siguientes:
Servidor: Server(), begin(), available(), write(), print(), println()
Cliente: Client(), connected(), connect(), write(), print(), println(), available(), read(), flush(),
stop()
Firmata
Es una biblioteca de comunicacin con aplicaciones informticas utilizando el protocolo estndar
del puerto serie.
31

LiquidCrystal
Control de LCDs con chipset Hitachi HD44780 o compatibles.
32
La biblioteca soporta los modos de
4 y 8 bits.
Servo
Biblioteca para el control de servo motores.
33
A partir de la versin 0017 de Arduino la biblioteca
soporta hasta 12 motores en la mayora de las placas Arduino y 48 en la Arduino Mega. Estos son
los comandos usados:
attach(), write(), writeMicroseconds(), read(), attached(), detach()
SoftwareSerial
Comunicacin serie en contactos digitales.
34
Por defecto Arduino incluye comunicacin slo en los
contactos 0 y 1 pero gracias a esta biblioteca puede realizarse esta comunicacin con los
restantes.
Stepper
Control de motores paso a paso unipolares o bipolares.
35

Stepper(steps, pin1, pin2), Stepper(steps, pin1, pin2, pin3, pin4), setSpeed(rpm), step(steps)

Wire
Envo y recepcin de datos sobre una red de dispositivos o sensores mediante Two Wire
Interface (TWI/I2C).
36

Las bibliotecas Matrix y Sprite de Wiring son totalmente compatibles con Arduino y sirven para
manejo de matrices de diodos LED. Tambin se ofrece informacin sobre diversas bibliotecas
desarrolladas por diversos colaboradores que permiten realizar muchas tareas.
Creacin de bibliotecas
Los usuarios de Arduino tienen la posibilidad de escribir sus propias bibliotecas.
37
Ello permite
disponer de cdigo que puede reutilizarse en otros proyectos, mantener el cdigo fuente principal
separado de las bibliotecas y la organizacin de los programas construidos es ms clara.
Ejemplo de biblioteca
El siguiente ejemplo permite el envo de caracteres mediante el cdigo Morse:
Se crea el archivo Morse.h que incluye la definicin de la clase Morse que tiene 3 funciones: un
constructor (Morse()), una funcin para enviar 1 punto (dot()) y una funcin para enviar una raya
(dash()). La variable _pin permite indicar el contacto a usar.
/*
Morse.h - Biblioteca para el envo de Cdigo Morse.
Creado por David A. Mellis, el 2 de Noviembre de 2007.
Liberado al dominio pblico.
*/

# ifndef Morse_h
# define Morse_h

# include "WProgram.h"

class Morse
{
public:
Morse(int pin);
void dot();
void dash();
private:
int _pin;
};

# endif
Debe ser creado el archivo Morse.cpp con el cdigo, es decir con la implementacin de los
mtodos declarados:
/*
Morse.cpp - Biblioteca para el envo de Cdigo Morse.
Creado por David A. Mellis, el 2 de Noviembre de 2007.
Liberado al dominio pblico.
*/

# include "WProgram.h"
# include "Morse.h"

Morse::Morse(int pin)
{
pinMode(pin, OUTPUT);
_pin = pin;
}

void Morse::dot()
{
digitalWrite(_pin, HIGH);
delay(250);
digitalWrite(_pin, LOW);
delay(250);
}

void Morse::dash()
{
digitalWrite(_pin, HIGH);
delay(1000);
digitalWrite(_pin, LOW);
delay(250);
}
La biblioteca creada as puede ser usada mediante el comando #include. Si se desea enviar una
peticin de auxilio SOS por el contacto 13 bastara con llamar a Morse(13) y ejecutar la siguiente
secuencia:
morse.dot(); morse.dot(); morse.dot();
morse.dash(); morse.dash(); morse.dash();
morse.dot(); morse.dot(); morse.dot();
Instalacin en diferentes entornos[editar]
Windows
Los pasos a seguir son los siguientes:


Interfaz del entorno de desarrollo Arduino en el Sistema Operativo Windows.
Descargar las versiones ms reciente de Java Runtime Enviroment (J2RE) y del IDE Arduino.
Instalar los controladores FTDI USB, con la placa Arduino conectada.
Ejecutar el IDE Arduino para abrir la interfaz y configurar el puerto USB donde est conectada
la placa.












GNU/Linux


Interfaz del entorno de desarrollo Arduino S.O. GNU/Linux.
Para instalar Arduino en un sistema GNU/Linux necesitamos los siguientes programas para
resolver las dependencias:
Sun java runtime, jre.
avr-gcc, compilador para la familia de microcontroladores avr de atmel.
avr-libc, libc del compilador avr-gcc.
En algunas distribuciones conviene desinstalar, si no es necesario, el programa "brltty" que permite
el acceso al terminal a personas invidentes. Para concluir, se descarga el framework de Arduino,
se descomprime y ejecuta.
Equipo de desarrollo
El ncleo del equipo de desarrollo de Arduino est formado por Massimo Banzi, David
Cuartielles, Tom Igoe, Gianluca Martino,David Mellis y Nicholas Zambetti.




Pduino


Patch Pduino.
Pduino nace de la fusin de los proyectos Pure Data y Arduino. Ambos proyectos de fuente abierta
permiten trabajar con interfaz grfica. Cargando el firmware de Pure Data (PD) a la placa Arduino
se puede acceder a ella mediante el lenguaje de programacin grfico.
Minibloq


Pantalla de Minibloq.


Combinacin de una computadora de bajo costo OLPC, el software Minibloq y una placa Arduino.
Minibloq es un entorno grfico de programacin que puede generar cdigo nativo de Arduino y
escribirlo directamente en la memoria flash de la placa. Tiene un modo que permite visualizar el
cdigo generado, el cual tambin puede ser copiado y pegado en el Arduino-IDE, para los usuarios
que intentan hacer el pasaje de una herramienta grfica a la programacin en sintaxis C/C++.
Minibloq es de uso libre y sus fuentes tambin estn disponibles gratuitamente. Una caracterstica
importante, es que puede correr tambin en la computadora porttil OLPC, mediante el
software Wine.
Physical Etoys


Proyecto de un semforo realizado con Arduino y Physical Etoys
Physical Etoys es una extensin libre y gratuita que permite que diversos dispositivos electrnicos
como Lego NXT, las placas Arduino, Sphero, Kinect, Joystick Wiimote, entre otros, puedan ser
programados fcilmente y que interacten entre s gracias a su sistema de bloques.
En el caso de Arduino, Physical Etoys ofrece dos modos de programacin:
1. El modo "directo", en el cual los programas se ejecutan en la computadora del usuario y las
rdenes se transmiten inmediatamente a travs del puerto serie.
2. El modo "compilado", en el cual los programas se traducen a C++ y se bajan a la placa,
para luego ejecutarse de manera independiente de la computadora.
El modo "directo" permite modificar los programas y ver los cambios producidos de manera
inmediata en el comportamiento del robot, lo cual facilita la programacin, sobre todo al usuario
inexperto. Asimismo, permite ver constantemente los valores de los sensores y utilizar el robot, por
ejemplo, como para adquirir datos.
El modo compilado, por su parte, elimina el retardo que introduce la comunicacin con la
computadora, lo cual lo hace preferible para el desarrollo de tareas autnomas, en las cuales la
velocidad de respuesta del robot debe ser ptima.

Potrebbero piacerti anche