Pages: [1]   Go Down
Author Topic: Istruzioni "simultanee"  (Read 896 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 4
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buongiorno a tutti,
nuovo del forum ho iniziato ad utilizzare Arduino da qualche mese.
Devo fare innanzitutto i complimenti a tutti coloro che partecipano, è davvero un grande progetto!
Sono ora alle prese con un LCD, qualche tasto e un sensore di temperatura ma mi servirebbero alcune indicazioni.

Utilizzo un analog input con un partitore di tensione per acquisire la temperatura da un NTC e lo visualizzo sull'LCD. In contemporanea vorrei però riuscire ad eccitare un relay per 30 secondi in seguito alla pressione di un tasto.
Se utilizzo la funzione Delay() dopo aver acquisito lo stato del tasto mi si ferma chiaramente l'acquisizione mentre io vorrei che continuasse.
Cosa consigliate? Quale struttura adottare?

Grazie a tutti.
Logged

0
Offline Offline
Edison Member
*
Karma: 24
Posts: 2309
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,
invece di usare delay, utilizza millis:
http://www.arduino.cc/en/Reference/Millis

Qui trovi un thread dedicato aperto da nathanvi, che linka pure una guida ad hoc:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1265304289

Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 4
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie mille, letto tutto, oggi mi applico!
Gentilissimo.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 4
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Testato, spettacolo!
Ho però un problema, come faccio a lasciare acceso un led (per semplificare) per 30 secondi all'interno di questa struttura?
Deve essere abbastanza preciso e non dipendere da nulla (altro codice che aggiungerò più avanti).

Grazie ancora a tutti.
Logged

0
Offline Offline
Shannon Member
****
Karma: 131
Posts: 10473
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

salvi il niumero ritornato da millis() quando accendi il led, e lo spegni quando il valore ritornato da millis super quello salvato + numero di millisecondi da lasciare il led acceso  smiley-wink
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Newbie
*
Karma: 0
Posts: 4
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non la vedo così facile:
leggo lo stato del tasto, se premuto accendo il led, se no lo spengo.
Dove metti il contatore? Dove metti le istruzioni per lo spegnimento?
Potresti farmi un esempio?
Grazie mille.
« Last Edit: July 27, 2010, 05:02:11 pm by Appia » Logged

0
Offline Offline
Shannon Member
****
Karma: 131
Posts: 10473
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

inizializzo una variabile globale millisPartenza=0 e msCheDeveRimanereAcceso=30000(30 secondi)
loop(){
leggo lo stato del tasto; se premuto accendo il led e salvo il valore millis() in millisPartenza; se millisPartenza+msCheDeveRimanereAcceso < millis() allora spengo il led;
}

facile no?
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

in generale la programmazione con "delay" permette di creare dei loop dal tempo più o meno definito e quindi il nostro programma sembra lavorare con cadenza ciclica, ma a volte alcuni eventi all'interno del loop possono rallentarne l'esecuzione mandando all'aria la sincronizzazione di quelli successivi con risultati inpredicibili, in questi casi la funzione "mills", ci permette di avere una "precisa" linea temporale alla quale appendere i nostri eventi che verranno eseguiti allo scadere del tempo che abbiamo programmato.
Ho messo precisa fra virgolette perchè in verità anche la funzione mills sarebbe "disturbabile" ma se usata in congiunzione con gli interrupt diventa inflessibile. smiley-wink
« Last Edit: July 28, 2010, 12:06:36 am by brainbooster » Logged

0
Offline Offline
Shannon Member
****
Karma: 131
Posts: 10473
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mi spieghi sta cosa della millis disturbabile & interrupt?
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

date un'occhiata a questa discussione:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1237130632
Logged

Pages: [1]   Go Up
Jump to: