leggere tempo pulsante premuto...

Non solo, suppongo che ora le cose siano cambiate ma alcuni dei debuggers non recenti vedevano il codice generato dal compilatore come una specie di istruzione atomica, in pratica niente breakpoints tra le virgole.

in quei cicli for come:

for( ic = 0 , jc = 2 ; ic < 200 ; ic++, jc+=2 )

--
- Thanks for introducing me to minimalims. 
- It's the least I could do.
Reply to
Archaeopteryx
Loading thread data ...

Sospetto ma solo sospetto che tu stia pensando al

si scoprisse nel corso del trhead che si arriva proprio al multithreading, che io sappia arduino non lo consente.

--
- Thanks for introducing me to minimalims. 
- It's the least I could do.
Reply to
Archaeopteryx

Il 10/09/19 13:39, Drizzt do'Urden ha scritto:

Che se non ho capito male e` quello che chiedevi: un modo / segnale / variabile per rilevare che un pulsante e` rimasto premuto per almeno un secondo.

Non ho capito il dubbio.

Io parto dal presupposto che il loop venga lasciato girare liberamente migliaia di volte al secondo (o decine di migliaia), e che con appositi 'if' si catturino delle condizioni/eventi da gestire (il piu` velocemente possibile) nel momento in cui si manifestano.

Quella riga dice che se il pulsante non e`premuto allora l'uscita 'q' viene mantenuta a zero e la variabile 't' insegue l'incremento del contatore interno letto da millis. altrimenti (pulsante premuto) l'uscita 'q' viene portata a uno appena il valore di millis si e` allontanato di un secondo dal valore di 't' (che quando il pulsante e` premuto non varia piu`).

Reply to
Claudio_F

Il 10/09/19 18:21, Archaeopteryx ha scritto:

Certo, e la sottrazione e` scritta giusta, non c'e` nessun problema di overflow (che avverrebbe quando millis torna a zero).

Parlo del fatto che con il solo contatore letto da millis *in ogni caso* non si possono misurare tempi maggiori di 2 alla 32 millisecondi.

Reply to
Claudio_F

sfiga per far verificare il problema ma essendo la fortuna cieca...

--
- Thanks for introducing me to minimalims. 
- It's the least I could do.
Reply to
Archaeopteryx

Il 10/09/2019 18:29, Claudio_F ha scritto:

tempo era sempre lo stesso e ho capito che dipendeva dal tempo del ciclo.

ecco non avevo capito una mazza, potresti, con calma, argomentare ogni riga? Sono duro a capire e se non mi spiegate ogni istruzione come si comporta non riesco a capire :-)

byte in = (digitalRead(...) == PRESSLEVEL); if (!in) { q=0; t=millis(); } else if (millis()-t > 1000) { q=1; }

--
Saluti da Drizzt. 


www.agidone.altervista.org 
http://www.tappezzeriagraziella.com/ 
MAI PIU' OPEL IN VITA MIA!!!!
Reply to
Drizzt do'Urden

Il 10/09/2019 18:53, LAB ha scritto:

vero, avevo pensato anche di usare sensori di hall come pulsanti,

stampante 3D e non ho idea di come progettarli.

--
Saluti da Drizzt. 


www.agidone.altervista.org 
http://www.tappezzeriagraziella.com/ 
MAI PIU' OPEL IN VITA MIA!!!!
Reply to
Drizzt do'Urden

provocare una reazione positiva, a meno che tu non sappia

un valore. Esempio facile

int a , b , c = 1 ; a = b = c ;

b = c ;

un'assegnazione. Ma questa operazione torna un valore,

dell'espressione a destra, quindi puoi assegnarla a una variabile, in questo caso "a", se parentesizzato si vede meglio:

a = ( b = c ) ;

Ora guarda

byte in = (digitalRead(...) == PRESSLEVEL);

l'espressione booleana vale uno altrimenti zero. E come

uguale a PRESSLEVEL "in" vale 1 altrimenti vale zero.

--
- Thanks for introducing me to minimalims. 
- It's the least I could do.
Reply to
Archaeopteryx

Il 10/09/19 18:37, Archaeopteryx ha scritto:

E' poco probabile che qualcuno tenga pigiato un pulsante per 51 giorni, ma su qualsiasi altro automatismo acceso h24 stai certo che succede.

Comunque basta usare millis a 16 bit e il "problema" si verifica ogni 65 secondi e mezzo ;)

#define LEDONBOARD 13

uint16_t t = 0; uint16_t now;

void setup() { pinMode(LEDONBOARD, OUTPUT); }

void loop() { now = uint16_t(millis()); digitalWrite(LEDONBOARD, (now-t > 1000)); }

Reply to
Claudio_F

Simpatica la soluzione :) Giusto per pigrizia che non mi

utilissima e la volevo da tanto senza sapere che la volessi?

--
- Thanks for introducing me to minimalims. 
- It's the least I could do.
Reply to
Archaeopteryx

Il 10/09/19 19:16, Archaeopteryx ha scritto:

E' un refuso, volevo scrivere un cast... pero` funziona lo stesso :D

Reply to
Claudio_F

"Claudio_F" ha scritto nel messaggio news:ql8hul$hn2$ snipped-for-privacy@gioia.aioe.org...

punto

nuovo

sicuramente, ma questo non vuol dire che non sia equivalente al tuo codice. quello che scrivi succede anche con il tuo codice, la mia riga equivale al tuo codice.

Reply to
alfio

Il 10/09/19 20:03, alfio ha scritto:

None :) La variabile 'q' e` come un flip-flop, viene settata dalla condizione, ma non puo` tornare a zero finche' non si molla il bottone.

Reply to
Claudio_F

"Claudio_F" ha scritto nel messaggio news:ql8p8c$1le5$ snipped-for-privacy@gioia.aioe.org...

ecciairaggione :-)

Reply to
alfio

Il 10/09/19 18:52, Drizzt do'Urden ha scritto:

La prima riga come hanno gia` spiegato calcola un'espressione booleana/logica. Come ci sono le espressioni aritmetiche, ci sono quelle booleane/logiche, che forniscono come risultato sempre e solo 0 o 1.

Alla fine ogni 'if' considera solo lo 0 o l'1 prodotti dall'espressione logica scritta tra le parentesi (0 e 1 corrispondono a false e true). Ma questo valore (dell'espressione) si puo` anche assegnare ad una variabile (in questo caso 'in').

E tutto questo serve per far si che la variabile 'in' sia a uno quando il pulsante e` premuto, indipendentemente dal fatto che la pressione del pulsante fornisca LOW o HIGH, il che dipende dai collegamenti e dal tipo di pulsante normalmente aperto o chiuso.

Ragionare in logica positiva, e non a livelli hardware magari invertiti, e` piu` facile. Quindi basta definire all'inizio la costante PRESSLEVEL con il valore del livello letto a pulsante premuto.

Dopo di che la riga:

in = (digitalRead(...) == PRESSLEVEL);

e` solo la forma compressa di:

if (digitalRead(...) == PRESSLEVEL) { in = 1; } else { in = 0; }

Poi il valore di 'in' viene usato dalla riga successiva, e scrivere:

if (!in)

e` la stessa cosa di scrivere:

if (in == 0)

La prima forma si puo` leggere: se non (NOT !) uno, che nel nostro caso significa "se non premuto"

La seconda si puo` leggere: se zero, che vuol sempre dire "se non premuto"

Reply to
Claudio_F

In data settembre 2019 alle ore 15:50:38, Giorgio ha scritto:

o

dipende,mi dice Drizzt che Arduino ne ha pochi,allora capisco in altri casi con cui ho spesso a che fare,soprattutto se =E8 richiesto il = basso consumo, l'interrupt da pulsante che risveglia il micro =E8 indispensabile,in modo d= a evitare di stare in run a fare il polling,i consumi possono diminuire di

3000 volte (es da 3 mA a 1 uA)
--
Questa email =E8 stata esaminata alla ricerca di virus da AVG. 
http://www.avg.com
Reply to
blisca

Il 10/09/2019 20:50, blisca ha scritto:

arduino.

Reply to
Drizzt do'Urden

Il 10/09/2019 20:45, Claudio_F ha scritto:

ok ragazzi, siete gentilissimi e queste spiegazioni mi servono

anche il micro quindi sono fermo :-(

comune col micro, l'alimentatore fa passare uno spike di diverse decine

postazione dove faccio le prove e non lo uso praticamente mai.

nel frattempo mi alleno a leggere listati, cercando di capirli :-)

Grazie ancora per la vostra pazienza :-)

Reply to
Drizzt do'Urden

Il 10/09/2019 19:06, LAB ha scritto:

Praticamente con il condensatore da 0,5uF, una resistenza da 1k in serie al pulsante e una da 390k in parallelo al condensatore verso massa ho un ritardo di mezzo secondo, visto che ho letto che i pin digitali leggono lo stato alto a meno di 5V, mi sembra 4,3 ma ora non trovo dove l'ho letto, ho fatto diverse prove anche con l'oscilloscopio collegato e ha sempre funzionato bene anche creando ad arte diversi rimbalzi, per ora

non voglio mettere un operazionale, se prorpio non ce la faccio monto due sensori di hall sui pulsanti della tenda che ho ora.

Reply to
Drizzt do'Urden

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.