Arduino Programación
Arduino Programación
Arduino Programación
La “inteligencia de Arduino” se
expresa mediante su lenguaje de
programación
Escribir el programa
Definición
Variables
Definición int ledPin= 13;
de variables int inPin= 5;
int val= 0;
Setup()
Setup void setup() { Configuración
Configuración pinMode(ledPin, OUTPUT);
de E/S y otras pinMode(inPin, INPUT);
}
loop()
void loop(){ Programa
Loop val= digitalRead(inPin); a
ejecutar
if(val== HIGH) {
Parte principal
digitalWrite(ledPin, LOW);
del código que
else{
se ejecuta
digitalWrite(ledPin, LOW);
cíclicamente
delay(200);
(loop=bucle)
digitalWrite(ledPin, HIGH);
delay(200);}
}
José Manuel Ruiz Gutiérrez
Estructura del código de una aplicación (sketch)
Definición de Variables
Definición
Variables •Las variables contienen los valores, pudiendo
tener cualquier valor que queramos siempre
que no coincida con una palabra reservada pa
Setup() a el código
Configuración
Setup ()
Definición
Variables El método setup se utiliza para
configurar la tarjeta y se ejecuta una sola vez antes
que el resto del código sea ejecutado.
Setup()
Configuración
En este se definen los pins (terminales) que van a ser
utilizados como entradas o salidas así como la
loop()
configuración de las comunicaciones a través del puerto
Programa de la tarjeta y otras…
a
ejecutar
loop()
Definición
Variables
Este método es el principal de la aplicación y
en el se ejecutan una a una las instrucciones escritas
Setup()
Configuración haciéndolo de forma secuencial. Cuando se llega a la
última se vuelve a la primera
loop()
Programa
a
ejecutar
int delayVal()
{
int v; // crea una variable temporal 'v'
v= analogRead(pot); // lee el valor del potenciómetro
v /= 4; // convierte 0-1023 a 0-255
return v; // devuelve el valor final
}
; punto y coma
// linea de comentarios
// esto es un comentario
José Manuel Ruiz Gutiérrez
variables
declaración de variables
Todas las variables tienen que declararse antes de que puedan ser utilizadas.
Declarar una variable mediante es definir de su tipo como int(entera), long
(largo), flota (coma flotante), etc, asignándoles siempre un nombre, y,
opcionalmente, un valor inicial
int inputVariable = 0;
byte
Tipos de variables
Int
long
float
El formato de dato del tipo “punto flotante” “flota” se aplica a los números
con decimales. Los números de punto flotante tienen una mayor resolución
que los de 32 bits con un rango comprendido 3.4028235E +38 a +38-
3.4028235E.
arrays
Del mismo modo es posible declarar una matriz indicando el tipo de datos y el
tamaño y posteriormente, asignar valores a una posición especifica:
asignaciones compuestas
operadores de comparación
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
operadores lógicos
Logical AND:
if (x > 0 && x < 5) // cierto solo si las dos expresiones son ciertas
Logical OR:
if (x > 0 || y > 0) // cierto si una cualquiera de las expresiones es cierta
Logical NOT:
if (!x > 0) // cierto solo si la expresión es falsa
constantes
El lenguaje de programación de Arduino tiene unos valores
predeterminados, que son llamadas constantes. Se utilizan para
hacer los programas más fáciles de leer. Las constantes se
clasifican en grupos
cierto/falso (true/false)
Estas son constantes booleanas que definen los niveles HIGH (alto)
y LOW (bajo) cuando estos se refieren al estado de las salidas
digitales. FALSE se asocia con 0 (cero), mientras que TRUE se
asocia con 1, pero TRUE también puede ser cualquier otra cosa
excepto cero.
high/low
Estas constantes definen los niveles de salida altos o bajos y se utilizan para la
lectura o la escritura digital para las patillas. ALTO se define como en la
lógica de nivel 1, ON, ó 5 voltios, mientras que BAJO es lógica nivel 0,
OFF, o 0 voltios.
input/output
Estas constantes son utilizadas para definir , al comienzo del programa, el
modo de funcionamiento de los pines mediante la instrucción pinMode de tal
manera que el pin puede ser una entrada INPUT o una salida OUTPUT.
if (si)
if es un estamento que se utiliza para probar si una determinada
condición se ha alcanzado, como por ejemplo averiguar si un valor
analógico está por encima de un cierto número, y ejecutar una serie de
declaraciones (operaciones) que se escriben dentro de llaves, si es
verdad. Si es falso (la condición no se cumple) el programa salta y no
ejecuta las operaciones que están dentro de las llaves, El formato para if
es el siguiente:
if
if (unaVariable ?? valor)
{
ejecutaInstrucciones;
}
if… else viene a ser un estructura que se ejecuta en respuesta a la idea “si esto
no se cumple haz esto otro”. Por ejemplo, si se desea probar una entrada
digital, y hacer una cosa si la entrada fue alto o hacer otra cosa si la entrada es
baja, usted escribiría que de esta manera:
for
La declaración for se usa para repetir un bloque de sentencias encerradas
entre llaves de número determinado de veces. Cada vez que se ejecutan las
instrucciones del bucle se vuelve a testear la condición. La declaración for
tiene tres partes separadas por (;) vemos el ejemplo de su sintaxis:
for (inicialización; condición; expresión)
{
ejecutaInstrucciones;
}
UN EJEMPLO
for (int i=0; i<20; i++) // declara i, prueba que es menor que 20, incrementa i en 1
{
digitalWrite(13, HIGH); // envia un 1 al pin 13
delay(250); // espera !74 seg.
digitalWrite(13, LOW); // envia un 0 al pin 13
delay(250); // espera ¼ de seg.
}
José Manuel Ruiz Gutiérrez
ESTRUCTURAS DE PROGRAMACIÓN
while
Un bucle del tipo while es un bucle de ejecución continua mientras se cumpla la
expresión colocada entre paréntesis en la cabecera del bucle. La variable de
prueba tendrá que cambiar para salir del bucle. La situación podrá cambiar a
expensas de una expresión dentro el código del bucle o también por el cambio
de un valor en una entrada de un sensor
do… while
El bucle do while funciona de la misma manera que el bucle while, con la
salvedad de que la condición se prueba al final del bucle, por lo que el bucle
siempre se ejecutará al menos una vez.
do
{
Instrucciones;
} while (unaVariable ?? valor);
UN EJEMPLO
do El siguiente ejemplo asigna el
{ valor leido readSensors () a la
x = readSensors(); variable 'x', espera 50
milisegundos, y luego continua
delay(50);
mientras que el valor de la 'x' sea
} while (x < 100); inferior a 100
José Manuel Ruiz Gutiérrez
FUNCIONES
pinMode(pin, mode)
Nº PIN Modo
Hay también conveniente 20K Ω pullup resistencias construido en el Atmega chip que se
puede acceder desde el software. Estos built-in pullup resistencias se accede de la siguiente
manera:
Estos pines tienen a nivel interno una resistencia de 20 KΩ a las que se puede acceder
mediante software. Estas residencias se accede de la siguiente manera:
digitalRead(pin)
Lee el valor de un pin (definido como digital) dando un resultado HIHG
(alto) o LOW (bajo). El pin se puede especificar ya sea como una
variable o una constante (0-13).
valor = digitalRead(Pin); // hace que 'valor sea igual al estado leído en ´Pin´
digitalWrite(pin, value)
void setup()
{
pinMode(led, OUTPUT); // configura el led (pin13) como salida
pinMode(boton, INPUT); // configura botón (pin7) como entrada
}
void loop()
{
valor = digitalRead(boton); //lee el estado de la entrada botón
digitalWrite(led, valor); // envía a la salida ´led´el valor leído
}
José Manuel Ruiz Gutiérrez
FUNCIONES
analogRead(pin)
Lee el valor de un determinado pin definido como entrada analógica con una
resolución de 10 bits. Esta instrucción sólo funciona en los pines (0-5). El rango
de valor que podemos leer oscila de 0 a 1023
analogWrite(pin, value)
El valor que se puede enviar a estos pines de salida analógica puede darse
en forma de variable o constante, pero siempre con un margen de 0-255.
void loop()
{
valor = analogRead(analog); // lee el pin 0 y lo asocia a la variable valor
valor /= 4; / /divide valor entre 4 y lo reasigna a valor
analogWrite(led, value); // escribe en el pin10 valor
}
delay(ms)
min(x, y)
Calcula el mínimo de dos números para cualquier tipo de datos devolviendo el número
más pequeño.
valor = min(valor, 100); // asigna a valor el más pequeños de los dos números
especificados.
Si 'valor' es menor que 100 valor recogerá su propio valor si ´valor´ es mayor que 100
valor pasara a valer 100.
max(x, y)
valor = max(valor, 100); // asigna a valor el mayor de los dos números 'valor' y
100. De esta manera nos aseguramos de que valor será como mínimo 100.
randomSeed(seed)
random(max)
random(min, max)
void loop()
{
randomSeed(millis()); // genera una semilla para aleatorio a partir de la
función millis()
randNumber = random(255); // genera número aleatorio entre 0-255
analogWrite(led, randNumber); // envía a la salida Led de tipo PWM el valor
delay(500); // espera 0,5 seg.
}
Serial.begin(rate)
void setup()
{
Serial.begin(9600); // abre el Puerto serie
} // configura la velocidad a 9600 bps
Nota: Cuando se utiliza la comunicación serie los pins digital 0 (RX) y 1 (TX)
no puede utilizarse al mismo tiempo.
Serial.println(data)
Imprime los datos al puerto serie, seguido por un retorno de carro automático y
salto de línea. Este comando toma la misma forma que Serial.print (), pero es más
fácil para la lectura de los datos en el Monitor Serie del software.
Serial.println(data,data type)
Serial.println(data,data type)
… continuación
Parámetros
data type: determina el formato de salida de los valores numéricos (decimal, octal,
binario, etc...) DEC, OCT, BIN, HEX, BYTE , si no se pe nada vuelva ASCII
Serial.avaible()
int Serial.available()
Obtiene un número entero con el número de bytes (caracteres) diponibles para leer o
capturar desde el puerto serie. Equivaldría a la función serialAvailable().
Devuelve Un entero con el número de bytes disponibles para leer desde el buffer serie,
o 0 si no hay ninguno.
Si hay algún dato disponible, SerialAvailable() será mayor que 0. El buffer serie puede
almacenar como máximo 64 bytes.
Serial.avaible() Ejemplo
Lee o captura un byte (un carácter) desde el puerto serie. Equivaldría a la función
serialRead().
Devuelve :El siguiente byte (carácter) desde el puerto serie, o -1 si no hay ninguno.
Ejemplo
void setup()
{
Serial.begin(9600); // configura el puerto serie a 9600bps
}
void loop()
{
Serial.println(analogRead(0)); // envía valor analógico
delay(1000); // espera 1 segundo
}
salida digital
entrada digital
void loop()
{
if (digitalRead(inPin) == HIGH) // testea si la entrada esta activa HIGH
{
digitalWrite(ledPin, HIGH); // enciende el LED
delay(1000); // espera 1 segundo
digitalWrite(ledPin, LOW); // apaga el LED
}
}
José Manuel Ruiz Gutiérrez
Formas de conexionado de E/S
void setup()
{
pinMode(outPin, OUTPUT); // pin5 como salida
}
void loop()
{
for (int i=0; i<=5; i++) // repetir bucle 5 veces
{
digitalWrite(outPin, HIGH); // activa el MOSFET
delay(250); // espera 1/4 segundo
digitalWrite(outPin, LOW); // desactiva el MOSFET
delay(250); // espera 1/4 segundo
}
delay(1000); // espera 1 segundo
}
José Manuel Ruiz Gutiérrez
Formas de conexionado de E/S
void loop()
{
for (int i=0; i<=255; i++) // el valor de i asciende
{
analogWrite(ledPin, i); // se escribe el valor de I en el PIN de salida del LED
delay(100); // pauses for 100ms
}
for (int i=255; i>=0; i--) // el valor de I desciendei
{
analogWrite(ledPin, i); // se escribe el valor de ii
delay(100); // pasusa durante 100ms
}
}
José Manuel Ruiz Gutiérrez
Formas de conexionado de E/S
entrada con potenciómetro
(entrada analógica)
void setup()
{
pinMode(ledPin, OUTPUT); // declara ledPin como SALIDA
}
void loop()
{
digitalWrite(ledPin, HIGH); // pone ledPin en on
delay(analogRead(potPin)); // detiene la ejecución un tiempo “potPin”
digitalWrite(ledPin, LOW); // pone ledPin en off
delay(analogRead(potPin)); // detiene la ejecución un tiempo “potPin”
}