X-Git-Url: http://git.piffa.net/web?a=blobdiff_plain;f=libraries%2Fcommon%2Fcommon.cpp;h=d9c0233b0027a3b30844d26137b56d1b4767cfb4;hb=84fc2d6e073c1b3ab8ef1fe62a80a52d2bce657e;hp=2de42e975d4bc038ec21bde50c87c5b76b3ba70d;hpb=fa958474bcffcf0cfc45a620e2fb2c611c44d18f;p=sketchbook_andrea diff --git a/libraries/common/common.cpp b/libraries/common/common.cpp index 2de42e9..d9c0233 100644 --- a/libraries/common/common.cpp +++ b/libraries/common/common.cpp @@ -87,6 +87,11 @@ Lampeggiatore::Lampeggiatore(int pin) // Una funzione facente parte di una classe prende il nome di "metodo" della stessa: +void Lampeggiatore::Invert() { + // Inverte il lampeggio + ledState = HIGH ; +} + void Lampeggiatore::Blink() { // Illumina il led a 500ms @@ -136,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); @@ -147,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(); }; } @@ -162,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(); - if (brightness == 0 || brightness == 255) { // Reverse direction - increment = -increment ; - }; - }; - analogWrite(ledPin, brightness); + brightness = 128 + 127 * cos(2 * PI / speed * millis()); + analogWrite(ledPin, brightness); }