X-Git-Url: http://git.piffa.net/web?a=blobdiff_plain;ds=sidebyside;f=libraries%2Fcommon%2Fcommon.cpp;h=d9c0233b0027a3b30844d26137b56d1b4767cfb4;hb=84fc2d6e073c1b3ab8ef1fe62a80a52d2bce657e;hp=b29cd95019044d917bae8c8699eb3c263a64fea5;hpb=936436ad4b665bc2504a74346e5820962ace5bd4;p=sketchbook_andrea diff --git a/libraries/common/common.cpp b/libraries/common/common.cpp index b29cd95..d9c0233 100644 --- a/libraries/common/common.cpp +++ b/libraries/common/common.cpp @@ -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); }