Temporizzare azioni con millis
26 messaggi
• Pagina 3 di 3 • 1, 2, 3
0
voti
Grazie dei consigli, alla fine sono riuscito farlo funzionare (anche se non proprio come avevo in mente), ne ho provate di tutte:
- Codice: Seleziona tutto
// giorno2
if ( curr == 5 ) {
Serial.print("Fase: "); Serial.println("GIORNO2");
for ( int i=0; i<52; i++) {
{time = millis();
if ( time > time_acceso + 1000 ){ digitalWrite ( lampi, HIGH); time_acceso= millis(); time_spento= millis();}
if ( time > time_spento + 300 ){ digitalWrite ( lampi, LOW); time_spento = millis();}
if ( time > time_acceso2 + 2200 ){ digitalWrite ( lampi, HIGH); time_acceso2= millis(); time_spento2= millis(); }
if ( time > time_spento2 + 800 ){ digitalWrite ( lampi, LOW); time_spento2 = millis();}
if ( time > time_acceso3 + 4400 ){ digitalWrite ( lampi, HIGH); time_acceso3= millis(); time_spento3= millis(); }
if ( time > time_spento3 + 400 ){ digitalWrite ( lampi, LOW); time_spento3 = millis(); }}
analogWrite(alba, fade[i]);
if ( fade[i] < 125) analogWrite(sole, fade[(51-i)]*2 );
if ( fade[i] < 50) analogWrite(lampi, fade[(51-i)]*2 );
if ( fade[i] < 10) digitalWrite(luciint, 0 );
analogWrite(tramonto, 0 );
analogWrite(cometa, 0 );
analogWrite(stelleA, 0 );
analogWrite(stelleB, 0 );
digitalWrite(luciest, 0 );
delay( timeStepOld );
}
timeStepOld = (timeStepOld*52); // elapsed time
timeCurr = (timeCurr - timeStepOld);
delay( timeCurr );
}
-

dadothebest
24 2 7 - Frequentatore

- Messaggi: 229
- Iscritto il: 25 nov 2013, 17:13
- Località: Ascoli Piceno
0
voti
Ogni quanto devono accendersi o spegnersi i led?
Per un presepe non credo che occorrano lampeggiamenti di millisecondi, quindi io userei un timer che azzerandosi ogni 100 millisecondi triggera una funzione di interrupt con cui incremento delle variabili contatore per ogni led da comandare.
Nella funzione di interrupt, dopo aver incrementato tutti i contatori fai dei controlli con delle semplici if, sapendo che ogni numero contato sono 100ms.
Se contatore1 = 100 sono passati 10 secondi, accendo led1
Se contatore2 = 110 sono passati 11 secondi, accendo led2
Se contatore1 = 150 led1 è rimasto acceso 5 secondi lo spengo ed azzero contatore1
Se contatore2 = 200 led2 è rimasto acceso 10 secondi lo spengo ed azzero contatore2
e così via. Puoi usare anche altri contatori per contare quante volte hai azzerato ciascun contatore, per decidere che quel led non lo devi accendere più ecc...
E' una specie di multitasking, il codice da scrivere è molto più semplice ed il programma anche molto più compatto
Per un presepe non credo che occorrano lampeggiamenti di millisecondi, quindi io userei un timer che azzerandosi ogni 100 millisecondi triggera una funzione di interrupt con cui incremento delle variabili contatore per ogni led da comandare.
Nella funzione di interrupt, dopo aver incrementato tutti i contatori fai dei controlli con delle semplici if, sapendo che ogni numero contato sono 100ms.
Se contatore1 = 100 sono passati 10 secondi, accendo led1
Se contatore2 = 110 sono passati 11 secondi, accendo led2
Se contatore1 = 150 led1 è rimasto acceso 5 secondi lo spengo ed azzero contatore1
Se contatore2 = 200 led2 è rimasto acceso 10 secondi lo spengo ed azzero contatore2
e così via. Puoi usare anche altri contatori per contare quante volte hai azzerato ciascun contatore, per decidere che quel led non lo devi accendere più ecc...
E' una specie di multitasking, il codice da scrivere è molto più semplice ed il programma anche molto più compatto

0
voti
Avevo già provato a fare come dici tu ma quando riscrivevo il programma nello sketch che già possiedo del presepe non funziona (eseguito da solo invece funziona) , esegue solo la prima operazione (accende il led e basta).
-

dadothebest
24 2 7 - Frequentatore

- Messaggi: 229
- Iscritto il: 25 nov 2013, 17:13
- Località: Ascoli Piceno
0
voti
Se postassi il codice incriminato lo si potrebbe analizzare...
-

SandroCalligaro
2.970 2 4 5 - G.Master EY

- Messaggi: 1181
- Iscritto il: 6 ago 2015, 19:25
0
voti
Scusate per il mio post assurdo!
Purtroppo non avevo aggiornato la pagina, e quindi ero rimasto parecchio indietro...
Purtroppo non avevo aggiornato la pagina, e quindi ero rimasto parecchio indietro...
-

SandroCalligaro
2.970 2 4 5 - G.Master EY

- Messaggi: 1181
- Iscritto il: 6 ago 2015, 19:25
26 messaggi
• Pagina 3 di 3 • 1, 2, 3
Chi c’è in linea
Visitano il forum: Nessuno e 2 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)

