From: Andrea Manni Date: Mon, 11 Dec 2017 17:16:37 +0000 (+0100) Subject: PWM Pulse X-Git-Url: http://git.piffa.net/web?a=commitdiff_plain;h=HEAD;p=sketchbook_andrea PWM Pulse --- diff --git a/libraries/common/common.cpp b/libraries/common/common.cpp index 4a886b2..1611ec1 100644 --- a/libraries/common/common.cpp +++ b/libraries/common/common.cpp @@ -10,7 +10,7 @@ #include "Arduino.h" #include "common.h" -#define DEBUG_not +#define DEBUG ////////////////////// // RGB LED @@ -210,6 +210,8 @@ Pwm::Pwm(int pin) previousMillis = 0; byte brightness = 0 ; increment = 1; + int step = 0; // Pulse: stato del loop PWM + int interval = 1; }; void Pwm::Up(long speed, long drift) { @@ -279,6 +281,50 @@ void Pwm::Set(byte brightness) { } +void Pwm::Pulse(int interval, int pausa) { + // PWM up/down + un ciclo di pausa + // Interval e' la pausa tra uno step di 255 e l'altro + + if ((millis() - previousMillis) >= interval) { + previousMillis = millis(); + if (step < 256) { //UP + analogWrite(ledPin, lum(step)); + step++ ; + } else if (step < 512 ) { // Down + analogWrite(ledPin, lum(511 - step)); + step++ ; + } else if (step < 512 + pausa ){ // Pausa + analogWrite(ledPin, lum(0)); + step++ ; + } else if (step >= 512 + pausa) { // Reset + step = 0 ; + } + } +} + +void Pwm::RandomPulse(int min , int max, int pausa ) { + // PWM up/down + un ciclo di pausa + // L'intervallo e' random a ogni nuovo ciclo, + // compreso tra un min - max passato come argomento + + if ((millis() - previousMillis) >= interval) { + previousMillis = millis(); + if (step < 256) { //UP + analogWrite(ledPin, lum(step)); + step++ ; + } else if (step < 512 ) { // Down + analogWrite(ledPin, lum(511 - step)); + step++ ; + } else if (step < (512 + pausa )){ // Pausa + analogWrite(ledPin, lum(0)); + step++ ; + } else if ((step >= 512 + pausa )) { + step = 0 ; + interval = random(min,max); + } + } +} + void Pwm::lSet(byte brightness) { // Imposta il valore del PWM con correzione luminosita' LED analogWrite(ledPin, lum(brightness)); diff --git a/libraries/common/common.h b/libraries/common/common.h index 440abf4..b74ab45 100644 --- a/libraries/common/common.h +++ b/libraries/common/common.h @@ -102,6 +102,8 @@ class Pwm { int speed ; // velocita' del ciclo in ms unsigned long previousMillis ; //precedente cambio di stato byte increment ; // aumenta brighteness nel loop UD + int step; // Pulse: stato del loop PWM + int interval ; // Pulse: Intervallo tra step // Constructor: come viene instanziato un oggetto facente parte della classe public: @@ -111,6 +113,8 @@ public: void Down(long speed, long drift = 0); void lDown(long speed, long drift = 0); void UD(long speed, long drift = 0); + void Pulse(int interval, int pausa = 255); + void RandomPulse(int min = 1, int max = 10, int pausa = 255); void Set(byte brighteness); void lSet(byte brighteness); byte brightness ; // luminostia' iniziale diff --git a/libraries/common/examples/pwm/pwm.ino b/libraries/common/examples/pwm/pwm.ino index cd69bc5..e847775 100644 --- a/libraries/common/examples/pwm/pwm.ino +++ b/libraries/common/examples/pwm/pwm.ino @@ -25,6 +25,9 @@ led.Up(2000); // Aumenta la luminosita' linearmente in 2 sec // led.UD(4000); // Aumenta e poi diminuisce la luminostia' in 4 sec (coseno) // Tutti questi metodi accettano un valore opzionale per il ritardo +// led.Pulse(3,512); // Una pulsazione e una pausa di 512ms +// led.RandomPulse(1,3); // Pulsazione con intervallo random tra 1-10, cambia ogni ciclo +// led.RandomPulse(1,3,382); // "" pausa di 382 step tra un ciclo di 255 up + 255 down // 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