0% encontró este documento útil (0 votos)
57 vistas18 páginas

Clase 5. Semana 5

Descargar como pdf o txt
Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1/ 18

Microcontroladores

Prof. Verena Mercado Polo


M.Sc. Ing. Electricista

Clase 5. Semana 5
02-09-2020
Ejemplo 1
int tiempo=300;
void setup() {
Se trata de encender y apagar 4 leds pinMode(5,OUTPUT);
secuencialmente. Se deben encender y pinMode(6,OUTPUT);
posteriormente apagar los leds desde el pin 5 pinMode(7,OUTPUT);
al 8, con un tiempo de duración de encendido pinMode(8,OUTPUT);
y apagado de 300 milisegundos. }
void loop() {
digitalWrite(5,HIGH);
delay(tiempo);
digitalWrite(5,LOW);
delay(tiempo);
digitalWrite(6,HIGH);
delay(tiempo);
digitalWrite(6,LOW);
delay(tiempo);
digitalWrite(7,HIGH);
delay(tiempo);
digitalWrite(7,LOW);
delay(tiempo);
digitalWrite(8,HIGH);
delay(tiempo);
digitalWrite(8,LOW);
delay(tiempo);
}
for en Arduino
 Se usa para hacer repetición de una parte de nuestro código en el
programa, una cantidad de veces determinada, esto se le suele conocer
también con el nombre de bucle.
 La sintaxis de la estructura for en arduino es la siguiente:
for (índice; condición; incremento)
{……….
……….}
Para ello se necesitan tres cosas:
 El índice, es una variable que irá almacenando el número de repeticiones
del bucle.
 Una condición que cuando se cumpla, haga terminar el bucle y que el
resto del programa siga ejecutándose a continuación.
 El incremento que modificará el índice en cada repetición del bucle.
Ejemplo: uso del bucle for con un
Arduino
 El ejemplo consiste en conectar 5 led a las salidas de un arduino e ir
encendiendo y apagándolos consecutivamente, creando un efecto
desplazamiento de luz a través de los mismos.
 Se conectaran 5 leds a los pines del 3 al 7
 El código a ejecutar será el siguiente:
Análisis del programa del Ejemplo
 La declaración de la variable también se puede hacer en el bucle for
(int indice=3; ….
 La variable es del tipo entero por eso lleva delante int, este tipo de
variable puede almacenar un numero de valor entre -32769 y 32767.
 En setup() se configuran los pines de arduino conectados a los led
como salidas. Pero también se podría usar un bucle para configurar
las salidas
 La estructura for en arduino se compone de una variable (en
nuestro caso índice), seguido de una condición a cumplir, (en
nuestro caso que índice sea menor o igual a 7) y el incremento (con
++ incrementamos índice en uno, seria equivalente a
índice=indice+1).
 Mientras se cumpla la condición, se ejecutarán las líneas de código
que hay entre las llaves, e incrementará el índice en 1 como lo
hemos programado.
Ejemplo 2 Se trata de encender y apagar 4 leds secuencialmente.
Se deben encender y posteriormente apagar los leds
desde el pin 5 al 8, con un tiempo de duración de
int tiempo=300; encendido y apagado de 300 milisegundos.

void setup() {
pinMode(5,OUTPUT);
pinMode(6,OUTPUT); int tiempo=300;
pinMode(7,OUTPUT); int n;
pinMode(8,OUTPUT);
}
void loop() {
void setup() {
digitalWrite(5,HIGH); for (n=5;n<9;n++) {
delay(tiempo); pinMode (n, OUTPUT);
digitalWrite(5,LOW); }
delay(tiempo); }
digitalWrite(6,HIGH); void loop() {
delay(tiempo);
for (n=5;n<9;n++) {
digitalWrite(6,LOW);
delay(tiempo);
digitalWrite (n, HIGH);
digitalWrite(7,HIGH); delay (tiempo);
delay(tiempo); digitalWrite (n, LOW);
digitalWrite(7,LOW); delay (tiempo);
delay(tiempo); }
digitalWrite(8,HIGH); }
delay(tiempo);
digitalWrite(8,LOW);
delay(tiempo);
}
Se trata de encender y apagar 7 leds secuencialmente. Los leds deben
Ejemplo 3 estar conectados a los pines 5, 6, 7, 8, 9, 10 y 11.
int n; int leds[]={5,6,7,8,9,10,11};
int tiempo=50; int n=0;
int tiempo=50;
void setup() {
for (n=5;n<12;n++) { void setup() {
pinMode(n,OUTPUT); for (n=0;n<7;n++) {
} pinMode(leds[n],OUTPUT);
} }
}
void loop() { void loop() {
for (n=5;n<12;n++) { for (n=0;n<7;n++) {
digitalWrite (n,HIGH); digitalWrite (leds[n],HIGH);
delay(tiempo); delay(tiempo);
digitalWrite (n,LOW); digitalWrite (leds[n],LOW);
delay(tiempo); delay(tiempo);
} }
for (n=11;n>=5;n--) { for (n=6;n>=0;n--) {
digitalWrite (n,HIGH); digitalWrite (leds[n],HIGH);
delay(tiempo); delay(tiempo);
digitalWrite (n,LOW); digitalWrite (leds[n],LOW);
delay(tiempo); delay(tiempo);
} }
} }
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
Ejemplo 4 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 pulsador;
int tiempo=200;
int n=0;

void setup() {
for(n=0;n<4;n++) {
pinMode (cadenaleds[n],OUTPUT);
}
pinMode (4,INPUT);
}

void loop() {
pulsador=digitalRead(4);
if (pulsador==HIGH) {
for (n=0;n<4;n++) {
digitalWrite (cadenaleds[n],HIGH);
delay (tiempo);
digitalWrite (cadenaleds[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
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 de 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é presionado el LED parpadee, y de lo contrario
esté apagado.
void setup() {
pinMode(5,INPUT); //Boton Pulsador como entrada
pinMode(3,OUTPUT); // LED pin
}
void loop() {
while( digitalRead(5) == 1 ) //(while)mientras se presiona el botón
{
//parpadeo
digitalWrite(3,HIGH);
delay(1000);
digitalWrite(3,LOW);
delay(1000);
}
}
Estructuras de control repetitivas o
iterativas en Arduino
do while
 Esta estructura de control repetitiva trabaja parecido que el while con la
diferencia que no se hace la comparación al principio sino al final de la
estructura de control repetitiva.
 El bucle do While es parecido a While, ya que está a la espera del evento,
pero tiene ciertas diferencias: mientras que el bucle While se ejecuta
mientras se cumpla la condición, el bucle do While se ejecuta al menos una
vez y después comprueba si la condición se cumple.
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);
} }
} }
int contador=0;
Ejercicio: Se trata de incrementar byte leds[]={5,6,7,8,9};
el numero de leds encendidos con int n=0;
un botón y disminuir el numero de void setup() {
leds encendidos con otro botón. pinMode(10,INPUT);
pinMode(11,INPUT);
Usar 5 leds for (n=0;n<=5;n++) {
pinMode (leds[n], OUTPUT);
}
}
void loop() {
if(digitalRead(10)==HIGH){
contador++;
if(contador>5)contador=0;
for (byte j=0;j<5; j++){
digitalWrite(leds[j],LOW);
}
for(byte i=0;i<contador;i++){
digitalWrite(leds[i],HIGH);
}
delay(200);
}
if(digitalRead(11)==HIGH){
contador--;
if(contador<=0)contador=0;
for (byte j=0;j<5; j++){
digitalWrite(leds[j],LOW);
}
for(byte i=0;i<contador;i++){
digitalWrite(leds[i],HIGH);
}
delay(200);
}
Ejercicios Propuestos
1. Diseñe en arduino un programa para controlar un semáforo con la
secuencia rojo, amarillo, verde. En ningún momento deben estar las 3 luces
apagadas, para no generar confusión. El led verde se conecta al pin 2, el led
amarillo al pin 3 y el led rojo al pin 4. Se tiene un botón pulsador para
arrancar el encendido.
2. Se trata de un cruce de semáforos controlado por arduino, para ello
utilizaremos en el primer semáforo los pines 3 (led rojo), 4 (led amarillo), 5
(led verde), en el segundo semáforo utilizaremos los pines 6 (led rojo), 7
(led amarillo) y 8 (led verde). La secuencia de funcionamiento debe ser :
 rojo 1 – verde 2 durante 3 segundos,
 rojo 1 – amarillo 2 durante 500 ms,
 verde 1 – rojo 2 durante 3 segundos,
 amarillo 1 - , rojo 2 durante 500 ms.

También podría gustarte