/*
*
* NOMBRE: Cordoba Gustavo
*
* 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 500 ms ---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)
* 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 LED_TEST PORTB.5
//PB0
#define CONFIGURAR_BOTON pinMode(8, INPUT)
#define BOT_PRESIONADO digitalRead(8)
//PB5
#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 efecto = 0; //variable global efecto
void setup() {
CONFIGURAR_BOTON;
CONFIGURAR_LED_TEST;
Serial.begin(9600);
}
void loop() {
LedTest();
SupervisaPulsador();
Efectos();
}
void SupervisaPulsador(void)
{
static unsigned long tpo_ant=0;
static unsigned long btn_accionado=0;
/* 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
*/
if(!BOT_PRESIONADO)return;
tpo_ant=millis();
btn_accionado=millis();
while(BOT_PRESIONADO)
{
Efectos();
}
if(tpo_ant-btn_accionado < 500)
efecto=1;//variable global
if(tpo_ant-btn_accionado >500)
efecto=0;// variable global
}
void LedTest(void)
{
static bool led_encendido=false;
static unsigned long millis_ant=0;
if(led_encendido && millis()-millis_ant > TPO_LED_TEST_ON)
{
millis_ant=millis();
APAGAR_LED_TEST;
led_encendido=false;
}
if (!led_encendido && millis()-millis_ant >= TPO_LED_TEST_OFF)
{
millis_ant=millis();
ENCENDER_LED_TEST;
led_encendido=true;
}
}
void Efectos(void)
{
static unsigned long tpo_ant=0;
if(efecto==1){
if(millis()-tpo_ant < 200)return;
tpo_ant=millis();
PUERTO_LEDS<<=1;
PUERTO_LEDS=PUERTO_LEDS | 1;
}
if(efecto==0){
if(millis()-tpo_ant < 200)return;
tpo_ant=millis();
PUERTO_LEDS>>=1;
PUERTO_LEDS=PUERTO_LEDS | 0;
}
}