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
/* * 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<
> 1; PUERTO_LEDS=PUERTO_LEDS & 1<
>=1; PUERTO_LEDS=PUERTO_LEDS | 1; } }
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)