]> git.piffa.net Git - sketchbook_andrea/blobdiff - libraries/common/common.cpp
rtos
[sketchbook_andrea] / libraries / common / common.cpp
index b29cd95019044d917bae8c8699eb3c263a64fea5..d9c0233b0027a3b30844d26137b56d1b4767cfb4 100644 (file)
@@ -141,6 +141,9 @@ void Lampeggiatore::Blink(long up, long down) {
 // Pwm
 // Constructor
 Pwm::Pwm(int pin)
+    // Gestione del PWM utilizzando millis
+    // per non bloccare il processore con delay
+    // Warning: serialWrite puo' interferire con i tempi.
 {
     ledPin = pin;
     pinMode(ledPin, OUTPUT);
@@ -152,15 +155,13 @@ 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();
-        Serial.println(brightness);
     };
 }
 
@@ -168,28 +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();
-        Serial.println(brightness);
     };
 }
 
 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();
-        Serial.println(brightness);
-        analogWrite(ledPin, brightness);
-        if (brightness == 0 || brightness == 255) { // Reverse direction
-            increment = -increment ;
-        };
-    };
+    brightness = 128 + 127 * cos(2 * PI / speed * millis());
+    analogWrite(ledPin, brightness);  
 }