Está en la página 1de 23

Microcontroladores

Tema: Arduino
Prof. Verena Mercado Polo
M.Sc. Ing. Electricista
Instrucción condicional IF en arduino
 La instrucción if en arduino, seguida de una condición, hará posible que
nuestro programa coja distintos caminos dependiendo de si se cumplen
o no.
 La estructura condicional tiene la siguiente sintaxis:
if (condición) {……..}
 Comenzamos con la instrucción if.
 Seguido, y entre paréntesis, escribiremos una condición. Si esta
condición se cumple, será validada y por tanto se ejecutará el código
que pongamos entre las llaves {…………}. En caso contrario, el
programa continuará en la siguiente instrucción sin ejecutar lo
encerrado entre llaves.
 Para escribir la condición a cumplir usaremos los operadores de
comparación dentro de los paréntesis, por ejemplo:
1 if (x>5) { digitalWrite(pinLed,HIGH); }
Condiciones y uso de operadores de
comparación
 La condición es una expresión lógica que pondremos entre paréntesis
después del comando if
 De que se cumpla o no dependerá que se ejecuten las instrucciones
que hayamos escrito entre las llaves.
 Para hacer esta condición, disponemos de los operadores.
x == 7 // si x es igual a 7
x != 7 // si x es distinto de 7
x<7 // si x es menor que 7
x>7 // si x es mayor que 7
x >= 7 // si x es mayor o igual a 7
x <= 7 // si x es menor o igual a 7
x < 3 || x >7 // si x es menor que 3 O mayor que 7
x <== 3 && r ==7 // si x es menor o igual a 3 Y r es igual a 7
Análisis del uso de operadores de
comparación
 Se usa el operador == (dos iguales) para comparar la variable
con el número. Si pusiésemos solo uno, r = 7, estaríamos asignando el
valor 7 a la variable r por lo que ahora pasaría a valer 7 (es una
asignación).
 || OR, se usa si cuando alguna de las dos condiciones se cumple (o las
2 a la vez),
 && AND, se usa solo cuando las dos condiciones se cumplen a la vez,
no en todas las combinaciones restantes
 Existen muchos más operadores lógicos. Un caso particular de la
condición es que solamente pongamos una variable entre los paréntesis
por ejemplo:
if (x) { .... ...... }
se ejecutará cuando x sea igual a 1
Se trata de encender y apagar 4 leds secuencialmente. Los leds deben estar
Ejemplo 2 conectados a los pines 5, 6, 7 y 8. Se deben encender y posteriormente
apagar los leds desde el pin 5 al 8, con un tiempo de duración de encendido
y apagado de 300 milisegundos. El encendido de los leds es mediantea a) un
pulsador b) un pulsador o un switch c) un pulsador y un switch
int tiempo=300; int tiempo=300;
int n; int n;
int pulsador=3; int pulsador=3;
int switc=9;
void setup() {
pinMode (pulsador,INPUT); void setup() {
for (n=5;n<=8;n++) { pinMode (pulsador,INPUT);
pinMode (n, OUTPUT); pinMode (switc,INPUT);
} for (n=5;n<9;n++) {
} pinMode (n, OUTPUT);
void loop() { }
if (digitalRead(pulsador)==HIGH) { }
for (n=5;n<9;n++) { void loop() {
digitalWrite (n, HIGH); if (digitalRead(pulsador)==HIGH||digitalRead(switc)==HIGH) {
delay (tiempo); for (n=5;n<=9;n++) {
digitalWrite (n, LOW); digitalWrite (n, HIGH);
delay (tiempo); delay (tiempo);
} digitalWrite (n, LOW);
} delay (tiempo);
} }
}
Estructura de control if – else
 Una variante a la estructura de control if en arduino, es cuando usamos
else. 1 if (condición) {.....
2 instrucciones si se cumple
3 }
4 else {......
5 instrucciones si no se cumple
6 }

 Anidamiento de condicionales if – else:


Cuando se requiere usar múltiples condiciones
Ejemplo 2 Se trata de encender y apagar 4 leds secuencialmente si se presiona un
switch sino se apagan. Los leds deben estar conectados a los pines 5, 6, 7 y
8. Se deben encender y posteriormente apagar los leds desde el pin 5 al 8,
con un tiempo de duración de encendido y apagado de 300 milisegundos.
int tiempo=300;
int n;
int switc=3;

void setup() {
pinMode (switc,INPUT);
for (n=5;n<=8;n++) {
pinMode (n, OUTPUT);
}}
void loop() {
if (digitalRead(switc)==HIGH) {
for (n=5;n<=8;n++) {
digitalWrite (n, HIGH);
}}
else {
for (n=5;n<=8;n++) {
digitalWrite (n, LOW);
}}}
Estructuras de control repetitivas o
iterativas en Arduino
 Arduino nos da la posibilidad al igual que muchos otros lenguajes de
programación utilizar varias opciones para trabajar con bucles como
son el while, do while y el for
 Trabajar con bucles implica que realizaremos una misma tarea varias
veces.
While
 Esta estructura de control repetitiva, agrupa un conjunto de instrucciones
que solo es ejecutada en caso que se cumpla una condición que es evaluada
en cada iteración.
 Es necesario declarar dentro de las instrucciones una variable que cambia
constantemente y es evaluada para seguir o finalizar el bucle.
Estructuras de control repetitivas o
iterativas en Arduino
Ejemplo While
Mientras el pulsador esté pulsado el LED parpadee, y de lo contrario esté
apagado.
Estructuras de control repetitivas o
iterativas en Arduino
Comparación del if y el While. ¿Diferencias?

void setup() { void setup() {


pinMode(5,INPUT); //Boton Pulsador pinMode(5,INPUT); //Boton Pulsador como
como entrada entrada
pinMode(3,OUTPUT); // LED pin pinMode(3,OUTPUT); // LED pin
} }
void loop() { void loop() {
while( digitalRead(5) == 1 ) if( digitalRead(5) == 1 ) //si se presiona el
//(while)mientras se presiona el botón botón
{ {
//parpadea //parpadea
digitalWrite(3,HIGH); digitalWrite(3,HIGH);
delay(1000); delay(1000);
digitalWrite(3,LOW); digitalWrite(3,LOW);
delay(1000); delay(1000);
} }
} }
¿Qué es una función? y ¿cómo
utilizarla?
 Es un segmento de código que está separado del código principal del
programa, que realiza una tarea específica y regresa a la zona del
programa donde fue llamada.
 Las funciones permiten estructurar los programas en segmentos de
código para realizar tareas individuales. El caso típico para crear una
función es cuando uno necesita realizar la misma acción varias veces en
un programa.
 Luego de declarar las funciones principales void setup y void loop
podemos agregar más funciones, pero la que se ejecutará será void
loop.
 La función debe ser declarada fuera de cualquier otra función, por lo
tanto puede ser antes o después de la función loop.
 Las funciones se declaran asociadas a un tipo de valor. Este valor será el
que devolverá la función, por ejemplo „int‟ se utilizará cuando la función
devuelva un dato numérico de tipo entero. Si la función no devuelve
ningún valor entonces se colocará delante la palabra “void”, que significa
“función vacía”
¿Qué es una función? y ¿cómo
utilizarla?
Estandarizar fragmentos de código en funciones tiene varias ventajas:
 Las funciones ayudan al programador a mantenerse organizado. A menudo
esto ayuda a conceptualizar el programa.
 Las funciones codifican una acción en un lugar, de modo que la función
sólo tiene que ser pensada y depurada una vez.
 Esto también reduce las posibilidades de errores en la modificación, si es
necesario cambiar el código.
 Las funciones hacen que todo el programa sea más pequeño y compacto
porque las secciones de código se reutilizan muchas veces.
 Facilitan la reutilización del código en otros programas al hacerlo modular,
y el uso de funciones a menudo hace que el código sea más legible.
¿Qué es una función? y ¿cómo
utilizarla?
La sintaxis más común para definir una función es:

Es el identificador por el
El tipo de valor que cual se puede llamar a la
arroja la función función Parámetros o argumentos
de la función

int multiplyFunction(int x, int y){

int result; Retorno de resultados

result = x * y;
return result;
}
¿Qué es una función? y ¿cómo
utilizarla?
Partes de una función.
 Tipo de dato: int, doublé, void. (Tipo void, si no regresa ningún valor).
 Nombre de la función: El nombre no puede llevar espacios y no puedes
utilizar palabras reservadas del lenguaje de programación.
 Parámetros: es una variable que envía la función loop, se utiliza para
realizar algún cálculo o tarea. Se dejan vacíos si no requiere ningún
parámetro.
 Código: El código que escribiremos debe estar entre las llaves y cada línea
se cierra con punto y coma.
 Retorno: “return” es el valor que regresa la función, debe ser del mismo
tipo del parámetro que se escribió.
 Para llamar a una función, simplemente:
nombreFunción(parámetros);
¿Qué es una función? y ¿cómo
utilizarla?
Podemos declarar la función de dos maneras diferentes:
1. La primera forma es escribir la parte de la función llamada prototipo de función
encima de la función de bucle, que consiste en:
 Función tipo de retorno
 Nombre de la función
 Tipo de argumento de la función, no es necesario escribir el nombre del
argumento
int sum_func (int x, int y){
int z = 0;
z = x+y;
return z; // retorna los valores
}
void setup () {

}
void loop () {
int result = 0;
result = sum_func (5,6); // se llama la función
}
¿Qué es una función? y ¿cómo
utilizarla?
2. La segunda parte, que se llama definición o declaración de función, debe
declararse debajo de la función de bucle, que consiste en:
 Función tipo de retorno
 Nombre de la función
 Tipo de argumento de la función, aquí debe añadir el nombre del argumento
 El cuerpo de la función (instrucciones dentro de la función que se ejecuta
cuando se llama la función)
void setup () {
}
void loop () {
int result = 0;
result = sum_func (5,6); // Se llama la función
}
int sum_func (int x, int y){
int z = 0;
z = x+y ;
return z; // retorna los valores
}
¿Qué es una función? y ¿cómo
utilizarla?
Llamar la función.
 Para llamar la función en el caso de funciones que regresan un valor. Está
compuesta por una variable que va almacenar el valor de retorno.

int funcion(int n, int m) {


n = n + 2;
m = m - 5;
return n+m;
}

int a = 10;
int b = 20;
Serial.println(funcion(a,b));
Serial.println(funcion(10,20));
Se trata de encender y apagar 4 leds secuencialmente. Los leds
Ejemplo 1 deben estar conectados a los pines 5, 6, 7 y 8. Se deben
encender y posteriormente apagar los leds desde el pin 5 al 8,
con un tiempo de duración de encendido y apagado de 300
milisegundos.
int tiempo=300;
int n;
int leds[]={5,6,7,8};
int pulsador=3;
int tiempo=300;
int n=0;
void setup() {
void setup() {
for (n=5;n<9;n++) {
for (n=0;n<4;n++) {
pinMode (n, OUTPUT);
pinMode (leds[n], OUTPUT);
pinMode (pulsador,INPUT);
}}
}
void secuencia() {
}
for (n=0;n<4;n++) {
void loop() {
digitalWrite (leds[n], HIGH);
if (digitalRead(pulsador)==HIGH) {
delay (tiempo);
for (n=5;n<9;n++) {
digitalWrite (leds[n], LOW);
digitalWrite (n, HIGH);
delay (tiempo);
delay (tiempo);
}}
digitalWrite (n, LOW);
void loop() {
delay (tiempo);
secuencia();
}
}
}
}
Ejemplo 2 Se trata de encender y apagar 4 leds secuencialmente al accionar un
pulsador. El pulsador debe estar conectado al pin 4, y los leds a los pines
5, 6, 7 y 8. Se deben encender y posteriormente apagar los leds desde el
pin 5 al 8, con un tiempo de duración de encendido y apagado de 200 ms.
int cadenaleds[]={5,6,7,8}; int leds[]={5,6,7,8};
int tiempo=200;
int pulsador=4; int pulsador=4;
int tiempo=200; int n=0;
int n=0; int valorpulsador=0;
void setup(){
void setup() { for(n=0;n<4;n++){
for(n=0;n<4;n++) { pinMode(leds[n],OUTPUT);
pinMode (cadenaleds[n],OUTPUT); }
pinMode(pulsador,INPUT);
} Serial.begin(9600);
pinMode (pulsador,INPUT); }
} void monitoriza(){
Serial.print("El valor del pulsador es ...");
void flash() { Serial.println(valorpulsador);
for (n=0;n<4;n++) { delay(1000);
digitalWrite (cadenaleds[n],HIGH); }
void secuencia(){
delay (tiempo); for(n=0;n<4;n++){
digitalWrite (cadenaleds[n],LOW); digitalWrite(leds[n],HIGH);
delay (tiempo); delay(tiempo);
digitalWrite(leds[n],LOW);
}} delay(tiempo);
void loop() { }}
if (digitalRead(pulsador)==HIGH) { void loop(){
valorpulsador=digitalRead(pulsador);
flash (); monitoriza();
}} if (valorpulsador==1){
secuencia();
}}
Ejercicio: Se trata del encendido de int leds[]={4,5,6,7};
int tiempo=500;
4 leds conectados en los pines 4, 5, 6 int n=0;
y 7, mediante dos pulsadores (2 y 3) int valorpulsador=0;
y un interruptor (8). Si se activa el void setup() {
pinMode(2,INPUT);
pulsador (2) o el interruptor (8) se pinMode(3,INPUT);
encienden los leds desde el 4 al 7. pinMode(8,INPUT);
Pero si se acciona el pulsador (3), for (n=0;n<4;n++) {
pinMode (leds[n], OUTPUT);
parpadea el Led (4), si se deja de }}
accionar el pulsador (3) continuará void secuencia() {
el encendido de los leds del 4 al 7. valorpulsador=digitalRead(2);
if (valorpulsador==1||digitalRead(8)==0){
for (n=0;n<4;n++) {
digitalWrite (leds[n], HIGH);
delay (tiempo);
digitalWrite (leds[n], LOW);
delay (tiempo);
}}}
void loop() {
secuencia();
while( digitalRead(3) == 1 ) {
digitalWrite(4,HIGH);
delay(1000);
digitalWrite(4,LOW);
delay(1000);
}}
Ejercicio 1

Se trata de cinco leds que se van encendiendo y apagando formando una


secuencia, el jugador debe dar al pulsador cuando el led intermedio se
enciende, si acierta funciona un zumbador y la velocidad de la secuencia
aumenta.
Los leds deben estar conectados de los pines 5 a 9 (inclusives), el zumbador al
pin 10, el pulsador al pin 11. El tiempo inicial entre encendido y encendido de
leds debe ser 200 ms, si se acierta se decrementa el tiempo en 20 ms, si el
tiempo entre encendidos llegase a 10 ms, se devuelve el tiempo a 200 ms.
Ejemplo de uso de las estructuras de
control en Arduino
 Este ejemplo consiste en incrementar el numero de leds encendidos
con un botón y disminuir el numero de leds encendidos con otro
botón. Materiales
Arduino UNO
5 resistencias de 330 Ω
resistencias de 10 k Ω
5 leds
2 pulsadores
Ejemplo de uso de las
estructuras de control
en Arduino

También podría gustarte