/*
*
* NOMBRE:[Ariel Alexis Lorda Barrabasqui]
*
* Entrgar con nombre archivo: usr_p1.ino
*
* 24/06/21 - Requerimientos
* 2) Implementar un Lector de Pulsador, que permita diferenciar entre
* a) Botón presiondo durante más de 500ms --> 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 DDRD=0XFF
#define Pulsador PORTB.0
#define CONFIGURAR_BOTON pinMode(8, INPUT)
#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
int estado = 1;
int cont = 0;
void setup() {
CONFIGURAR_BOTON;
CONFIGURAR_LED_TEST;
Serial.begin(9600);
}
void loop() {
LedTest();
SupervisaPulsador();
Efectos();
}
void SupervisaPulsador(void)
{
static unsigned long millis_ant_bot=0;
static unsigned long millis_act_bot=0;
if(!BOT_PRESIONADO) return; // NO se presionó el botón, vuelve al loop
millis_ant_bot = millis(); //Se presionó el botón
while(BOT_PRESIONADO){
LedTest();
Efectos();
}
millis_act_bot = millis();
if(millis_act_bot - millis_ant_bot > 500){
estado = 0 ;
return;
}
cont++;
if(millis_act_bot - millis_ant_bot < 500){
if(cont == 1){
estado = 1;
}else{
estado = 2;
cont = 0;
}
}
}
void LedTest(void)
{
static bool led_encendido=false;
static unsigned long millis_ant=0;
if(led_encendido && millis()-millis_ant>=TPO_LED_TEST_ON){
APAGAR_LED_TEST;
millis_ant=millis();
led_encendido= false;
}
if(!led_encendido && millis()-millis_ant>=TPO_LED_TEST_OFF){
ENCENDER_LED_TEST;
millis_ant=millis();
led_encendido= true;
}
}
void Efectos(void)
{
static unsigned long millis_ant_estado=0;
switch(estado){
case 0:
PUERTO_LEDS = 0X00;
return;
case 1:
if(millis()-millis_ant_estado <100)return;
millis_ant_estado = millis();
PUERTO_LEDS<<=1;
PUERTO_LEDS = PUERTO_LEDS | 1;
return;
case 2:
if(millis()-millis_ant_estado <100)return;
millis_ant_estado = millis();
PUERTO_LEDS>>=1;
PUERTO_LEDS=PUERTO_LEDS | 0;
return;
}
}