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
/* * * 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; } }
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)