From 0a29fddb5e1ffdf64f5a06e84287895b402914ad Mon Sep 17 00:00:00 2001 From: eaman Date: Mon, 9 Jan 2017 02:08:34 +0100 Subject: [PATCH] PWM con float / coseno --- .gitignore | 1 + libraries/common/common.cpp | 27 +++++++++------------------ 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index 88adc95..eaa5cc6 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ libraries/aero/ *.swp *Makefile *tags +libraries/LedControl/ diff --git a/libraries/common/common.cpp b/libraries/common/common.cpp index 889c749..d9c0233 100644 --- a/libraries/common/common.cpp +++ b/libraries/common/common.cpp @@ -155,13 +155,12 @@ Pwm::Pwm(int pin) void Pwm::Up(long speed) { // Aumenta progressivamente la luminosita' usanndo millis() // quindi senza bloccare il processore + // Viene usato un float, in alternativa un coseno - analogWrite(ledPin, brightness); // La funziona analogWrite utilizza il PWM - // a 8 bit integrato nel MCU: simula un serie di valori intermedi - // nell'intervallo discreto con minimo 0 (spento) e massimo 255 (acceso). + if (millis() != previousMillis) { // si potrebbe togliere + brightness = 255.0 /(float)speed * millis() ; + analogWrite(ledPin, brightness); - if ((millis() - previousMillis) > speed / 256) { - brightness++; // Incrementiamo la luminosita' previousMillis = millis(); }; } @@ -170,26 +169,18 @@ void Pwm::Down(long speed ) { // Riduce progressivamente la luminosita' usanndo millis() // quindi senza bloccare il processore - analogWrite(ledPin, brightness); // La funziona analogWrite utilizza il PWM - // a 8 bit integrato nel MCU: simula un serie di valori intermedi - // nell'intervallo discreto con minimo 0 (spento) e massimo 255 (acceso). + if (millis() != previousMillis) { + brightness = 255 - 255.0 /(float)speed * millis() ; + analogWrite(ledPin, brightness); - if ((millis() - previousMillis) > speed / 256) { - brightness--; // Incrementiamo la luminosita' previousMillis = millis(); }; } void Pwm::UD(long speed ) { // Aumenta e riduce in sequenza la luminosita' usanndo millis() - if ((millis() - previousMillis) > speed / 512) { - brightness = brightness + increment; // Incrementiamo la luminosita' - previousMillis = millis(); - analogWrite(ledPin, brightness); - if (brightness == 0 || brightness == 255) { // Reverse direction - increment = -increment ; - }; - }; + brightness = 128 + 127 * cos(2 * PI / speed * millis()); + analogWrite(ledPin, brightness); } -- 2.39.2