Pages: [1]   Go Down
Author Topic: Chiarimenti su ciclo for  (Read 404 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Full Member
***
Karma: 0
Posts: 128
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao ragazzi,
datemi una dritta....

Ho realizzato un piccolo programmino per la gestione di una lampada led, accensione e spegnimento ad orari stabiliti, sequenza di accensione, controllo automatico/manuale, tutto diviso in funzioni.Ora vorrei farla accendere in modo graduale fino ad arrivare alla massima potenza in circa un'ora.....bene....come il playground insegna, posso utilizzare il ciclo for per il pwm ma questo ovviamente non "legge" il resto del programma fino a quando non finisce il suo lavoro.Io però voglio, anche durante questa fase, poter interagire con le altre funzioni!!!
L'unica cosa che mi viene in mente è copiare tutte le funzioni all'interno del for ma qualcosa mi dice che non è corretto smiley-confuse
Probabilmente sono completamente fuori strada ma non riesco a pensare ad altre soluzioni.....voi che dite?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ti consiglio di guardare l'esempio BlinkWithoutDelay che fa al caso tuo. Esso sfrutta il controllo temporale basato su millis per eseguire un'azione ad un intervallo prestabilito senza bloccare il resto del programma
Logged


0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 2795
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si sei fuori strada.

La funzione loop() è già un for infinito, per cui devi chiamare le funzioni che devono sempre ritornare al chiamante che deve essere sempre la funzione loop(). Certo è possibile chiamare una funzione che ne chiama un'altra e via di seguito, ma alla fine e in un tempo accettabile si deve tornare ad eseguire codice presente nella funzione loop().

Devi trovare il modo di apportare una variazione del PWM per ogni ciclo del loop principale.

Puoi usare un  contatore miopwm++ seguito da un controllo if (miopwm > maxpwm) miopwm = 0, riparte da 0.

Posta un po il codice, che hai scritto.

Ciao.
Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

Pages: [1]   Go Up
Jump to: