3 * Oggetti di uso comune
6 * Link: http://git.andreamanni.com/
14 //////////////////////
18 RGBLed::RGBLed(byte pinR, byte pinG, byte pinB) {
19 // Per un common catodo, valore max / min invertiti
25 // Equvalente del Setup() per inizializzare i PIN
26 pinMode(redPin, OUTPUT);
27 pinMode(greenPin, OUTPUT);
28 pinMode(greenPin, OUTPUT);
31 RGBLed::RGBLed(byte pinR, byte pinG, byte pinB, byte com) {
32 // Per un common anode, valore max / min normali
38 // Equvalente del Setup() per inizializzare i PIN
39 pinMode(redPin, OUTPUT);
40 pinMode(greenPin, OUTPUT);
41 pinMode(greenPin, OUTPUT);
44 void RGBLed::SetColor (byte r, byte g, byte b) {
45 // Imposta il colore di un LED RGB
46 analogWrite(redPin, common - r);
47 analogWrite(greenPin, common - g);
48 analogWrite(bluePin, common - b);
52 // Accende il LED di rosso
56 void RGBLed::Green () {
57 // Accende il LED di verde
61 void RGBLed::Blue () {
62 // Accende il LED di blu
66 void RGBLed::Magenta () {
67 // Accende il LED di magenta
71 void RGBLed::Cyano () {
72 // Accende il LED di Cyano
76 void RGBLed::Yellow () {
77 // Accende il LED di giallo
81 void RGBLed::White () {
88 SetColor(255,255,255);
93 /////////////////////////////////////
96 Lampeggiatore::Lampeggiatore(int pin)
99 pinMode(ledPin, OUTPUT);
105 // Una funzione facente parte di una classe prende il nome di "metodo" della stessa:
106 void Lampeggiatore::Invert() {
107 // Inverte il lampeggio
111 void Lampeggiatore::Blink() {
112 // Illumina il led a 500ms
114 if(millis() + shift - previousMillis > interval) {
115 // save the last time you blinked the LED
116 previousMillis = millis();
118 // if the LED is off turn it on and vice-versa:
119 ledState = !ledState ; // Inverti il LED
121 // set the LED with the ledState of the variable:
122 digitalWrite(ledPin, ledState);
125 void Lampeggiatore::Blink(long time, long drift ) {
126 // Illumina il led secondo un intervallo passato come argomento
129 if(millis() + shift - previousMillis > time) {
130 // save the last time you blinked the LED
131 previousMillis = millis();
133 // if the LED is off turn it on and vice-versa:
134 ledState = !ledState ; // Inverti il LED
136 // set the LED with the ledState of the variable:
137 digitalWrite(ledPin, ledState);
140 void Lampeggiatore::Blink(long up, long down, long drift ) {
141 // Illumina il ledB precisando ontime e downtime
144 if((ledState == HIGH)&& (millis() + shift - previousMillis > up)) {
145 // save the last time you blinked the LED
146 previousMillis = millis();
149 else if((ledState == LOW)&& (millis() + shift - previousMillis > down)) {
150 previousMillis = millis();
154 // set the LED with the ledState of the variable:
155 digitalWrite(ledPin, ledState);
158 void Lampeggiatore::High() {
161 digitalWrite(ledPin, HIGH);
164 void Lampeggiatore::Low() {
167 digitalWrite(ledPin, LOW);
170 void Lampeggiatore::Swap() {
171 // Inverte lo stato del LED
173 digitalWrite(ledPin, !digitalRead(ledPin));
176 /////////////////////////////////////
180 // Gestione del PWM utilizzando millis
181 // per non bloccare il processore con delay
182 // Warning: serialWrite puo' interferire con i tempi.
185 pinMode(ledPin, OUTPUT);
187 byte brightness = 0 ;
191 void Pwm::Up(long speed, long drift) {
192 // Aumenta linearmente la luminosita' usanndo millis()
193 // quindi senza bloccare il processore
194 // Viene usato un float, in alternativa un coseno
196 if (millis() != previousMillis) { // si potrebbe togliere
198 brightness = 255.0 /(float)speed * (millis() + shift);
199 analogWrite(ledPin, brightness);
201 previousMillis = millis();
205 void Pwm::lUp(long speed, long drift) {
206 // Aumenta usanndo millis() con correzione luminosita' LED
207 // quindi senza bloccare il processore
208 // Viene usato un float, in alternativa un coseno
210 if (millis() != previousMillis) { // si potrebbe togliere
212 brightness = 255.0 /(float)speed * (millis() + shift);
213 analogWrite(ledPin, lum(brightness));
215 previousMillis = millis();
219 void Pwm::Down(long speed, long drift) {
220 // Riduce linearmente la luminosita' usanndo millis()
221 // quindi senza bloccare il processore
223 if (millis() != previousMillis) {
225 brightness = 255 - 255.0 /(float)speed * (millis() + shift) ;
226 analogWrite(ledPin, brightness);
228 previousMillis = millis();
232 void Pwm::lDown(long speed, long drift) {
233 // Riduce usanndo millis() con correzione della luminosita'
234 // quindi senza bloccare il processore
236 if (millis() != previousMillis) {
238 brightness = 255 - 255.0 /(float)speed * (millis() + shift) ;
239 analogWrite(ledPin, lum(brightness));
241 previousMillis = millis();
245 void Pwm::UD(long speed, long drift ) {
246 // Aumenta e riduce in sequenza la luminosita' usanndo millis()
248 brightness = 128 + 127 * cos(2 * PI / speed * (millis() + shift));
249 analogWrite(ledPin, brightness);
252 void Pwm::Set(byte brightness) {
253 // Imposta il valore del PWM
254 analogWrite(ledPin, brightness);
258 void Pwm::lSet(byte brightness) {
259 // Imposta il valore del PWM
260 analogWrite(ledPin, lum(brightness));
264 /////////////////////////////////////
267 Sequenza::Sequenza (byte passed[], byte dim) {
270 for (int thisPin = 0; thisPin < size; thisPin++) {
271 pinMode(ledPins[thisPin], OUTPUT);
273 previousMillis = millis();
274 digitalWrite(ledPins[0], HIGH);
277 void Sequenza::Update(long value) {
278 // Incrementa dal primo all'ultimo valore dell'array
280 if (millis() - previousMillis >= interval) {
281 previousMillis = millis();
283 if ( i < size - 1 ) {
284 // Spegni precedente led
285 digitalWrite(ledPins[i], LOW);
287 // Accendi successivo led
288 digitalWrite(ledPins[++i], HIGH);
291 else if (i == size - 1 ) {
294 previousMillis = millis();
295 digitalWrite(ledPins[i], HIGH);
296 digitalWrite(ledPins[ size - 1 ], LOW);
302 void Sequenza::Reverse(long value) {
304 if (millis() - previousMillis >= interval) {
305 previousMillis = millis();
307 if (i == 0) { // Entry point, ultimo LED
308 digitalWrite(ledPins[size -1],HIGH);
309 digitalWrite(ledPins[0],LOW);
313 digitalWrite(ledPins[i],LOW);
314 digitalWrite(ledPins[--i],HIGH);
319 void Sequenza::UD(long value) {
321 if (millis() - previousMillis >= interval) {
322 previousMillis = millis();
323 // Spegni precedente led
324 digitalWrite(ledPins[i], LOW);
326 // Accendi successivo led
327 digitalWrite(ledPins[i], HIGH);
329 if (i == 0 || i == size -1) {
340 void brilla(byte pin, int velocita ) { // Defalt value di velocita' solo nell'Header
341 // Accende e spegne il LED accetando un argomento
342 // per impostare la velocita'.
344 pinMode(pin, OUTPUT);
345 // sequenze di istruzione: accendere e spegnere il LED
346 digitalWrite(pin, HIGH); // turn the LED on (HIGH is the voltage level)
347 delay(velocita); // wait for a second
348 digitalWrite(pin, LOW); // turn the LED off by making the voltage LOW
349 delay(velocita); // wait for a second
354 // Mappatura dell'intervallo 0-255 con correzione di luminosita.
356 return pgm_read_byte_near(BCORRECT + val);