/* Common
*
* Oggetti di uso comune
+ * Autore: Andrea Manni
+ *
+ * Link: http://git.andreamanni.com/
+ * Licenza: GPLv3
*/
#include "Arduino.h"
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();
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();
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 ;
}
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);
}
Oggetti comuni
+Autore: Andrea Manni
+
+Link: http://git.andreamanni.com/
+Licenza: GPLv3
+
*/
#include "Arduino.h"
#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,
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
};
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
};
// 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
}
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
}