/* Common
*
* Oggetti di uso comune
+ * Autore: Andrea Manni
+ *
+ * Link: http://git.andreamanni.com/
+ * Licenza: GPLv3
*/
#include "Arduino.h"
//////////////////////
// RGB LED
-// Common anode
+// Common anode / cat
-RGBLed::RGBLed(byte pinR, byte pinG, byte pinB) {
+RGBLed::RGBLed(byte pinR, byte pinG, byte pinB) {
+ // Per un common catodo, valore max / min invertiti
redPin = pinR ;
greenPin = pinG ;
bluePin = pinB ;
+ common = 0 ;
+
+ // Equvalente del Setup() per inizializzare i PIN
+ pinMode(redPin, OUTPUT);
+ pinMode(greenPin, OUTPUT);
+ pinMode(greenPin, OUTPUT);
+};
+
+RGBLed::RGBLed(byte pinR, byte pinG, byte pinB, byte com) {
+ // Per un common anode, valore max / min normali
+ redPin = pinR ;
+ greenPin = pinG ;
+ bluePin = pinB ;
+ common = com ;
// Equvalente del Setup() per inizializzare i PIN
pinMode(redPin, OUTPUT);
void RGBLed::SetColor (byte r, byte g, byte b) {
// Imposta il colore di un LED RGB
- analogWrite(redPin, r);
- analogWrite(greenPin, g);
- analogWrite(bluePin, b);
+ analogWrite(redPin, common - r);
+ analogWrite(greenPin, common - g);
+ analogWrite(bluePin, common - b);
};
void RGBLed::Red () {
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 ;
}
digitalWrite(ledPin, ledState);
};
+void Lampeggiatore::High() {
+ // Accende il LED
+
+ digitalWrite(ledPin, HIGH);
+}
+
+void Lampeggiatore::Low() {
+ // Spegne il LED
+
+ digitalWrite(ledPin, LOW);
+}
+
+void Lampeggiatore::Swap() {
+ // Inverte lo stato del LED
+
+ digitalWrite(ledPin, !digitalRead(ledPin));
+}
+
/////////////////////////////////////
// Pwm
// Constructor
increment = 1;
};
-void Pwm::Up(long speed) {
- // Aumenta progressivamente la luminosita' usanndo millis()
+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::Down(long speed ) {
- // Riduce progressivamente la luminosita' usanndo millis()
+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
+ shift = drift;
+ brightness = 255.0 /(float)speed * (millis() + shift);
+ analogWrite(ledPin, lum(brightness));
+
+ previousMillis = millis();
+ };
+}
+
+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::UD(long speed ) {
+void Pwm::lDown(long speed, long drift) {
+ // Riduce usanndo millis() con correzione della luminosita'
+ // quindi senza bloccare il processore
+
+ if (millis() != previousMillis) {
+ shift = drift;
+ brightness = 255 - 255.0 /(float)speed * (millis() + shift) ;
+ analogWrite(ledPin, lum(brightness));
+
+ previousMillis = millis();
+ };
+}
+
+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);
+}
+
+void Pwm::Set(byte brightness) {
+ // Imposta il valore del PWM
analogWrite(ledPin, brightness);
}
+void Pwm::lSet(byte brightness) {
+ // Imposta il valore del PWM
+ analogWrite(ledPin, lum(brightness));
+}
+
+
/////////////////////////////////////
// Sequenza
// Constructor