Advertisement
ganryu

arduino.ino

Oct 23rd, 2018
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * Hello World!
  3.  *
  4.  * Trabajo Práctico 3
  5.  * Ejercicio 2
  6.  *
  7.  * Prender la luz de un led a intervalos regulares sin usar
  8.  * la función `delay`.
  9.  *
  10.  * La idea principal es simple, llevar registro del tiempo
  11.  * que pasó desde la última vez que cambió el estado del led.
  12.  *
  13.  * Si ese tiempo supera un cierto intervalo, entonces el estado
  14.  * del led cambia.
  15.  *
  16.  * Para hacerlo más entretenido use los 3 leds de colores.
  17.  * - Cada 500 mseg pone en HIGH un led
  18.  * - Cada 500 mseg pone en LOW un led
  19.  *
  20.  * La secuencia comienza:
  21.  * 0.5 seg: HIGH  led verde
  22.  * 1.0 seg: LOW   led amarillo
  23.  * 1.5 seg: HIGH  led rojo
  24.  * 2.0 seg: LOW   led verde
  25.  * 2.5 seg: HIGH  led amarillo
  26.  * 3.0 seg: LOW   led rojo
  27.  * 3.5 seg: HIGH  led verde
  28.  *
  29.  * @author: Santana Santiago
  30.  * @date: 22/10/2018
  31.  */
  32. #include <Streaming.h>
  33.  
  34. const int green_led     = 25;
  35. const int yellow_led    = 27;
  36. const int red_led       = 29;
  37.  
  38. const long interval = 500;  // intervalo de tiempo entre cambios
  39.                             // de estado del led
  40.  
  41. unsigned long curr;
  42. unsigned long prev = 0;     // inicio contador del tiempo en 0
  43.  
  44. int led_value = LOW;
  45. int led = red_led;
  46.  
  47.  
  48. /**
  49.  * Retorna el siguiente valor de la secuencia
  50.  * ...verde, amarillo, rojo, verde, amarillo, rojo...
  51.  */
  52. int next_led(int led) {
  53.   switch(led) {
  54.     case green_led: return yellow_led;
  55.     case yellow_led: return red_led;
  56.     case red_led: return green_led;
  57.   }
  58. }
  59.  
  60.  
  61. /**
  62.  * Cambia el estado del led:
  63.  * - Si estado es HIGH retorna LOW
  64.  * - Si estado es LOW retorna HIGH
  65.  */
  66. int next_val(int led_value) {
  67.   return (led_value == LOW) ? HIGH : LOW;
  68. }
  69.  
  70.  
  71. void setup() {
  72.   Serial.begin(9600);
  73.  
  74.   pinMode(green_led, OUTPUT);
  75.   pinMode(yellow_led, OUTPUT);
  76.   pinMode(red_led, OUTPUT);
  77. }
  78.  
  79. void loop() {
  80.   curr = millis(); // tomo tiempo actual
  81.  
  82.   if(curr - prev > interval) {
  83.       led_value = next_val(led_value);
  84.       led = next_led(led);
  85.      
  86.       Serial << "millis: " << curr << endl;
  87.       Serial << "pin: " << led << " " << led_value << endl;
  88.      
  89.       digitalWrite(led, led_value);
  90.       prev = millis(); // reinicio contador de tiempo
  91.   }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement