Sesion 4

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 5

Programación en Arduino

Una vez vistos los conceptos principales de programación con el lenguaje


Scratch, vamos a pasar al lenguaje propio de Arduino, que es el que vamos a utilizar al
final para los circuitos.
Un programa de Arduino se suele llamar sketch, y se guarda en un archivo con
la extensión .ino

Lo primero, la estructura de un programa Arduino, la podemos ver en 3 partes


(usando el IDE Arduino):
// variables declaration and libraries import

void setup() {
// put your setup code here, to run once:
}

void loop() {
// put your main code here, to run repeatedly:
}
- Zona de importación de librerías (se verá más adelante) y declaración de variables.
- Función setup() para inicializaciones.
- Función loop(), que será la función principal del programa de Arduino, el bucle
principal que se repetirá todo el tiempo.

Comentarios en el código:
Los comentarios es texto escrito sobre el código que sirve únicamente para
informar; no tienen efecto en la ejecución de instrucciones.
- Comentario simple: comienza con doble barra ‘//’, seguido del texto, en una
sola línea.
- Comentario de bloque: comienza con barra asterisco ‘/*’, y termina con
asterisco barra ‘*/’, y dentro va el texto, que puede tener varias líneas.

// comentario simple de 1 línea

/* comentario de bloque
de varias líneas
*/

Variables:
En el lenguaje de bloques tipo Scratch dentro de Tinkercad, cuando usamos una
variable con la instrucción set para darle un valor, y usándola con su nombre en la
forma redondeada, estamos haciendo varias cosas en el lenguaje de Arduino:
- declarar esa variable, que hasta ahora siempre ha sido un número entero (int):
int variable1;
- asignarle un valor inicial; es algo que se hace dentro de setup()
El operador de asignación es un único símbolo ‘=’:
variable1 = 3; // a la variable1 se le asigna el valor 3

Sesión 4 1
- leer ese valor para imprimirlo, compararlo, hacer una operación matemática…
En el lenguaje Arduino usamos directamente ese valor escribiendo el nombre de la
variable.
variable1

Monitor serie:
- Se inicializa dentro de setup() con la instrucción:
Serial.begin(9600);
- Se escribe dentro de loop() con las instrucciones:
Serial.println("texto"); // con salto de línea
Serial.print("texto"); // sin salto de línea
- Para escribir el valor de una variable, se usa directamente el nombre de esa
variable:
Serial.println(variable1);

Tiempo de espera:
La instrucción wait en código Scratch, que se le indican los segundos, se va a
traducir por la instrucción delay, indicando los milisegundos.
1 segundo = 1000 milisegundos.
delay(2000); // espera 2 segundos

Operadores matemáticos:
Vistos los operadores matemáticos con la instrucción verde con los bordes
redondeados, vamos a verlos en el código Arduino con varios ejemplos, usando una
variable:
int variable1;

variable1 = 1 + 1; // suma: se le asigna valor 2


variable1 = 5 - 2; // resta: se le asigna valor 3
variable1 = 2 * 3; // suma: se le asigna valor 2
variable1 = 5 / 2; // división: se le asigna valor 2
Al ser de tipo int, que es entero, no puede tener decimales, y se
redondea a 2.

Operadores lógicos:
El resultado de una operación lógica es true (verdadero) o false (falso).
- Comparación entre dos valores:
Menor que: 1 < 1 (resultado false)
Menor o igual que: 1 <= 1 (resultado true)
Mayor que: 3 > 2 (resultado true)
Mayor o igual que: 2 >= 5 (resultado false)
Igual (doble signo ‘=’): 5 == 5 (resultado true)
Distinto: 7 != 4 (resultado true)

Sesión 4 2
- Operadores lógicos:
AND &&
OR ||
NOT !
- Ejemplos:
(7 == 7) && (3 < 6)  true
(3 <= 7) && (8 >= 10) false
(1 != 1) && (7 < 1)  false
(7 != 7) || (5 > 5)  true
(8 <= 8) || (0 == 5) true
(3 > 9) || (2 < -1)  false
!(2 == 5)  true
!(7 >= 2)  false
Ejemplo complejo calculado por partes:
((3 < 2) || (8 == 8)) && ((-1 == -1) || !(3 > 8))
( false || true ) && ( true || true ) 
true && true 
true

Sentencias de decisión:
Los operadores lógicos se suelen usar casi siempre en sentencias de decisión if,
para comprobar si se cumple una condición, y además se suelen usar comprobando el
valor de una variable.
Un ejemplo para comprobar si variable1 está dentro de un rango de número.
Supongamos que ya la tenemos declarada y tiene un valor asignado; la comprobación
se haría:
if ((variable1 > 1) && (variable1 < 10)) {
Serial.println("la variable está entre 1 y 10");
delay(2000);
}
else {
Serial.println("la variable NO está entre 1 y 10");
delay(2000);
}
La parte else no es obligatoria, se pone cuando queremos hacer algo en caso
que no se cumpla la condición.
Para la parte if, se debe poner la condición entre paréntesis, usando paréntesis
interiores para las comparaciones, si fuese necesario.
En este ejemplo, se excluyen de la comprobación los propios límites de 1 y 10;
para incluirlos, habrá que utilizar los operadores ‘>=’ y ‘<=’ respectivamente.

Valor aleatorio:
La instrucción random nos va a asignar un valor aleatorio. Se puede usar con
argumentos numéricos (n y m son números):
- con 1 argumento: random(m), genera un número aleatorio entre 0 y m-1.
- con 2 argumentos: random(n, m), genera un número aleatorio entre n y m-1.

Sesión 4 3
Ejemplo:
random(3);  devuelve un número aleatorio entre 0 y 2 (incluidos).
random(1, 11); devuelve un número aleatorio entre 1 y 10 (incluidos).
Si se utiliza reiteradamente esta función, con mismos parámetros, sacará una
secuencia de números aleatorios, pero siempre la misma. Para cambiar esto, se usa
una semilla, con la función randomSeed(n), donde n es un número. Ejemplo:
random(1, 10); → saca la secuencia de números: 7, 9, 3, 8, 0, 2, 4… (cada
vez que se utiliza va sacando uno).
Si cambiamos la semilla con: randomSeed(6); nos sale una secuencia distinta:
randomSeed(6);
random(1, 10); → saca la secuencia de números: 2, 4, 0, 4, 9, 5, 4, 0…
(cada vez que se utiliza va sacando uno).

Bucle que se repite N veces:


Un bucle que se repite un número específico de veces lleva la sintaxis:
for (int i = 0; i < n; i++) { <instrucciones> }
Donde i va a ser una variable de tipo entero; puede llevar otro nombre, pero
siempre se inicializa en 0. n es el número de veces que se va a repetir el bucle. i++
indica que la variable i se va a ir incrementando en 1 unidad. Ejemplo:
for (int i = 0; i < 5, i++) {
Serial.println("texto para escribir 5 veces");
delay(2000);
}
También, se puede utilizar la variable i dentro del bucle, para llevar el control
del número de iteración. Por ejemplo, se puede imprimir su valor por el monitor serie
con su instrucción Serial.println(i);

Bucle que se repite mientras se cumpla una condición:


Un bucle que se repite mientras se cumpla una condición lleva la sintaxis:
while (<condición>) { <instrucciones> }
La condición será una operación lógica, que puede ir desde comparar el valor
de una variable hasta combinar varias con operadores lógicos. Ejemplo con una
variable:
int variable1 = 0;

while (variable1 < 5) {


Serial.println("la variable es todavía menor que 5");
delay(2000);
variable1 = variable1 + 1; // se incrementa la
// variable en 1 unidad
}
Es importante fijarse que la variable tiene que tener previamente algún valor,
para poder hacer la comparación en la condición. Se repetirá hasta que variable1 valga
5.

Sesión 4 4
Más operadores.
- Auto-incremento:
La operación variable1 = variable1 + 1; se puede escribir de las
siguientes maneras equivalentes también:
variable1 += 1;
o
variable1++;
El resultado será incrementar variable1 en 1 unidad.

- Auto-decremento:
Para decrementar la variable en 1 (variable1 = variable1 - 1;), se
utilizarían las instrucciones:
variable1 -= 1;
y
variable1--;

Se puede variar el número de unidades a incrementar/decrementar cambiando


el número fijo 1 por otro. En este caso sólo nos van a valer los operadores += y -=.
variable1 = variable1 + 7; es equivalente a variable1 += 7;
variable1 = variable1 - 2; es equivalente a variable1 -= 2;

Con estos últimos se pueden también utilizar los operadores para


multiplicación y división:
variable1 = variable1 * 3; es equivalente a variable1 *= 3;
variable1 = variable1 / 2; es equivalente a variable1 /= 2;

Sesión 4 5

También podría gustarte