]> git.piffa.net Git - sketchbook_andrea/commitdiff
PWM con float / coseno
authoreaman <andrea@piffa.net>
Mon, 9 Jan 2017 01:08:34 +0000 (02:08 +0100)
committereaman <andrea@piffa.net>
Mon, 9 Jan 2017 01:08:34 +0000 (02:08 +0100)
.gitignore
libraries/common/common.cpp

index 88adc95f2b22a3caee8fd170ff50b82ce44b868a..eaa5cc6e6607e83a66f01ed090be64212ad9230a 100644 (file)
@@ -4,3 +4,4 @@ libraries/aero/
 *.swp
 *Makefile
 *tags
+libraries/LedControl/
index 889c749286853ff6b61b3bf018826138ed0f9433..d9c0233b0027a3b30844d26137b56d1b4767cfb4 100644 (file)
@@ -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);  
 }