From b47bc61da5b760cbfceb6c9d1e34d29cce79d428 Mon Sep 17 00:00:00 2001 From: Andrea Manni Date: Mon, 13 Feb 2017 19:02:36 +0100 Subject: [PATCH] Stati / RGB --- README.rst | 13 +- TODO | 11 ++ .../{cirso.ino => prototipo/prototipo.ino} | 0 aerei/cirso/trigger_on/trigger_on.ino | 54 ++++++++ .../trigger_transition/trigger_transition.ino | 116 ++++++++++++++++++ .../ailerons_state_rgb/ailerons_state_rgb.ino | 28 +++-- esempi/base_th/base_th.ino | 14 ++- esempi/base_th_3stati/base_th_3stati.ino | 68 +++++----- ....ino => lettura_servo_ch_pulse_millis.ino} | 17 ++- .../lettura_servo_interrupt.ino | 7 +- .../lettura_servo_interrupt_doppio.ino | 9 +- esempi/state_throttle/state_throttle.ino | 13 +- .../toggle_transition/toggle_transition.ino | 103 ++++++++++++++++ libraries/common/TODO | 7 -- libraries/common/common.cpp | 3 - libraries/common/library.properties | 9 ++ 16 files changed, 397 insertions(+), 75 deletions(-) rename aerei/cirso/{cirso.ino => prototipo/prototipo.ino} (100%) create mode 100644 aerei/cirso/trigger_on/trigger_on.ino create mode 100644 aerei/cirso/trigger_transition/trigger_transition.ino rename esempi/snippets/lettura_servo_ch_pulse_millis/{lettura_servo_ch_pulse.ino => lettura_servo_ch_pulse_millis.ino} (82%) create mode 100644 esempi/toggle_transition/toggle_transition.ino create mode 100644 libraries/common/library.properties diff --git a/README.rst b/README.rst index 47aa85f..881a593 100644 --- a/README.rst +++ b/README.rst @@ -15,7 +15,7 @@ IDE l'intero repo ``aerei_arduino`` come cartella degli sketchbook, oppure copiare la cartella ``libraries/common`` dentro ``libraries`` dello sketchbook attuale. -Aggiornamenti +Download =============== Download tramite git: @@ -30,7 +30,16 @@ Per aggiornare all'ultima versione:: * `Browse on line `_ * `Interfaccia git Web `_ * `Foum di Discussione `_ - + +Libreria +------------ + +La sola libreria Common contenete gli oggetti base puo' essere scaricata direttamente nella vostra cartella libraries da: + git clone git://git.andreamanni.com/common + +* `Download manuale archivio `_ +* `Browse on line `_ +* `Interfaccia git Web `_ Links diff --git a/TODO b/TODO index 43e0a49..e8f9ccf 100644 --- a/TODO +++ b/TODO @@ -1,3 +1,5 @@ +* Pubblicare la libreria common su arduino, via github + * aggiungere uno snippet per sniffing canale RX con interrupt * mettere questo e quello in pulsein in una funzione / oggetto * Ailerons RGB: creare un metodo per lo stato intermedio @@ -23,3 +25,12 @@ Calibrazione: # Creare un PWM con correzione di luminosita' su look table da 32 / 256 valori, eventualmente uno con coseno. + +* Flasher con sequenza arbitraria di lampeggio +* oggetti che lavorino contemporaneamente su piu' PIN +* Link a Schemi / Schemi +** battery voltage reader -> RGB +** digital compass e RGB +** barometer +** 6 axis +** Neopixel diff --git a/aerei/cirso/cirso.ino b/aerei/cirso/prototipo/prototipo.ino similarity index 100% rename from aerei/cirso/cirso.ino rename to aerei/cirso/prototipo/prototipo.ino diff --git a/aerei/cirso/trigger_on/trigger_on.ino b/aerei/cirso/trigger_on/trigger_on.ino new file mode 100644 index 0000000..32c7052 --- /dev/null +++ b/aerei/cirso/trigger_on/trigger_on.ino @@ -0,0 +1,54 @@ +/* Aereo di Cirso + +Output: + 2 LED ai lati con lampeggio alternato + 1 LED in coda lampeggio a freq doppia + +Input: + 1 interruttore su interrupt 0 per accensione / spegnimento luci +*/ + +#include + +// Variabili per interrupt 0 +volatile unsigned int chValue = 1500; // Valore computato +volatile unsigned int chStart = 1500; // Inizio rilevamento + +// Instanziamo un LED fuori dal loop +Lampeggiatore left = 5; +Lampeggiatore right = 6; +Lampeggiatore coda = 9; + +void setup() { + // I PINs vengono impostati dal constructor al momento + // della dichiarazione dell'ogetto. + + right.Invert() ; // Opzionale: inverte l'ordine del lampeggio da + // HI -> LOW --> LOW -> HI + // per avere 2 LED che lampeggiano alternativamente +} + +void loop() { + + if (chValue > 1400) { + left.Blink(); // Lampeggia con un default di 1sec (0.5 HI 0.5 LOW) + right.Blink(); + coda.Blink(1000); // Lampeggio in 1000ms = 1 secondo + } else { +// sarebbe carino mettere una transizione da on -> off con un fade down... + left.Low(); + right.Low(); + coda.Low(); + } ; +} + +// Functions +void chRise() { + attachInterrupt(0, chFall, FALLING); + chStart = micros(); +}; + +void chFall() { + attachInterrupt(0, chRise, RISING); + chValue = micros() - chStart; +}; diff --git a/aerei/cirso/trigger_transition/trigger_transition.ino b/aerei/cirso/trigger_transition/trigger_transition.ino new file mode 100644 index 0000000..5a6c8b1 --- /dev/null +++ b/aerei/cirso/trigger_transition/trigger_transition.ino @@ -0,0 +1,116 @@ +/* Cirso TransStates + +Output: + 2 LED ai lati con lampeggio alternato + 1 LED in coda lampeggio a freq doppia + +Input: + 1 interruttore su interrupt 0 per accensione / spegnimento luci + +FSM per la gesrione delle transizioni tra i 2 stati. + +*/ + +#include + +// FSM gestione interruttore luci +enum { // Stati della FMS + On, // Acceso + toOff, // Trans On -> Off + Off, // Spento + toOn // Trans OFF -> On +} toggle = Off; + +// Variabili per interrupt 0 +volatile unsigned int chValue = 1500; // Valore computato +volatile unsigned int chStart = 1500; // Inizio rilevamento +const int soglia = 1400; // soglia per scatto toggle a 2 posizioni + +// Var FSM +unsigned long FSM_lastMillis = 0 ; // Timestamp per la FSM degli alettoni +unsigned long pausa = 2000; // Pausa per la transizione durante gli stati 2, 4 della FSM + +// Instanziamo gli oggetti per gli stati On / Off +Lampeggiatore left = 5; +Lampeggiatore right = 6; +Lampeggiatore coda = 9; + +// Instanziamo gli oggetti per gli stati di transizione +Pwm leftPWM = 5; +Pwm righatPWM = 6; +Pwm codaPWM = 9; + +void setup() { + // I PINs vengono impostati dal constructor al momento + // della dichiarazione dell'ogetto. + + right.Invert() ; // Opzionale: inverte l'ordine del lampeggio da + // HI -> LOW --> LOW -> HI + // per avere 2 LED che lampeggiano alternativamente +} + +void loop() { + +switch (toggle) { + case Off: + // Spento + left.Low(); + right.Low(); + coda.Low(); + + if (chValue > soglia) { + FSM_lastMillis = millis(); + toggle = toOn ; + } + break; + + case On: + // Acceso + left.Blink(); // Lampeggia con un default di 1sec (0.5 HI 0.5 LOW) + right.Blink(); + coda.Blink(1000); // Lampeggio in 1000ms = 1 secondo + + if (chValue <= soglia) { + FSM_lastMillis = millis(); + toggle = toOff ; + } + break; + + case ToOn: + // Trans off -> on + leftPWM.lUp(pausa); + rightPWM.lUp(pausa); + codaPWM.lUp(pausa); + + if (chValue > soglia && currentMillis - pausa > FSM_lastMillis ) { + toggle = On ; + } else if (chValue <= soglia) { + toggle = Off ; + } + break; + + case ToOff: + // Trans on -> off + leftPWM.lDown(pausa); + rightPWM.lDown(pausa); + codaPWM.lDown(pausa); + + if (chValue <= soglia && currentMillis - pausa > FSM_lastMillis ) { + toggle = Off ; + } else if (chValue > soglia) { + toggle = On ; + } + break; +} ; +} + +// Functions +void chRise() { + attachInterrupt(0, chFall, FALLING); + chStart = micros(); +}; + +void chFall() { + attachInterrupt(0, chRise, RISING); + chValue = micros() - chStart; +}; diff --git a/esempi/ailerons_state_rgb/ailerons_state_rgb.ino b/esempi/ailerons_state_rgb/ailerons_state_rgb.ino index 7eb4c25..3ffa994 100644 --- a/esempi/ailerons_state_rgb/ailerons_state_rgb.ino +++ b/esempi/ailerons_state_rgb/ailerons_state_rgb.ino @@ -21,7 +21,12 @@ TODO: unsigned long currentMillis; // timestamp reference per millis per tutto il loop // Un LED RGB -RGBLed ailerons(11,10,9,255); +RGBLed ailerons(11,10,9,255); // Common Cat + +// Transizione: Pwm +Pwm sxLamp(10); // Lampeggiatore +Pwm dxLamp(9); // Lampeggiatore + // Variabili per lettura canale servo const byte ailPin = A4; @@ -39,8 +44,11 @@ enum { // Stati della FMS dx // dx } ailstate = middle; +// Vars FSM unsigned long FSM_lastMillis = 0 ; // Timestamp per la FSM degli alettoni unsigned long pausa = 1000; // Pausa per la transizione durante gli stati 2, 4 della FSM + +// Vars Alettoni int mid_point = 1560 ; // centro del segnale, trimmato nel setup const int deviation = 50 ; // deviazione dal punto medio //per entrare nello stato successivo dal centro @@ -48,9 +56,12 @@ const int deviation = 50 ; // deviazione dal punto medio /////////////////////////////////////////////////////////// void setup() { -// Serial.begin(9600); // #define DEBUG +#ifdef DEBUG + Serial.begin(9600); +#endif + // Funzione relativa a calibrazione: mid_point = calibraTrim(ailPin) ; // + LED di servizio per monitor calibrazione } @@ -60,22 +71,20 @@ void loop() { // Lettura ailerons channel ogni 200ms if (currentMillis - ailTimer>= 200) { - ailTimer = currentMillis ; ailIn = pulseIn(ailPin, HIGH, 25000); - if (ailIn != 0 && ailIn > 960 && ailIn <2000) { + if (ailIn > 960 && ailIn <2000) { // get only resonable values ail = ailIn; + ailTimer = currentMillis ; } ; -// Lettura Aileron channel: FAKE con un potenziometro 10K -// ailIn = analogRead(3); -// ail = 1000 + ailIn } switch (ailstate) { case middle: + ailerons.White(); // Alettoni piatti if (ail > mid_point + deviation + deviation /3) { // extra margine per avere un po' di gioco @@ -86,12 +95,11 @@ void loop() { ailstate = dxin; FSM_lastMillis = currentMillis ; } ; - ailerons.Red(); break; case sxin: // Transizione a sx - ailerons.Off(); + sxLamp.(200); if (currentMillis - pausa > FSM_lastMillis ) { ailstate = sx; } @@ -111,7 +119,7 @@ void loop() { case dxin: // Transizione a dx - ailerons.Off(); + dxLamp.(200); if (currentMillis - pausa > FSM_lastMillis ) { ailstate = dx; } diff --git a/esempi/base_th/base_th.ino b/esempi/base_th/base_th.ino index 0bb90e6..5f53496 100644 --- a/esempi/base_th/base_th.ino +++ b/esempi/base_th/base_th.ino @@ -16,8 +16,11 @@ Pwm sotto = 9; // Variabili const byte thrPin = 3; // PIN collegato al CH3 -byte thr ; // Throttle -int thrIn ; +byte thr ; // Valore a 8bit per il throttle +int thrIn ; // Valore rilevato del 3 Ch della RX +const int thMin = 983; // In genere il valore minimo del TH resta costante, +// per calcolarlo si puo' usare la funzione di calibrazione nel setup + void setup() { // I PINs vengono impostati dal constructor al momento @@ -31,13 +34,12 @@ void setup() { void loop() { // Lettura CH3 thrIn = pulseIn(thrPin, HIGH, 25000); - if (thrIn != 0 && ailIn > 983 && ailIn < 2000) { // clean up - thr = map(thrIn, 983, 2000, 0, 255); // mappato su 8bit per PWM - } + if (thrIn >= thMin && thrIn < 2000) { // clean up + thr = map(thrIn, thMin, 2000, 0, 255); // mappato su 8bit per PWM + }; // Attivazione LEDs left.Blink(100 + thr); right.Blink(100 + thr); sotto.lSet(thr); // Luminosita' proporzionale al throttle - delay(10); // Opzionale } diff --git a/esempi/base_th_3stati/base_th_3stati.ino b/esempi/base_th_3stati/base_th_3stati.ino index 21656ae..f69bae1 100644 --- a/esempi/base_th_3stati/base_th_3stati.ino +++ b/esempi/base_th_3stati/base_th_3stati.ino @@ -20,47 +20,51 @@ Pwm rpwm = 11; // Variabili const byte thrPin = 3; // PIN collegato al CH3 -byte thr ; // Throttle -int thrIn ; +byte thr ; // Valore a 8bit per il throttle +int thrIn ; // Valore rilevato del 3 Ch della RX +const int thMin = 983; // In genere il valore minimo del TH resta costante, +// per calcolarlo si puo' usare la funzione di calibrazione nel setup + byte caso; 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. - right.Invert() ; // Opzionale: inverte l'ordine del lampeggio da - // HI -> LOW --> LOW -> HI - // per avere 2 LED che lampeggiano alternativamente + right.Invert() ; // Opzionale: inverte l'ordine del lampeggio da + // HI -> LOW --> LOW -> HI + // per avere 2 LED che lampeggiano alternativamente - randomSeed(analogRead(0)); + randomSeed(analogRead(0)); } void loop() { - // Lettura CH3 - thrIn = pulseIn(thrPin, HIGH, 25000); - thr = constrain(map(thrIn, 983, 2000, 0, 255), 0, 255) ; + // Lettura CH3 con pulsein, per usare interrupts vedi ../snippets. + thrIn = pulseIn(thrPin, HIGH, 25000); + if (thrIn >= thMin && thrIn < 2000) { // clean up + thr = thrIn ; + }; // Gestione throttle - if (thr > 0 && thr < 15) { - // IDLE - - rpwm.UD(2000); - lpwm.UD(2000); - sotto.lDown(1500); - } else if (thr < 245) { - // Throttle medio - - right.Blink(1120 - 4 * thr ); - left.Blink(1120 - 4 * thr ); - sotto.lSet(thr); // Luminosita' proporzionale al throttle - } else { - // Throttle al massimo: LED laterali lampeggiano a caso, - // Sotto luminosita' a caso + if (thr < 1050) { + // IDLE - caso = random(20, 240) ; - right.Swap(); - left.Swap(); - sotto.lSet(caso); - delay(caso); - } + rpwm.UD(2000); + lpwm.UD(2000); + sotto.lDown(1500); + } + else if (thr < 1900) { + // Throttle medio + right.Blink(1120 - 4 * thr ); + left.Blink(1120 - 4 * thr ); + sotto.lSet(map(thrIn, thMin, 2000, 0, 255)); // Luminosita' proporzionale al throttle + } + else { + // Throttle al massimo: LED laterali lampeggiano a caso, + // Sotto luminosita' a caso + caso = random(20, 240) ; + right.Swap(); + left.Swap(); + sotto.lSet(caso); + } } diff --git a/esempi/snippets/lettura_servo_ch_pulse_millis/lettura_servo_ch_pulse.ino b/esempi/snippets/lettura_servo_ch_pulse_millis/lettura_servo_ch_pulse_millis.ino similarity index 82% rename from esempi/snippets/lettura_servo_ch_pulse_millis/lettura_servo_ch_pulse.ino rename to esempi/snippets/lettura_servo_ch_pulse_millis/lettura_servo_ch_pulse_millis.ino index abee674..81cdd77 100644 --- a/esempi/snippets/lettura_servo_ch_pulse_millis/lettura_servo_ch_pulse.ino +++ b/esempi/snippets/lettura_servo_ch_pulse_millis/lettura_servo_ch_pulse_millis.ino @@ -11,6 +11,7 @@ */ +#define DEBUG #include unsigned long currentMillis; // timestamp reference per millis per tutto il loop @@ -26,27 +27,31 @@ unsigned int freq = 200 ; // Ogni quanti millisecondi leggere il valore void setup() { // Funzione relativa a calibrazione: // mid_point = calibraTrim(chPin) +10 ; // Con pulse in c'e' una traslazione ~10 -//Serial.begin(9600); // Warning: interrupts e serial potrebbero dare problemi +#ifdef DEBUG +Serial.begin(9600); // Warning: interrupts e serial potrebbero dare problemi } ; +#endif void loop() { currentMillis = millis(); // Timestamp per tutto il loop // Lettura ailerons channel ogni 200ms if (currentMillis - chStamp >= freq) { - chStamp = currentMillis ; chIn = pulseIn(chPin, HIGH, 25000); if (chIn != 0 && chIn > 1000 && chIn <2000) { // get only resonable values chValue = chIn; + chStamp = currentMillis ; } ; }; // do something with chValue -// Serial.print(chValue); -// Serial.print(" - base: "); -// Serial.println(mid_point); -// delay(200); +#ifdef DEBUG + Serial.print(chValue); + Serial.print(" - base: "); + Serial.println(mid_point); + delay(200); +#endif } diff --git a/esempi/snippets/lettura_servo_interrupt/lettura_servo_interrupt.ino b/esempi/snippets/lettura_servo_interrupt/lettura_servo_interrupt.ino index 91cd7c6..e52cade 100644 --- a/esempi/snippets/lettura_servo_interrupt/lettura_servo_interrupt.ino +++ b/esempi/snippets/lettura_servo_interrupt/lettura_servo_interrupt.ino @@ -7,7 +7,7 @@ */ #include - +#define DEBUG // Variabili per interrupt 0 volatile unsigned int chValue = 1500; // Valore computato @@ -21,14 +21,19 @@ void setup() { // Funzione relativa a calibrazione con pulsein: mid_point = calibraTrim(chPin) ; // Calibrazione del TRIM attivo sul canale attachInterrupt(0, chRise, RISING); // PIN 2 su 328p / 168 +#ifdef DEBUG Serial.begin(9600); // Warning: interrupts e serial potrebbero dare problemi } ; +#endif +} ; void loop() { +#ifdef DEBUG Serial.print(chValue); Serial.print(" - base: "); Serial.println(mid_point); delay(200); +#endif } // Functions diff --git a/esempi/snippets/lettura_servo_interrupt_doppio/lettura_servo_interrupt_doppio.ino b/esempi/snippets/lettura_servo_interrupt_doppio/lettura_servo_interrupt_doppio.ino index db1922a..9add4e9 100644 --- a/esempi/snippets/lettura_servo_interrupt_doppio/lettura_servo_interrupt_doppio.ino +++ b/esempi/snippets/lettura_servo_interrupt_doppio/lettura_servo_interrupt_doppio.ino @@ -7,6 +7,7 @@ */ #include +#define DEBUG // Variabili per interrupt 0 si PIN 2 @@ -31,11 +32,14 @@ void setup() { mid_point3 = calibraTrim(chPin3) ; // Calibrazione del TRIM attivo sul canale attachInterrupt(0, chRise2, RISING); // PIN 2 su 328p / 168 attachInterrupt(1, chRise3, RISING); // PIN 3 su 328p / 168 -Serial.begin(9600); // Warning: interrupts e serial potrebbero dare problemi +#ifdef DEBUG +Serial.begin(9600); } ; +#endif void loop() { - +// Il loop fa solo debug +#ifdef DEBUG Serial.print("PIN2: "); Serial.print(chValue2); Serial.print(" -base: "); @@ -46,6 +50,7 @@ void loop() { Serial.print(" -base: "); Serial.println(mid_point3); delay(200); +#endif } // Functions diff --git a/esempi/state_throttle/state_throttle.ino b/esempi/state_throttle/state_throttle.ino index 7220876..9509771 100644 --- a/esempi/state_throttle/state_throttle.ino +++ b/esempi/state_throttle/state_throttle.ino @@ -18,12 +18,12 @@ enum { // Stati della FMS // Due LED con lampeggio alternato: Lampeggiatore right = 3; Lampeggiatore left = 5; -Pwm motor = 7; +Pwm motore = 7; const byte thrPin = A3; byte thr ; // Valore a 8bit per il throttle int thrIn ; // Valore rilevato del 3 Ch della RX - +const int thMin = 983; // In genere il valore minimo del TH resta costante, void setup() { @@ -38,9 +38,10 @@ void loop() { //thr = constrain(thrIn / 4 , 0, 255) ; // Lettura Throttle channel - thrIn = pulseIn(thrPin, HIGH, 25000); - thr = constrain(map(thrIn, 983, 2000, 0, 255), 0, 255) ; // 983 potrebbe cambiare - // con un altra ricevente, fare una calibrazione nel caso. + thrIn = pulseIn(thrPin, HIGH, 25000); + if (thrIn >= thMin && thrIn < 2000) { // clean up + thr = map(thrIn, thMin, 2000, 0, 255); // mappato su 8bit per PWM + } ; // FMS dispatcher if ( thr < 10 ) { @@ -71,7 +72,7 @@ void loop() { // lampeggi e PWM a caso right.Swap(); left.Swap(); - motore.lSet(random(0,255); + motore.lSet(random(0,255)); delay(random(20, 100)); break; } diff --git a/esempi/toggle_transition/toggle_transition.ino b/esempi/toggle_transition/toggle_transition.ino new file mode 100644 index 0000000..0b49d9b --- /dev/null +++ b/esempi/toggle_transition/toggle_transition.ino @@ -0,0 +1,103 @@ +/* Toggle con transizioni tra On | OFF + +Output esempio: + 1 Lampeggiatore in coda. + +Input: + 1 interruttore su interrupt 0 per accensione / spegnimento luci + +FSM per la gesrione delle transizioni tra i 2 stati. + +*/ + +#include + +// FSM gestione interruttore luci +enum { // Stati della FMS + On, // Acceso + toOff, // Trans On -> Off + Off, // Spento + toOn // Trans OFF -> On +} toggle = Off; + +// Variabili per interrupt 0 +volatile unsigned int chValue = 1500; // Valore computato +volatile unsigned int chStart = 1500; // Inizio rilevamento +const int soglia = 1400; // soglia per scatto toggle a 2 posizioni + +// Var FSM +unsigned long FSM_lastMillis = 0 ; // Timestamp per la FSM degli alettoni +unsigned long pausa = 2000; // Pausa per la transizione durante gli stati 2, 4 della FSM + +// Instanziamo gli oggetti per gli stati On / Off +Lampeggiatore coda = 9; + +// Instanziamo gli oggetti per gli stati di transizione +Pwm codaPWM = 9; + +void setup() { + // I PINs vengono impostati dal constructor al momento + // della dichiarazione dell'ogetto. + + right.Invert() ; // Opzionale: inverte l'ordine del lampeggio da + // HI -> LOW --> LOW -> HI + // per avere 2 LED che lampeggiano alternativamente +} + +void loop() { + +switch (toggle) { + case Off: + // Spento + coda.Low(); + + if (chValue > soglia) { + FSM_lastMillis = millis(); + toggle = toOn ; + } + break; + + case On: + // Acceso + coda.Blink(1000); // Lampeggio in 1000ms = 1 secondo + + if (chValue <= soglia) { + FSM_lastMillis = millis(); + toggle = toOff ; + } + break; + + case ToOn: + // Trans off -> on + codaPWM.lUp(pausa); + + if (chValue > soglia && currentMillis - pausa > FSM_lastMillis ) { + toggle = On ; + } else if (chValue <= soglia) { + toggle = Off ; + } + break; + + case ToOff: + // Trans on -> off + codaPWM.lDown(pausa); + + if (chValue <= soglia && currentMillis - pausa > FSM_lastMillis ) { + toggle = Off ; + } else if (chValue > soglia) { + toggle = On ; + } + break; +} ; +} + +// Functions +void chRise() { + attachInterrupt(0, chFall, FALLING); + chStart = micros(); +}; + +void chFall() { + attachInterrupt(0, chRise, RISING); + chValue = micros() - chStart; +}; diff --git a/libraries/common/TODO b/libraries/common/TODO index bfd3808..5ab7c7a 100644 --- a/libraries/common/TODO +++ b/libraries/common/TODO @@ -1,11 +1,4 @@ -* aggiungere un displace temporale ai blink / pwm * Flasher con sequenza arbitraria di lampeggio * oggetti che lavorino contemporaneamente su piu' PIN * Link a Schemi / Schemi -* esempio con state machine per flight modes -** battery voltage reader -> RGB -** digital compass e RGB -** barometer -** 6 axis -** Neopixel diff --git a/libraries/common/common.cpp b/libraries/common/common.cpp index 5a7230d..e696ff4 100644 --- a/libraries/common/common.cpp +++ b/libraries/common/common.cpp @@ -177,19 +177,16 @@ void Lampeggiatore::Blink(long up, long down, long drift ) { 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)); } diff --git a/libraries/common/library.properties b/libraries/common/library.properties new file mode 100644 index 0000000..8f17f8a --- /dev/null +++ b/libraries/common/library.properties @@ -0,0 +1,9 @@ +name=Common: oggetti comuni non blocking +version=1.0 +author=Andrea Manni +maintainer=Andrea Manni +sentence=Vari oggetti e funzioni per la gestione delle luci. +paragraph=Elementi di base per lampeggi, fade e sequenze di luci tramite codice non blocking. Realizzati durante i corsi di Arduino di Andrea Manni su piffa.net . +category=Display +url=https://piffa.net +architectures=* -- 2.39.2