Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Hello World!
- *
- * Trabajo Práctico 3
- * Ejercicio 2
- *
- * Prender la luz de un led a intervalos regulares sin usar
- * la función `delay`.
- *
- * La idea principal es simple, llevar registro del tiempo
- * que pasó desde la última vez que cambió el estado del led.
- *
- * Si ese tiempo supera un cierto intervalo, entonces el estado
- * del led cambia.
- *
- * Para hacerlo más entretenido use los 3 leds de colores.
- * - Cada 500 mseg pone en HIGH un led
- * - Cada 500 mseg pone en LOW un led
- *
- * La secuencia comienza:
- * 0.5 seg: HIGH led verde
- * 1.0 seg: LOW led amarillo
- * 1.5 seg: HIGH led rojo
- * 2.0 seg: LOW led verde
- * 2.5 seg: HIGH led amarillo
- * 3.0 seg: LOW led rojo
- * 3.5 seg: HIGH led verde
- *
- * @author: Santana Santiago
- * @date: 22/10/2018
- */
- #include <Streaming.h>
- const int green_led = 25;
- const int yellow_led = 27;
- const int red_led = 29;
- const long interval = 500; // intervalo de tiempo entre cambios
- // de estado del led
- unsigned long curr;
- unsigned long prev = 0; // inicio contador del tiempo en 0
- int led_value = LOW;
- int led = red_led;
- /**
- * Retorna el siguiente valor de la secuencia
- * ...verde, amarillo, rojo, verde, amarillo, rojo...
- */
- int next_led(int led) {
- switch(led) {
- case green_led: return yellow_led;
- case yellow_led: return red_led;
- case red_led: return green_led;
- }
- }
- /**
- * Cambia el estado del led:
- * - Si estado es HIGH retorna LOW
- * - Si estado es LOW retorna HIGH
- */
- int next_val(int led_value) {
- return (led_value == LOW) ? HIGH : LOW;
- }
- void setup() {
- Serial.begin(9600);
- pinMode(green_led, OUTPUT);
- pinMode(yellow_led, OUTPUT);
- pinMode(red_led, OUTPUT);
- }
- void loop() {
- curr = millis(); // tomo tiempo actual
- if(curr - prev > interval) {
- led_value = next_val(led_value);
- led = next_led(led);
- Serial << "millis: " << curr << endl;
- Serial << "pin: " << led << " " << led_value << endl;
- digitalWrite(led, led_value);
- prev = millis(); // reinicio contador de tiempo
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement