Arduino se programa en el lenguaje de alto nivel C/C++ y generalmente tiene los siguiente componentes para elaborar el algoritmo:
Estructuras
Variables
Operadores matemáticos, lógicos y booleanos
Estructuras de control (Condicionales y ciclos)
Funciones
Son dos funciones principales que debe tener todo programa en Arduino:
setup(){
}
Código de configuración inicial, solo se ejecuta una vez.
loop(){
}
Esta función se ejecuta luego del setup(), se mantiene ejecutándose hasta que se des-energice o desconecte el Arduino.
Es un dato o conjunto de datos que cambia su valor con la ejecución del programa.
true o false
Boolean encendido = true;
Valor entero
int contar = valor;
Tomemos en cuenta que las placas Arduino UNO tienen un límite en cuanto a los valores que puede asumir una variable entera. Los valores se encuentran en un rango que va desde -32,768 a 32,767. Esto puede subsanarse en parte si la variable entera solo asumirá valores positivos, aumentando el rango de 0 a 65,535. Esto se consigue con
unsigned int contar = valor
Número con punto flotante, es decir, con valores decimales. El rango va desde -3.4028235E+38 hasta 3.4028235E+38.
float contar = valor;
Este es un tipo de variable de tamaño extendido para el almacenamiento numérico. Su rango va desde -2,147,483,648 hasta 2,147,483,647, por lo tanto, es recomendable solo para variables que puedan almacenar valores muy grandes. También admite unsigned
:
unsigned long contar = valor;
Almacena nada más ni nada menos que un ASCII.
char letra=’x’;
Si queremos almacenar una cadena de caracteres en lugar de solo uno, utilizamos este tipo de variable:
String palabras = "Hola a todos"
Usados generalmente dentro del condicional if
:
&& (y)
|| (o)
! (negación)
Por ejemplo:
if (a || b)
Usados generalmente dentro del condicional if
y sobre el for
y while
==
(igual a)
>
(mayor que)
!=
(diferente de)
<=
(menor o igual)
<
(menor que)
>=
(mayor o igual)
Por ejemplo:
if (a == b)
Se aplican al manejo de variables, condicionales y ciclos.
=
(asignar)
%
(módulo)
+
(suma)
-
(resta)
*
(multiplicación)
/
(división)
Por ejemplo:
int valor = valor +5
Son instrucciones que nos permiten tomar decisiones y hacer diversas repeticiones, de acuerdo a unos parámetros. Dentro de las más importantes podemos destacar:
if
switch/case
for
While
Ideales para tomar decisiones luego de evaluar las condiciones lógicas:
If
(Si):
if (entrada < 400)
{
// acción A
} else
{
// acción B
}
Switch/case
(Casos):
switch (var) {
case 1:
// acción A
break;
case 2:
// acción B
break;
default:
// acción C
}
Ideales para repetir lo que se encuentre dentro de ellos.
for
(por):
for( int a=0; a>10; a++ )
{
// acción a repetir
}
while
(mientras):
while ( var < 200) {
// acción a repetir
var++;
}
Una función es un conjunto de líneas de código que realizan una tarea específica y puede retornar un valor. Las funciones pueden tomar parámetros que modifiquen su funcionamiento. Son utilizadas para descomponer grandes problemas en tareas simples y para implementar operaciones que son comúnmente utilizadas durante un programa. De esta manera se puede reducir la cantidad de código.
Cuando una función es invocada se le pasa el control a la misma, una vez que ésta finalizó con su tarea el control es devuelto al punto desde el cual la función fue llamada.
Orientadas a revisar el estado y la configuración de las entradas y salidas digitales:
pinMode()
Permite configurar un pin:
pinMode(pin,modo)
pinMode (13,OUTPUT);
pinMode (a,INPUT);
digitalRead()
Leer un pin digital (0 ó 1):
digitalRead(pin)
int a = digitalRead (13);
digitalWrite()
Escribir un pin digital con 1 ó 0:
digitalWrite(pin,estado)
digitalWrite (13,HIGH);
digitalWrite (13,LOW);
Ideales para la lectura y escritura de valores análogos.
analogRead()
Leer un valor análogo 0 a 1023:
analogRead(pin)
int a = analogRead (A0);
analogWrite() —> PWM
Escribir un valor análogo 0 a 255:
analogWrite(pin,valor de PWM)
analogWrite (9, 134);
setup()
loop()
if
if…else
for
switch case
while
do… while
break
continue
return
goto
; (punto y coma)
{ } (llaves)
/ / (comentario de una sola línea)
/ * * / (comentario de varias líneas)
\(\#\) define
\(\#\) include
= (operador de asignación)
\(+\) (suma)
\(-\) (resta)
\(*\) (multiplicación)
/ (división)
% (módulo)
== (igual que)
! = (diferente de)
\(<\) (menor que)
\(>\) (mayor que)
\(<=\) (menor o igual a)
\(>=\) (mayor o igual a)
&& (y)
|| (o)
! (no)
\(*\) eliminar la referencia del operador
& operador de referencia
& (bit a bit AND)
^ (bit a bit XOR)
~ (bit a bit NOT)
<< (a la izquierda BitShift)
\(>>\) (a la derecha BitShift)
\(++\) (incremento)
\(--\) (decremento)
\(+=\) (compuesto adición)
\(-=\) (compuesto substracción)
\(*=\) (compuesto multiplicación)
\(/=\) (compuesto división)
\(\&=\) (compuesto bit a bit AND)
\(|=\) (compuesto bit a bit OR)
HIGH | LOW
INPUT | OUTPUT
true | false
Constantes enteras
Constantes flotante
void
boolean
char
byte
int
word
long
unsigned long
float
double
string - arreglo char
String - objeto
array
char()
byte()
int()
word()
long()
float()
pinMode()
digitalWrite()
digitalRead()
analogReference()
analogRead()
analogWrite() - PWM
tone()
noTone()
shiftOut()
shiftIn()
pulseIn()
millis()
micros()
delay()
delayMicroseconds()
min()
max()
abs()
constrain()
map()
pow()
sqrt()
sin()
cos()
tan()
randomSeed()
random()
lowByte()
highByte()
bitRead()
bitWrite()
bitSet()
bitClear()
bit()
attachInterrupt()
detachInterrupt()
interrupts()
noInterrupts()
Serial
begin()
end()
available()
read()
peek()
flush()
print()
println()
write()
EEPROM - leer y escribir
Ethernet - conectarse a Internet
Cristal líquido - control de LCD
SD - lectura y escritura de tarjetas SD
Servo - control de servomotores
SPI - comunicación por el bus SPI
Paso a paso - control de motores
Wire - enviar y recibir datos TWI/I2C