Go Down

Topic: far lampeggiare display 7 segmenti in multiplex (Read 913 times) previous topic - next topic

gingardu

che cosa si potrebbe fare per far lampeggiare metà dei display a 7 segmenti  che sono gia pilotati IN MULTIPLEX  in determinate condizioni
es:  se (if) temperatura <30 gradi  2 display (quelli che segnano la temperatura ) lampeggiano,  gli altri invece restano accesi fissi (altri 2 display)


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

leo72

Puoi semplicemente aggiungere un check con millis all'interno della tua routine di visualizzazione in multiplex dove metti ad esempio un controllo per cui ogni 500 ms inverti lo stato di una variabile. Se la variabile è false o 0, il display è spento, se è true o 1 visualizzi (in mutiplex) i dati

gingardu


Puoi semplicemente aggiungere un check con millis all'interno della tua routine di visualizzazione in multiplex dove metti ad esempio un controllo per cui ogni 500 ms inverti lo stato di una variabile. Se la variabile è false o 0, il display è spento, se è true o 1 visualizzi (in mutiplex) i dati


quindi è come avevo pensato, millis è l'unica ( o c'è altro? )   delay non se ne parla neppure
se no blinka tutto  :.
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

leo72

Con delay non puoi perché ti blocca il codice per cui durante il delay non puoi multiplexare il display.

Potresti provare ad usare il leOS   :smiley-yell:
Crei 2 task. Il primo task lo imposti per il multiplexing del display, così che visualizzi le info.
Se si attiva l'allarme, crei un secondo task che mette in pausa e riattiva il primo ad intervalli cadenzati. Terminata la situazione di allarme, cancelli il secondo task e lasci andare il primo  ;)

Non so se funziona né se hai altre librerie nel tuo codice che potrebbero usare il timer 2.

gingardu


Con delay non puoi perché ti blocca il codice per cui durante il delay non puoi multiplexare il display.

Potresti provare ad usare il leOS   :smiley-yell:
Crei 2 task. Il primo task lo imposti per il multiplexing del display, così che visualizzi le info.
Se si attiva l'allarme, crei un secondo task che mette in pausa e riattiva il primo ad intervalli cadenzati. Terminata la situazione di allarme, cancelli il secondo task e lasci andare il primo  ;)

Non so se funziona né se hai altre librerie nel tuo codice che potrebbero usare il timer 2.


allora:  il miniprogetto deve fare queste cose  2 coppie di cifre   una misura la pressione 0-2,5 bar una misura la temperatura da -9  a 99 gradi,
piu 2 led che segnalano 2 elettrovalvole a 12 volt, se sono  aperte

se le 2 elettrovalvole sono entrambe aperte e la temperatura e sotto trenta gradi  la temperatura deve lampeggiare

se la pressione è a 0',9 o meno    la pressione deve lapeggiare
se la pressione è a piu di 2 bar la presiione deve lampeggiare
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

leo72

Ci sono tanti modi per farlo.
Come detto, il più semplice è usare millis e alternare la visualizzazione del display per simulare il lampeggio. L'ho già fatto, è semplicissimo. Si tratta solo di mettere nel codice del multiplex un check su una variabile di controllo: se è 1/true, fai vedere i dati, se è 0/false no.
Nel loop principale metti un check su millis. Dai l'intervallo che piace a te e poi alterni la variabile suddetta. Fine.

Ovviamente il check su millis è attivo se è attiva la condizione di allarme. Una cosa del genere, in blocchi:

1) controllo stato
2) lo stato è a posto? Sì, variabile su NoLampeggio e salto a 6)
3) No, check su millis.
4) E' passato l'intervallo preposto?
5) Sì, alterno la variabile tra NoLampeggio e SìLampeggio
6) chiamo il multiplex
7) torno a 1)

Go Up