From 0c04d0b910d1566ae3fa4c20f8cb6e2c1c0cbb79 Mon Sep 17 00:00:00 2001 From: eaman Date: Wed, 1 Feb 2017 04:17:05 +0100 Subject: [PATCH] Common: aggiunto shift temporale per pwm e blink --- libraries/common/common.cpp | 43 ++++++++++++++--------- libraries/common/common.h | 25 ++++++++----- libraries/common/examples/blink/blink.ino | 8 +++-- libraries/common/examples/pwm/pwm.ino | 20 ++++++----- 4 files changed, 60 insertions(+), 36 deletions(-) diff --git a/libraries/common/common.cpp b/libraries/common/common.cpp index 3598969..01f07cf 100644 --- a/libraries/common/common.cpp +++ b/libraries/common/common.cpp @@ -1,6 +1,10 @@ /* Common * * Oggetti di uso comune + * Autore: Andrea Manni + * + * Link: http://git.andreamanni.com/ + * Licenza: GPLv3 */ #include "Arduino.h" @@ -107,7 +111,7 @@ void Lampeggiatore::Invert() { void Lampeggiatore::Blink() { // Illumina il led a 500ms - if(millis() - previousMillis > interval) { + if(millis() + shift - previousMillis > interval) { // save the last time you blinked the LED previousMillis = millis(); @@ -118,10 +122,11 @@ void Lampeggiatore::Blink() { digitalWrite(ledPin, ledState); }; -void Lampeggiatore::Blink(long time) { +void Lampeggiatore::Blink(long time, long drift ) { // Illumina il led secondo un intervallo passato come argomento - if(millis() - previousMillis > time) { + shift = drift; + if(millis() + shift - previousMillis > time) { // save the last time you blinked the LED previousMillis = millis(); @@ -132,15 +137,16 @@ void Lampeggiatore::Blink(long time) { digitalWrite(ledPin, ledState); }; -void Lampeggiatore::Blink(long up, long down) { +void Lampeggiatore::Blink(long up, long down, long drift ) { // Illumina il ledB precisando ontime e downtime - if((ledState == HIGH)&& (millis() - previousMillis > up)) { + shift = drift; + if((ledState == HIGH)&& (millis() + shift - previousMillis > up)) { // save the last time you blinked the LED previousMillis = millis(); ledState = LOW ; } - else if((ledState == LOW)&& (millis() - previousMillis > down)) { + else if((ledState == LOW)&& (millis() + shift - previousMillis > down)) { previousMillis = millis(); ledState = HIGH ; } @@ -182,59 +188,64 @@ Pwm::Pwm(int pin) increment = 1; }; -void Pwm::Up(long speed) { +void Pwm::Up(long speed, long drift) { // Aumenta linearmente la luminosita' usanndo millis() // quindi senza bloccare il processore // Viene usato un float, in alternativa un coseno if (millis() != previousMillis) { // si potrebbe togliere - brightness = 255.0 /(float)speed * millis() ; + shift = drift; + brightness = 255.0 /(float)speed * (millis() + shift); analogWrite(ledPin, brightness); previousMillis = millis(); }; } -void Pwm::lUp(long speed) { +void Pwm::lUp(long speed, long drift) { // Aumenta usanndo millis() con correzione luminosita' LED // quindi senza bloccare il processore // Viene usato un float, in alternativa un coseno if (millis() != previousMillis) { // si potrebbe togliere - brightness = 255.0 /(float)speed * millis() ; + shift = drift; + brightness = 255.0 /(float)speed * (millis() + shift); analogWrite(ledPin, lum(brightness)); previousMillis = millis(); }; } -void Pwm::Down(long speed ) { +void Pwm::Down(long speed, long drift) { // Riduce linearmente la luminosita' usanndo millis() // quindi senza bloccare il processore if (millis() != previousMillis) { - brightness = 255 - 255.0 /(float)speed * millis() ; + shift = drift; + brightness = 255 - 255.0 /(float)speed * (millis() + shift) ; analogWrite(ledPin, brightness); previousMillis = millis(); }; } -void Pwm::lDown(long speed ) { +void Pwm::lDown(long speed, long drift) { // Riduce usanndo millis() con correzione della luminosita' // quindi senza bloccare il processore if (millis() != previousMillis) { - brightness = 255 - 255.0 /(float)speed * millis() ; + shift = drift; + brightness = 255 - 255.0 /(float)speed * (millis() + shift) ; analogWrite(ledPin, lum(brightness)); previousMillis = millis(); }; } -void Pwm::UD(long speed ) { +void Pwm::UD(long speed, long drift ) { // Aumenta e riduce in sequenza la luminosita' usanndo millis() - brightness = 128 + 127 * cos(2 * PI / speed * millis()); + shift = drift; + brightness = 128 + 127 * cos(2 * PI / speed * (millis() + shift)); analogWrite(ledPin, brightness); } diff --git a/libraries/common/common.h b/libraries/common/common.h index 25b84dd..97893fc 100644 --- a/libraries/common/common.h +++ b/libraries/common/common.h @@ -3,6 +3,11 @@ Oggetti comuni +Autore: Andrea Manni + +Link: http://git.andreamanni.com/ +Licenza: GPLv3 + */ #include "Arduino.h" @@ -12,7 +17,7 @@ #define common_h // Variabili -const uint8_t BCORRECT[256] PROGMEM = { // Tabella per correzione luminosita' PWM +const uint8_t BCORRECT[256] PROGMEM = { // Tabella per correzione luminosita' LED a 8bit 0,0,0,1,1,1,2,1,1,2,1,2,2,2,3,2, 2,2,3,2,2,3,2,3,3,3,4,3,3,3,4,4, 4,5,4,5,4,5,5,6,5,5,6,5,6,6,7,6, @@ -74,11 +79,12 @@ public: Lampeggiatore(int pin); void Invert(); // Inverte il lampeggio void Blink(); // Lampeggia ogni 500ms - void Blink(long interval); // Lampeggia inpostando l'intervallo - void Blink(long on, long down); // Imposta il tempo acceso e il tempo spento + void Blink(long interval, long drift = 0); // Lampeggia inpostando l'intervallo + void Blink(long on, long down, long drift); // Imposta il tempo acceso e il tempo spento void High(); // Accende il LED void Low(); // Spegne il LED void Swap(); // Inverte lo stato del LED + unsigned long shift ; // anticipo / ritardo }; @@ -94,19 +100,20 @@ class Pwm { int ledPin ; // il numero del LED pin int speed ; // velocita' del ciclo in ms unsigned long previousMillis ; //precedente cambio di stato - byte increment ; // aumenta brighteness nel loop UD + byte increment ; // aumenta brighteness nel loop UD // Constructor: come viene instanziato un oggetto facente parte della classe public: Pwm(int pin); // numero di pin, velocita' di ciclo - void Up(long speed); - void lUp(long speed); - void Down(long speed); - void lDown(long speed); - void UD(long speed); + void Up(long speed, long drift = 0); + void lUp(long speed, long drift = 0); + void Down(long speed, long drift = 0); + void lDown(long speed, long drift = 0); + void UD(long speed, long drift = 0); void Set(byte brighteness); void lSet(byte brighteness); byte brightness ; // luminostia' iniziale + unsigned long shift ; // anticipo / ritardo }; diff --git a/libraries/common/examples/blink/blink.ino b/libraries/common/examples/blink/blink.ino index b796020..d72d603 100644 --- a/libraries/common/examples/blink/blink.ino +++ b/libraries/common/examples/blink/blink.ino @@ -13,15 +13,17 @@ void setup() { // I PINs vengono impostati dal constructor al momento // della dichiarazione dell'ogetto. -led.Invert() ; // Opzionale: inverte l'ordine del lampeggio da +//led.Invert() ; // Opzionale: inverte l'ordine del lampeggio da // HI -> LOW --> LOW -> HI // per avere 2 LED che lampeggiano alternativamente } void loop() { led.Blink(); // Lampeggia con un default di 1sec (0.5 HI 0.5 LOW) -// led.Blink(500); // Lampeggia ogni 500ms -// led.Blink(500,200); // Imposta il tempo acceso e il tempo spento +// led.Blink(400); // Lampeggia ogni 400ms +// led.Blink(400,200); // Imposta il tempo acceso e il tempo spento a 400ms, 200ms di ritardo +// led.Blink(300,700,0); // acceso per 300ms, spento per 700 ms, ritardo = 0ms +// led.Blink(300,700,500); // acceso per 300ms, spento per 700 ms, ritardo = 500s // led.High(); // Stato su HI // led.Low(); // Stato su LOW // led.Swap(); // Inverte lo Stato diff --git a/libraries/common/examples/pwm/pwm.ino b/libraries/common/examples/pwm/pwm.ino index deeb8ea..e3fe058 100644 --- a/libraries/common/examples/pwm/pwm.ino +++ b/libraries/common/examples/pwm/pwm.ino @@ -16,12 +16,16 @@ void setup() { } void loop() { - led.Up(2000); // Aumenta la luminosita' linearmente in 2 sec - //led.lUp(2000); // Aumenta la luminosita' con correzione luminosita' per LED - // led.Down(1000); // Diminuisce la luminosita' in 1 sec - // led.lDown(1000); // Diminuisce la luminosita' con correzione luminosita' - // led.UD(4000); // Aumenta e poi diminuisce la luminostia' in 4 sec (coseno) - // led.set(100); // Imposta il valore del PWM da 0-255 - // led.lSet(100); // Imposta il valore del PWM con correzione luminosita - // analogWrite(lum100); // Equivalente a sopra +led.Up(2000); // Aumenta la luminosita' linearmente in 2 sec +//led.Up(2000,1000); // Aumenta la luminosita' linearmente in 2 sec, 1sec di ritardo + +//led.lUp(2000); // Aumenta la luminosita' con correzione luminosita' per LED +// led.Down(1000); // Diminuisce la luminosita' in 1 sec +// led.lDown(1000); // Diminuisce la luminosita' con correzione luminosita' +// led.UD(4000); // Aumenta e poi diminuisce la luminostia' in 4 sec (coseno) +// Tutti questi metodi accettano un valore opzionale per il ritardo + +// led.set(100); // Imposta il valore del PWM da 0-255 +// led.lSet(100); // Imposta il valore del PWM con correzione luminosita' +// analogWrite(lum100); // Equivalente a sopra } -- 2.39.2