X-Git-Url: http://git.piffa.net/web?a=blobdiff_plain;f=libraries%2Fcommon%2Fcommon.cpp;h=b77c04602ee55539ed315f9198e56ab124aa0b9d;hb=9046a34c851a66149248ad1695eb51c7ac1ccd36;hp=3fd82db3cb2c0a1a418e2469e8fa2ffaa87c40fb;hpb=f2de80ea596c958fb5d919883befabfad25dcae2;p=sketchbook_andrea diff --git a/libraries/common/common.cpp b/libraries/common/common.cpp index 3fd82db..b77c046 100644 --- a/libraries/common/common.cpp +++ b/libraries/common/common.cpp @@ -9,12 +9,26 @@ ////////////////////// // RGB LED -// Common anode +// Common anode / cat RGBLed::RGBLed(byte pinR, byte pinG, byte pinB) { 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 catode, inverte il valore max / min + redPin = pinR ; + greenPin = pinG ; + bluePin = pinB ; + common = com ; // Equvalente del Setup() per inizializzare i PIN pinMode(redPin, OUTPUT); @@ -24,9 +38,9 @@ RGBLed::RGBLed(byte pinR, byte pinG, byte pinB) { 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 () { @@ -83,9 +97,6 @@ Lampeggiatore::Lampeggiatore(int pin) interval = 500; }; - - - // Una funzione facente parte di una classe prende il nome di "metodo" della stessa: void Lampeggiatore::Invert() { // Inverte il lampeggio @@ -184,6 +195,77 @@ void Pwm::UD(long speed ) { } +///////////////////////////////////// +// Sequenza +// Constructor +Sequenza::Sequenza (byte passed[], byte dim) { + ledPins = passed ; + size = dim ; + for (int thisPin = 0; thisPin < size; thisPin++) { + pinMode(ledPins[thisPin], OUTPUT); + } + previousMillis = millis(); + digitalWrite(ledPins[0], HIGH); +} + +void Sequenza::Update(long value) { + // Incrementa dal primo all'ultimo valore dell'array + interval = value; + if (millis() - previousMillis >= interval) { + previousMillis = millis(); + + if ( i < size - 1 ) { + // Spegni precedente led + digitalWrite(ledPins[i], LOW); + + // Accendi successivo led + digitalWrite(ledPins[++i], HIGH); + } + + else if (i == size - 1 ) { + // Ultimo caso + i = 0; + previousMillis = millis(); + digitalWrite(ledPins[i], HIGH); + digitalWrite(ledPins[ size - 1 ], LOW); + } + } +} + + +void Sequenza::Reverse(long value) { + interval = value; + if (millis() - previousMillis >= interval) { + previousMillis = millis(); + + if (i == 0) { // Entry point, ultimo LED + digitalWrite(ledPins[size -1],HIGH); + digitalWrite(ledPins[0],LOW); + i = size -1 ; + } + else { + digitalWrite(ledPins[i],LOW); + digitalWrite(ledPins[--i],HIGH); + } + } +} + +void Sequenza::UD(long value) { + interval = value; + if (millis() - previousMillis >= interval) { + previousMillis = millis(); + // Spegni precedente led + digitalWrite(ledPins[i], LOW); + i = i + inc ; + // Accendi successivo led + digitalWrite(ledPins[i], HIGH); + + if (i == 0 || i == size -1) { + inc = -inc ; + } + } +} + ////////////////// // Funzioni