Che sarebbe la citazione di un certo film
una cosa del tipo “primavera estate autunno inverno e … ancora primavera”
Poi chi sa e cerca trova, chi non cerca ma aspetta la pappa pronta non trova nemmeno la “pappa fatta” quando gliela mostri…
tutto è nato da un certo numero di led che devono lampeggiare e poi anche alcuni fare fade in fade out
se cercate trovate qui vicino la discussione originale
come mio solito io parlo poco, nelle discussioni altrui
e nemmeno programmo molto, che’ non mi piace dare la pappa pronta ai pigri
però il lavoro lo ho svolto, e ne lascio qui il succo, che come ho detto, chi ha la voglia di cercare trova…
allora si comincia con un bel led lampeggiante su due tempi differenti
siccome i led saranno poi alla fine tanti parto da subito con un bell’array (di un solo elemento, per provare, poi si allunga)
// di Nelson-StandardOil
// IDE 1.8.10
// Progetto: albe tramonti e lampi
// Scopo:
// Data inizio lavori: 21/09/2020
// i pin dei led on off
byte pinonoff[] = {13};
// un solo pin per provare, poi ci si allarga
#define MAXONOFF sizeof pinonoff /sizeof pinonoff[0]
// i tempi dei led on off
unsigned long int ton[MAXONOFF] = {3000};
unsigned long int toff[MAXONOFF] = {500};
unsigned long int tstart[MAXONOFF];
bool statoonoff[MAXONOFF];
// solitamente uso strutture, ma qui ho volutamente lasciato semplice per i meno esperti
void setup(void)
{
// abilito i pin in output
for (byte i = 0; i < MAXONOFF; i++)
{
pinMode(pinonoff[i], OUTPUT);
}
}
void loop(void)
{
for (int i = 0; i < MAXONOFF; i++)
{
if (statoonoff[i])
{
if ((millis() - tstart[i]) > ton[i])
{
// spengo
digitalWrite(pinonoff[i], 0);
tstart[i] = millis();
statoonoff[i] = 0;
}
}
else
{
if ((millis() - tstart[i]) > toff[i])
{
// accendo
digitalWrite(pinonoff[i], 1);
tstart[i] = millis();
statoonoff[i] = 1;
}
}
}
}
come vedete faccio la prova col pin 13 (led on board)
ora si passa alla parte bella, si aggiunge un secondo led
// di Nelson-StandardOil
// IDE 1.8.10
// Progetto: albe tramonti e lampi
// Scopo:
// Data inizio lavori: 21/09/2020
// i pin dei led on off
byte pinonoff[] = {13, 11};
// due pin per continuare, ma basta aggiungere...
#define MAXONOFF sizeof pinonoff /sizeof pinonoff[0]
// i tempi dei led on off
unsigned long int ton[MAXONOFF] = {3000, 2500};
unsigned long int toff[MAXONOFF] = {500, 750};
unsigned long int tstart[MAXONOFF];
bool statoonoff[MAXONOFF];
// solitamente uso strutture, ma qui ho volutamente lasciato semplice per i meno esperti
void setup(void)
{
// abilito i pin in output
for (byte i = 0; i < MAXONOFF; i++)
{
pinMode(pinonoff[i], OUTPUT);
}
}
void loop(void)
{
for (int i = 0; i < MAXONOFF; i++)
{
if (statoonoff[i])
{
if ((millis() - tstart[i]) > ton[i])
{
// spengo
digitalWrite(pinonoff[i], 0);
tstart[i] = millis();
statoonoff[i] = 0;
}
}
else
{
if ((millis() - tstart[i]) > toff[i])
{
// accendo
digitalWrite(pinonoff[i], 1);
tstart[i] = millis();
statoonoff[i] = 1;
}
}
}
}
Ops, il programma è identico, salvo tre righe e un commento: ho aggiunto nella dichiarazione di array solo il nuovo piedino e i nuovi tempi
a dimostrazione che a pensare “prima” si fa meno fatica, dopo
e passiamo adesso alla fase con il fade
naturalmente uso la libreria fadeled.h, che si trova col gestore di librerie
anche qui dichiaro un array di fadeled, per la prima prova array di un solo elemento
// di Nelson-StandardOil
// IDE 1.8.10
// Progetto: albe tramonti e lampi
// Scopo:
// Data inizio lavori: 21/09/2020
// i pin dei led on off
byte pinonoff[] = {13};
// un solo pin per provare, poi ci si allarga
#define MAXONOFF sizeof pinonoff /sizeof pinonoff[0]
// i tempi dei led on off
unsigned long int ton[MAXONOFF] = {3000}; // tempo di ON per i led in ON/OFF
unsigned long int toff[MAXONOFF] = {500}; // tempo di OFF per i led in ON/OFF
unsigned long int tstart[MAXONOFF]; // ultimo istante di azionamento per i led ON/OFF
bool statoonoff[MAXONOFF]; // stato attuale dei led ON/OFF
// solitamente uso strutture, ma qui ho volutamente lasciato semplice per i meno esperti
// adesso il fade
#include <FadeLed.h>
FadeLed leds[] = {11};
#define FADENUM sizeof leds / sizeof leds[0]
unsigned long int fadeon[FADENUM] = {2000}; // tempo complessivo acceso per i led in fade-in (comprende il tempo di fadein)
unsigned long int fadeoff[FADENUM] = {1500}; // tempo complessivo spento per i led in fade-out (comprende il tempo di fadeout)
unsigned long int fadestart[FADENUM]; // ultimo istante di azionamento per il led in fade
bool statofade[FADENUM]; // stato attuale dei led in fade
unsigned long int fadetime[FADENUM] = {1000}; // tempo del fade (deve essere minore dei due tempi di acceso e spento)
void setup(void)
{
// abilito i pin in output
for (byte i = 0; i < MAXONOFF; i++)
{
pinMode(pinonoff[i], OUTPUT);
}
// definisco i tempi di fade
for (byte i = 0; i < FADENUM; i++)
{
leds[i].setTime(fadetime[i]);
}
}
void loop(void)
{
// ad ogni ciclo devo richiamare la FadeLed::update();
FadeLed::update();
for (int i = 0; i < MAXONOFF; i++)
{
if (statoonoff[i])
{
if ((millis() - tstart[i]) > ton[i])
{
// spengo
digitalWrite(pinonoff[i], 0);
tstart[i] = millis();
statoonoff[i] = 0;
}
}
else
{
if ((millis() - tstart[i]) > toff[i])
{
// accendo
digitalWrite(pinonoff[i], 1);
tstart[i] = millis();
statoonoff[i] = 1;
}
}
}
// adesso comando i fade
for (int i = 0; i < FADENUM; i++)
{
if (statofade[i])
{
if ((millis() - fadestart[i]) > fadeon[i])
{
// spengo
leds[i].set(0);
fadestart[i] = millis();
statofade[i] = 0;
}
}
else
{
if ((millis() - fadestart[i]) > fadeoff[i])
{
// accendo
leds[i].set(100);
fadestart[i] = millis();
statofade[i] = 1;
}
}
}
}
la seconda parte, quella del fade, è chiaramente un copia-incolla della prima, dopo aver semplicemente cambiato i nomi delle variabili con quelle usate per i led di fade
e usando la leds.set() invece della digitalWrite()
insomma si tratta dello stesso programma ripetuto, con solo delle modifiche ovvie
e con questo ho finito
a dimostrare che facendo quello che dico si fa quello che si vuole, chi sa cercare ha capito
gli altri… non ho parole
Ah, che sia chiaro: mi sono fatto ridare una UNO dal pestifero nipote (che ha mollato solo UNO, una resistenza da 1 K e un led rosso, il tirchio)
quindi lo ho provato: non venitemi a dire che non va, che’ prima vi plonko e poi vi dimentico