3 * Oggetti di uso comune
10 //////////////////////
14 RGBLed::RGBLed(byte pinR, byte pinG, byte pinB) {
20 // Equvalente del Setup() per inizializzare i PIN
21 pinMode(redPin, OUTPUT);
22 pinMode(greenPin, OUTPUT);
23 pinMode(greenPin, OUTPUT);
26 RGBLed::RGBLed(byte pinR, byte pinG, byte pinB, byte com) {
27 // Per un common catode, inverte il valore max / min
33 // Equvalente del Setup() per inizializzare i PIN
34 pinMode(redPin, OUTPUT);
35 pinMode(greenPin, OUTPUT);
36 pinMode(greenPin, OUTPUT);
39 void RGBLed::SetColor (byte r, byte g, byte b) {
40 // Imposta il colore di un LED RGB
41 analogWrite(redPin, common - r);
42 analogWrite(greenPin, common - g);
43 analogWrite(bluePin, common - b);
47 // Accende il LED di rosso
51 void RGBLed::Green () {
52 // Accende il LED di verde
56 void RGBLed::Blue () {
57 // Accende il LED di blu
61 void RGBLed::Magenta () {
62 // Accende il LED di magenta
66 void RGBLed::Cyano () {
67 // Accende il LED di Cyano
71 void RGBLed::Yellow () {
72 // Accende il LED di giallo
76 void RGBLed::White () {
83 SetColor(255,255,255);
88 /////////////////////////////////////
91 Lampeggiatore::Lampeggiatore(int pin)
94 pinMode(ledPin, OUTPUT);
100 // Una funzione facente parte di una classe prende il nome di "metodo" della stessa:
101 void Lampeggiatore::Invert() {
102 // Inverte il lampeggio
106 void Lampeggiatore::Blink() {
107 // Illumina il led a 500ms
109 if(millis() - previousMillis > interval) {
110 // save the last time you blinked the LED
111 previousMillis = millis();
113 // if the LED is off turn it on and vice-versa:
114 ledState = !ledState ; // Inverti il LED
116 // set the LED with the ledState of the variable:
117 digitalWrite(ledPin, ledState);
120 void Lampeggiatore::Blink(long time) {
121 // Illumina il led secondo un intervallo passato come argomento
123 if(millis() - previousMillis > time) {
124 // save the last time you blinked the LED
125 previousMillis = millis();
127 // if the LED is off turn it on and vice-versa:
128 ledState = !ledState ; // Inverti il LED
130 // set the LED with the ledState of the variable:
131 digitalWrite(ledPin, ledState);
134 void Lampeggiatore::Blink(long up, long down) {
135 // Illumina il ledB precisando ontime e downtime
137 if((ledState == HIGH)&& (millis() - previousMillis > up)) {
138 // save the last time you blinked the LED
139 previousMillis = millis();
142 else if((ledState == LOW)&& (millis() - previousMillis > down)) {
143 previousMillis = millis();
147 // set the LED with the ledState of the variable:
148 digitalWrite(ledPin, ledState);
151 /////////////////////////////////////
155 // Gestione del PWM utilizzando millis
156 // per non bloccare il processore con delay
157 // Warning: serialWrite puo' interferire con i tempi.
160 pinMode(ledPin, OUTPUT);
162 byte brightness = 0 ;
166 void Pwm::Up(long speed) {
167 // Aumenta progressivamente la luminosita' usanndo millis()
168 // quindi senza bloccare il processore
169 // Viene usato un float, in alternativa un coseno
171 if (millis() != previousMillis) { // si potrebbe togliere
172 brightness = 255.0 /(float)speed * millis() ;
173 analogWrite(ledPin, brightness);
175 previousMillis = millis();
179 void Pwm::Down(long speed ) {
180 // Riduce progressivamente la luminosita' usanndo millis()
181 // quindi senza bloccare il processore
183 if (millis() != previousMillis) {
184 brightness = 255 - 255.0 /(float)speed * millis() ;
185 analogWrite(ledPin, brightness);
187 previousMillis = millis();
191 void Pwm::UD(long speed ) {
192 // Aumenta e riduce in sequenza la luminosita' usanndo millis()
193 brightness = 128 + 127 * cos(2 * PI / speed * millis());
194 analogWrite(ledPin, brightness);
198 /////////////////////////////////////
201 Sequenza::Sequenza (byte passed[], byte dim) {
204 for (int thisPin = 0; thisPin < size; thisPin++) {
205 pinMode(ledPins[thisPin], OUTPUT);
207 previousMillis = millis();
208 digitalWrite(ledPins[0], HIGH);
211 void Sequenza::Update(long value) {
212 // Incrementa dal primo all'ultimo valore dell'array
214 if (millis() - previousMillis >= interval) {
215 previousMillis = millis();
217 if ( i < size - 1 ) {
218 // Spegni precedente led
219 digitalWrite(ledPins[i], LOW);
221 // Accendi successivo led
222 digitalWrite(ledPins[++i], HIGH);
225 else if (i == size - 1 ) {
228 previousMillis = millis();
229 digitalWrite(ledPins[i], HIGH);
230 digitalWrite(ledPins[ size - 1 ], LOW);
236 void Sequenza::Reverse(long value) {
238 if (millis() - previousMillis >= interval) {
239 previousMillis = millis();
241 if (i == 0) { // Entry point, ultimo LED
242 digitalWrite(ledPins[size -1],HIGH);
243 digitalWrite(ledPins[0],LOW);
247 digitalWrite(ledPins[i],LOW);
248 digitalWrite(ledPins[--i],HIGH);
253 void Sequenza::UD(long value) {
255 if (millis() - previousMillis >= interval) {
256 previousMillis = millis();
257 // Spegni precedente led
258 digitalWrite(ledPins[i], LOW);
260 // Accendi successivo led
261 digitalWrite(ledPins[i], HIGH);
263 if (i == 0 || i == size -1) {
274 void brilla(byte pin, int velocita ) { // Defalt value di velocita' solo nell'Header
275 // Accende e spegne il LED accetando un argomento
276 // per impostare la velocita'.
278 pinMode(pin, OUTPUT);
279 // sequenze di istruzione: accendere e spegnere il LED
280 digitalWrite(pin, HIGH); // turn the LED on (HIGH is the voltage level)
281 delay(velocita); // wait for a second
282 digitalWrite(pin, LOW); // turn the LED off by making the voltage LOW
283 delay(velocita); // wait for a second
288 // Mappatura dell'intervallo 0-255 con correzione di luminosita.
290 return pgm_read_byte_near(BCORRECT + val);