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.
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`).
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; }
"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.
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"
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
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.
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.