3 * Oggetti di uso comune
10 //////////////////////
14 RGBLed::RGBLed(byte pinR, byte pinG, byte pinB) {
19 // Equvalente del Setup() per inizializzare i PIN
20 pinMode(redPin, OUTPUT);
21 pinMode(greenPin, OUTPUT);
22 pinMode(greenPin, OUTPUT);
25 void RGBLed::SetColor (byte r, byte g, byte b) {
26 // Imposta il colore di un LED RGB
27 analogWrite(redPin, r);
28 analogWrite(greenPin, g);
29 analogWrite(bluePin, b);
33 // Accende il LED di rosso
37 void RGBLed::Green () {
38 // Accende il LED di verde
42 void RGBLed::Blue () {
43 // Accende il LED di blu
47 void RGBLed::Magenta () {
48 // Accende il LED di magenta
52 void RGBLed::Cyano () {
53 // Accende il LED di Cyano
57 void RGBLed::Yellow () {
58 // Accende il LED di giallo
62 void RGBLed::White () {
69 SetColor(255,255,255);
74 /////////////////////////////////////
77 Lampeggiatore::Lampeggiatore(int pin)
80 pinMode(ledPin, OUTPUT);
86 // Una funzione facente parte di una classe prende il nome di "metodo" della stessa:
87 void Lampeggiatore::Invert() {
88 // Inverte il lampeggio
92 void Lampeggiatore::Blink() {
93 // Illumina il led a 500ms
95 if(millis() - previousMillis > interval) {
96 // save the last time you blinked the LED
97 previousMillis = millis();
99 // if the LED is off turn it on and vice-versa:
100 ledState = !ledState ; // Inverti il LED
102 // set the LED with the ledState of the variable:
103 digitalWrite(ledPin, ledState);
106 void Lampeggiatore::Blink(long time) {
107 // Illumina il led secondo un intervallo passato come argomento
109 if(millis() - previousMillis > time) {
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 up, long down) {
121 // Illumina il ledB precisando ontime e downtime
123 if((ledState == HIGH)&& (millis() - previousMillis > up)) {
124 // save the last time you blinked the LED
125 previousMillis = millis();
128 else if((ledState == LOW)&& (millis() - previousMillis > down)) {
129 previousMillis = millis();
133 // set the LED with the ledState of the variable:
134 digitalWrite(ledPin, ledState);
137 /////////////////////////////////////
141 // Gestione del PWM utilizzando millis
142 // per non bloccare il processore con delay
143 // Warning: serialWrite puo' interferire con i tempi.
146 pinMode(ledPin, OUTPUT);
148 byte brightness = 0 ;
152 void Pwm::Up(long speed) {
153 // Aumenta progressivamente la luminosita' usanndo millis()
154 // quindi senza bloccare il processore
155 // Viene usato un float, in alternativa un coseno
157 if (millis() != previousMillis) { // si potrebbe togliere
158 brightness = 255.0 /(float)speed * millis() ;
159 analogWrite(ledPin, brightness);
161 previousMillis = millis();
165 void Pwm::Down(long speed ) {
166 // Riduce progressivamente la luminosita' usanndo millis()
167 // quindi senza bloccare il processore
169 if (millis() != previousMillis) {
170 brightness = 255 - 255.0 /(float)speed * millis() ;
171 analogWrite(ledPin, brightness);
173 previousMillis = millis();
177 void Pwm::UD(long speed ) {
178 // Aumenta e riduce in sequenza la luminosita' usanndo millis()
179 brightness = 128 + 127 * cos(2 * PI / speed * millis());
180 analogWrite(ledPin, brightness);
184 /////////////////////////////////////
187 Sequenza::Sequenza (byte passed[], byte dim) {
190 for (int thisPin = 0; thisPin < size; thisPin++) {
191 pinMode(ledPins[thisPin], OUTPUT);
193 previousMillis = millis();
194 digitalWrite(ledPins[0], HIGH);
197 void Sequenza::Update(long value) {
198 // Incrementa dal primo all'ultimo valore dell'array
200 if (millis() - previousMillis >= interval) {
201 previousMillis = millis();
203 if ( i < size - 1 ) {
204 // Spegni precedente led
205 digitalWrite(ledPins[i], LOW);
207 // Accendi successivo led
208 digitalWrite(ledPins[++i], HIGH);
211 else if (i == size - 1 ) {
214 previousMillis = millis();
215 digitalWrite(ledPins[i], HIGH);
216 digitalWrite(ledPins[ size - 1 ], LOW);
222 void Sequenza::Reverse(long value) {
224 if (millis() - previousMillis >= interval) {
225 previousMillis = millis();
227 if (i == 0) { // Entry point, ultimo LED
228 digitalWrite(ledPins[size -1],HIGH);
229 digitalWrite(ledPins[0],LOW);
233 digitalWrite(ledPins[i],LOW);
234 digitalWrite(ledPins[--i],HIGH);
239 void Sequenza::UD(long value) {
241 if (millis() - previousMillis >= interval) {
242 previousMillis = millis();
243 // Spegni precedente led
244 digitalWrite(ledPins[i], LOW);
246 // Accendi successivo led
247 digitalWrite(ledPins[i], HIGH);
249 if (i == 0 || i == size -1) {
260 void brilla(byte pin, int velocita ) { // Defalt value di velocita' solo nell'Header
261 // Accende e spegne il LED accetando un argomento
262 // per impostare la velocita'.
264 pinMode(pin, OUTPUT);
265 // sequenze di istruzione: accendere e spegnere il LED
266 digitalWrite(pin, HIGH); // turn the LED on (HIGH is the voltage level)
267 delay(velocita); // wait for a second
268 digitalWrite(pin, LOW); // turn the LED off by making the voltage LOW
269 delay(velocita); // wait for a second
274 // Mappatura dell'intervallo 0-255 con correzione di luminosita.
276 return pgm_read_byte_near(BCORRECT + val);