Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Dimas Zabala
- *
- */
- /*
- *
- * NOMBRE:
- *
- * Entrgar con nombre archivo: usr_p1.ino
- *
- * 24/06/21 - Requerimientos
- * 1) Implementar un LED TEST que tenga un destello de 50ms cada 1000ms (50ms ENCENDIDO / 950ms APAGADO)
- * 2) Implementar un Lector de Pulsador, que permita diferenciar entre
- * a) Botón presiondo durante más de 500ms segundo --> APAGA EL MODULO DE EFECTOS
- * b) 1 Toque corto de botón (menos de 500ms) habilita efecto a / invierte el sentido
- * c) 2 Toques cortos de botón (un tiempo inferior a 500ms entre toques) HABILITA EFECTO B / Invierte el sentido
- * 3) Módulo de Leds con múltiples efectos
- * Efecto a: Un punto que se va corriendo
- * b: Una barra de leds que se va completando
- *
- * PORTD --> 8 LEDs
- * PORTB.0 --> Pulsador
- * PORTB.5 --> LED_TEST
- / */
- #define PUERTO_LEDS PORTD
- #define CONFIGURAR_LEDS 0xFF //define como output pines 1-7
- #define CONFIGURAR_BOTON pinMode(8, INPUT) //DDRB&=~1
- #define BOT_PRESIONADO digitalRead(8)
- #define CONFIGURAR_LED_TEST pinMode(13, OUTPUT)
- #define ENCENDER_LED_TEST digitalWrite(13,HIGH)
- #define APAGAR_LED_TEST digitalWrite(13,LOW)
- #define TPO_LED_TEST_ON 50
- #define TPO_LED_TEST_OFF 950
- void setup() {
- Serial.begin(9600);
- CONFIGURAR_LED_TEST;
- CONFIGURAR_BOTON;
- PUERTO_LEDS;
- CONFIGURAR_LEDS;
- }
- bool moduloEfectos=true, efectoA=false, efectoB=false;
- void loop() {
- LedTest();
- SupervisaPulsador();
- Efectos();
- }
- void SupervisaPulsador(void)
- {
- /* Eventos
- * Se presionó el botón
- * Se superaron los 500ms con el botón presionado
- * Se liberó el botón antes de los 500ms
- * Se liberó el botón después de los 500ms
- * Pasaron más de 500ms desde que se liberó el botón
- */
- static bool bot_presionado_ant=0;
- static unsigned long millis_ant=0,milli=0,millis_pas=0;
- static int pulsos=0;
- if(BOT_PRESIONADO==bot_presionado_ant) return;
- bot_presionado_ant=BOT_PRESIONADO;
- if(!BOT_PRESIONADO) return;
- milli=millis();
- while(BOT_PRESIONADO) {
- millis_ant=millis();
- }
- millis_pas = millis_ant - milli;
- pulsos++;
- if(millis_ant>500 )moduloEfectos=false;
- if(millis_ant<500 && pulsos<2){efectoA=true;pulsos=0;}
- if(millis_ant<500 && pulsos>=2){efectoB=true;pulsos=0;}
- }
- void LedTest(void)
- {
- static bool led_encendido=false;
- static unsigned long millis_ant=0;
- if(led_encendido==false){
- if(millis()-millis_ant<950) return;
- millis_ant=millis();
- led_encendido=!led_encendido;
- }
- else{
- if(millis()-millis_ant<50) return;
- millis_ant=millis();
- led_encendido=!led_encendido;
- }
- if(led_encendido) ENCENDER_LED_TEST;
- else APAGAR_LED_TEST;
- }
- void Efectos(void)
- {
- if(moduloEfectos)return;
- if(efectoA)efectoPunto();
- if(efectoB)efectoBarra();
- }
- void efectoPunto(){
- int i=0;
- static int irIzquierda=0;
- static unsigned int t_inicio1=0;
- if(millis() - t_inicio1 < 500)return;
- t_inicio1 = millis();
- if(PUERTO_LEDS & (1<<7))irIzquierda=1;
- if(irIzquierda==0){
- PUERTO_LEDS << 1;
- PUERTO_LEDS=PUERTO_LEDS & 1<<i;
- }
- else{
- PUERTO_LEDS >> 1;
- PUERTO_LEDS=PUERTO_LEDS & 1<<i;
- }
- }
- void efectoBarra(){
- static int irIzquierda=0;
- static unsigned int t_inicio1=0;
- if(millis() - t_inicio1 < 500)return;
- t_inicio1 = millis();
- if(PUERTO_LEDS & (1<<7))irIzquierda=1;
- if(PUERTO_LEDS & (1<<0))irIzquierda=0;
- if(irIzquierda==0){
- PUERTO_LEDS<<=1;
- PUERTO_LEDS=PUERTO_LEDS | 1;
- }
- else{
- PUERTO_LEDS>>=1;
- PUERTO_LEDS=PUERTO_LEDS | 1;
- }
- }
Add Comment
Please, Sign In to add comment