Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
//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; }
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)