//Lucas Trento //CONTADOR DE FLANCOS DESCENDENTES //Ajustar la cantidad de destellos de un Blink multidestellos conectado a la salida, //de modo que coincida con la cantidad de flancos descendentes procesados en la entrada. //Los flancos deberán procesarse pasado cierto tiempo de ocurrido último. #define LED_TEST 13 #define CONFIGURAR_LED pinMode(LED_TEST, OUTPUT) #define ENCENDER_LED digitalWrite(LED_TEST, HIGH) #define APAGAR_LED digitalWrite(LED_TEST, LOW) //Salida #define PIN_SALIDA 12 #define CONFIGURAR_SALIDA pinMode(PIN_SALIDA, OUTPUT) #define ACTIVAR_SALIDA digitalWrite(PIN_SALIDA, HIGH) #define DESACTIVAR_SALIDA digitalWrite(PIN_SALIDA, LOW) //Entrada #define PIN_ENTRADA 7 #define CONFIGURAR_ENTRADA pinMode(PIN_ENTRADA, INPUT) #define ENTRADA_ACTIVADA (digitalRead(PIN_ENTRADA)==HIGH) #define MS_ESTADO 500 void setup() { CONFIGURAR_LED; CONFIGURAR_SALIDA; CONFIGURAR_ENTRADA; } void loop() { Led_Test(); Flancos(); delay(1); } void Flancos(void) { static bool entrada_activada_ant = 0; static bool led_encendido=0; static unsigned long millis_ant=0,millis_tiempo_flancos=0,millis_entrada_activada=0; static unsigned long tpo_espera=0,tpo_transcurrido=2000; static unsigned char pulsos_restantes=0; const unsigned int t_pulso=300, t_pausa=1000; static int cont_pulsos=1,cont=0; // Ajustar la cantidad de destellos de un Blink multidestellos conectado a la salida, //de modo que coincida con la cantidad de segundos transcurridos // entre un flanco ascendente y descendente en la entrada. /* if(cont) { if(millis() - millis_tiempo_flancos > tpo_transcurrido) { cont_pulsos=cont; cont=0; } }*/ /* if(cont) { if((millis()- millis_entrada_activada)%1000==0) cont++; }*/ if(ENTRADA_ACTIVADA) if(millis()- millis_entrada_activada > 1000) { cont++; millis_entrada_activada=millis(); } if(millis() - millis_ant > tpo_espera ) { millis_ant = millis(); { if(led_encendido) { pulsos_restantes--; if(pulsos_restantes) tpo_espera=t_pulso; else tpo_espera=t_pausa; } else { if(!pulsos_restantes) { pulsos_restantes=cont_pulsos; } tpo_espera=t_pulso; } led_encendido=!led_encendido; if(led_encendido) ACTIVAR_SALIDA; else DESACTIVAR_SALIDA; } } // flanco ascendente if(ENTRADA_ACTIVADA == entrada_activada_ant) return; entrada_activada_ant = ENTRADA_ACTIVADA; if(!ENTRADA_ACTIVADA) { cont_pulsos=cont; cont=0; return; } millis_entrada_activada=millis(); } void Led_Test(void) { static bool estado=0; static unsigned long millis_ant=0; if(millis()-millis_ant < MS_ESTADO) return; millis_ant=millis(); estado = !estado; if(estado) ENCENDER_LED; else APAGAR_LED; }