Un problema muy sencillo de plantear pero quizás algo complejo de ejecutar, el que un led se encienda o apague gradualmente por PWM tras mantener pulsado un pulsador durante 3 segundos de tiempo. En esta versión del código durante la pulsación no se ejecutan otras tareas, se podría dar también esa posibilidad si se quisiera.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
/** * https://giltesa.com/?p=17930 */ #define pBTN 2 #define pLED 13 #define tPOWER 3000 #define tPOWERDELAY 10 unsigned long tButtonStart; unsigned long tButtonEnd; void setup() { pinMode(pBTN, INPUT); pinMode(pLED, OUTPUT); } void loop() { if( digitalRead(pBTN) ) { tButtonStart = tButtonEnd = millis(); while( digitalRead(pBTN) && tButtonEnd - tButtonStart < tPOWER ){ tButtonEnd = millis(); } if( tButtonEnd - tButtonStart >= tPOWER ) setLedPWM( !digitalRead(pLED) ); } } void setLedPWM( boolean newLedStatus ) { if( newLedStatus ) { for( int i=0 ; i <= 255 ; i++ ) { analogWrite(pLED, i); delay(tPOWERDELAY); } } else { for( int i=255 ; i >= 0 ; i-- ) { analogWrite(pLED, i); delay(tPOWERDELAY); } } } |
Nota: El Arduino Mega permite PWM en el led 13, otros Arduinos no…