Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Temporizzare azioni con millis

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[21] Re: Temporizzare azioni con millis

Messaggioda Foto Utentebalduzz » 11 dic 2016, 18:25

Foto Utentedadothebest metti if n<7 perché il conteggio inizia da zero!
Avatar utente
Foto Utentebalduzz
1.541 1 4 7
Expert
Expert
 
Messaggi: 642
Iscritto il: 6 ott 2015, 9:59
Località: Brescia

0
voti

[22] Re: Temporizzare azioni con millis

Messaggioda Foto Utentedadothebest » 12 dic 2016, 11:32

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 );
}
Avatar utente
Foto Utentedadothebest
24 2 7
Frequentatore
Frequentatore
 
Messaggi: 229
Iscritto il: 25 nov 2013, 17:13
Località: Ascoli Piceno

0
voti

[23] Re: Temporizzare azioni con millis

Messaggioda Foto UtenteIlGuru » 12 dic 2016, 12:10

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
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
5.482 2 10 13
G.Master EY
G.Master EY
 
Messaggi: 1924
Iscritto il: 31 lug 2015, 23:32

0
voti

[24] Re: Temporizzare azioni con millis

Messaggioda Foto Utentedadothebest » 12 dic 2016, 14:11

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).
Avatar utente
Foto Utentedadothebest
24 2 7
Frequentatore
Frequentatore
 
Messaggi: 229
Iscritto il: 25 nov 2013, 17:13
Località: Ascoli Piceno

0
voti

[25] Re: Temporizzare azioni con millis

Messaggioda Foto UtenteSandroCalligaro » 13 dic 2016, 9:24

Se postassi il codice incriminato lo si potrebbe analizzare...
Avatar utente
Foto UtenteSandroCalligaro
2.970 2 4 5
G.Master EY
G.Master EY
 
Messaggi: 1181
Iscritto il: 6 ago 2015, 19:25

0
voti

[26] Re: Temporizzare azioni con millis

Messaggioda Foto UtenteSandroCalligaro » 14 dic 2016, 0:22

Scusate per il mio post assurdo! :(
Purtroppo non avevo aggiornato la pagina, e quindi ero rimasto parecchio indietro...
Avatar utente
Foto UtenteSandroCalligaro
2.970 2 4 5
G.Master EY
G.Master EY
 
Messaggi: 1181
Iscritto il: 6 ago 2015, 19:25

Precedente

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti