]> git.piffa.net Git - sketchbook_andrea/commitdiff
Common: aggiunto shift temporale per pwm e blink
authoreaman <andrea@piffa.net>
Wed, 1 Feb 2017 03:17:05 +0000 (04:17 +0100)
committereaman <andrea@piffa.net>
Wed, 1 Feb 2017 03:17:05 +0000 (04:17 +0100)
libraries/common/common.cpp
libraries/common/common.h
libraries/common/examples/blink/blink.ino
libraries/common/examples/pwm/pwm.ino

index 359896976b81b3a0676fc232d54235dbc215bb1b..01f07cfffe1cfac49bde493fc59b02cb3d3100b1 100644 (file)
@@ -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);  
 }
 
index 25b84dd6ae9f7320a1290e869f7b4779a9ca4489..97893fcd75d1b68e23de76d079a9e74be417fb1b 100644 (file)
@@ -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
 };
 
 
index b796020c749dd907148fe39bc612ef9e73a791c5..d72d6031dc1e8d189707b69c0ed49c6c22c9709f 100644 (file)
@@ -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
index deeb8ea735e594f7dd677297dec534afafa51e2c..e3fe058ae19ba793c67c36db14338ef80fe8ef4a 100644 (file)
@@ -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
 }