miércoles, 30 de enero de 2019

Clase 5 Variables, operadores, comandos

Sentencias de control

Un programa es una sucesión de sentencias o de ordenes que son ejecutadas secuencialmente. tal como se ha realizado en la clase anterior; por ejemplo.

digitalWrite(ledPin, HIGH);

delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);

ahora vamos a trabajar con unas secuencias que nos permiten tomar decisiones, 
modificar el flujo del programa introduciendo ciclos y condicionales; estas se llaman sentencias de control.

if (): La sentencia if es un ejemplo de una estructura de control y su propósito es verificar si una determinada condición se ha cumplido o no, 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. 

if… else: Es una estructura que se ejecuta en respuesta a la idea “si esto no se cumple haz esto otro”. Por ejemplo, si se desea probar si se esta presionando un pulsador, y realizar una tarea si la entrada fue o esta en alto, o hacer una tarea distinta si la entrada es baja.

if (inputPin == HIGH) 

{ 
instruccionesA
 } 
else 
{
instruccionesB
}
else: puede ir precedido de otra condición de manera que se pueden establecer varias estructuras condicionales de tipo unas dentro de las otras (anidamiento) de forma que sean mutuamente excluyentes pudiéndose ejecutar a la vez. Es incluso posible tener un número ilimitado de estos condicionales. Recuerde sin embargo que sólo un conjunto de declaraciones se llevará a cabo dependiendo de la condición probada.

for(): Se usa para repetir un bloque de sentencias encerradas entre llaves un 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 ';' , veamos el ejemplo de su sintaxis:

for (inicialización; condición; expresión)
 {
Instrucciones;
 }

La inicialización de una variable local se produce una sola vez y la condición se testea cada vez que se termina la ejecución de las instrucciones dentro del bucle. Si la condición sigue cumpliéndose, las instrucciones del bucle se vuelven a ejecutar. Cuando la condición no se cumple, el bucle termina.

Vamos a escribir el siguiente proyecto, el estudiante debe interpretar las lineas o códigos y lo que sucede en las sentencias de control

La función millis() me devuelve el número de milisegundos desde que Arduino se ha reseteado, dado que millis devuelve un unsigned long puede tener un valor de hasta 4.294.967.295 que son 49 días, 17 horas, 2 minutos, 47 segundos y 292 milisegundos, por lo tanto al cabo de ese periodo el contador se resetea.

// Project 4 - semaforo interactivo
// asignación de pines

int rojocarro = 5;//pin 5 luz roja del semáforo vehicular

int amarcarro = 6;
int verdecarro = 7;
int rojopea = 8; //pin 8 luz roja peatonal
int verdepea = 9;
int pulsador = 10;// pin del pulsador
int Timecruce = 3000; // time para cruzar
unsigned long changeTime=0; // tiempo desde que se presionó el botón
void setup() 
{
pinMode(rojocarro, OUTPUT);
pinMode(amarcarro, OUTPUT);
pinMode(verdecarro, OUTPUT);
pinMode(rojopea, OUTPUT);
pinMode(verdepea, OUTPUT);
pinMode(pulsador, INPUT);// pulsador declarado como entrada


 digitalWrite(verdecarro, HIGH);//prendo el led verde vehicular
 digitalWrite(rojopea, HIGH);//prendo el led rojo peatonal
}

void loop()
 {
   int estado = digitalRead(pulsador);//declaro la variable estado y le         asigno lo que se lee en el pulsador
  /* estaremos verificando si se presiona el pulsador, y si han  pasado mas de 5 segundos desde que se presiono */
  if (estado == HIGH && (millis() - changeTime) > 5000
     {
      // llamamos la función para cambiar las luces
      changeLights();
     }
  }

void changeLights() 
{
 digitalWrite(verdecarro, LOW);// verde vehicular apagado
 digitalWrite(amarcarro, HIGH);
 delay(2000);
digitalWrite(amarcarro, LOW);
digitalWrite(rojocarro, HIGH);
delay(1000);
digitalWrite(rojopea, LOW);// apago el rojo peatonal que se encontraba prendido
digitalWrite(verdepea, HIGH);
delay(Timecruce); //espero el tiempo que se asigno al cruce

/* vamos a hacer que el led verde peatonal parpadee, declaramos una variable X para realizar el conteo y la iniciamos en cero, la condición sera que mientras x sea menor que 10, se ejecutara el programa, despues cada vez que se realice el bucle, x se incrementa en uno, para alcanzar el valor de 10 y que salga*/
    for (int x=0; x<10; x++
    {
     digitalWrite(verdepea, HIGH);
     delay(200);
     digitalWrite(verdepea, LOW);
     delay(200);
     }
// prendemos la luz peatonal roja
digitalWrite(rojopea, HIGH);
delay(500);
digitalWrite(amarcarro, HIGH);
digitalWrite(rojocarro, LOW);
delay(1000);
digitalWrite(verdecarro, HIGH);
digitalWrite(amarcarro, LOW);
// guardar o grabar el tiempo desde el ultimo cambio de luces 
changeTime = millis();
// depues se regresa al bucle principal
}

este ejemplo corresponde al proyecto 4, de Earthshine Design Arduino Starter Kit Manual, tomado de http://math.hws.edu/vaughn/cpsc/226/docs/askmanual.pdf





0 comentarios:

Publicar un comentario