// RGB LED
// 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 ;
};
RGBLed::RGBLed(byte pinR, byte pinG, byte pinB, byte com) {
- // Per un common catode, inverte il valore max / min
+ // Per un common anode, valore max / min normali
redPin = pinR ;
greenPin = pinG ;
bluePin = pinB ;
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
};
void Pwm::Up(long speed) {
- // Aumenta progressivamente la luminosita' usanndo millis()
+ // Aumenta linearmente la luminosita' usanndo millis()
// quindi senza bloccare il processore
// Viene usato un float, in alternativa un coseno
};
}
+void Pwm::lUp(long speed) {
+ // 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() ;
+ analogWrite(ledPin, lum(brightness));
+
+ previousMillis = millis();
+ };
+}
+
void Pwm::Down(long speed ) {
- // Riduce progressivamente la luminosita' usanndo millis()
+ // Riduce linearmente la luminosita' usanndo millis()
// quindi senza bloccare il processore
if (millis() != previousMillis) {
};
}
+void Pwm::lDown(long speed ) {
+ // Riduce usanndo millis() con correzione della luminosita'
+ // quindi senza bloccare il processore
+
+ if (millis() != previousMillis) {
+ brightness = 255 - 255.0 /(float)speed * millis() ;
+ analogWrite(ledPin, lum(brightness));
+
+ previousMillis = millis();
+ };
+}
+
void Pwm::UD(long speed ) {
// Aumenta e riduce in sequenza la luminosita' usanndo millis()
brightness = 128 + 127 * cos(2 * PI / speed * millis());
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
public:
Lampeggiatore(int pin);
void Invert(); // Inverte il lampeggio
- void Blink(); // Lampeggia ogni 500ms
+ 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 High(); // Accende il LED
+ void Low(); // Spegne il LED
+ void Swap(); // Inverte lo stato del LED
};
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 Set(byte brighteness);
+ void lSet(byte brighteness);
byte brightness ; // luminostia' iniziale
};
Pwm led = 9;
void setup() {
-// I PINs vengono impostati dal constructor al momento
-// della dichiarazione dell'ogetto.
+ // I PINs vengono impostati dal constructor al momento
+ // della dichiarazione dell'ogetto.
}
void loop() {
- led.Up(2000); // Aumenta la luminosita' in 2 sec
- led.Down(1000); // Diminuisce la luminosita' in 1 sec
- led.UD(4000); // Aumenta e poi diminuisce la luminostia' in 4 sec.
+ 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
}