Il 07/10/19 23:50, Franz_aRTiglio ha scritto:
Sono costanti predefinite:
1 == true == HIGH 0 == false == LOWTant'e` vero che (1 + true + HIGH) == 3 :)
Il 07/10/19 23:50, Franz_aRTiglio ha scritto:
Sono costanti predefinite:
1 == true == HIGH 0 == false == LOWTant'e` vero che (1 + true + HIGH) == 3 :)
per via dei multistati pull_up/down ?
Il 08/10/19 00:08, Franz_aRTiglio ha scritto:
eh? (cit.)
Il 07/10/2019, Franz_aRTiglio ha detto :
Poi leggo che il dialetto arduino supporta il boleano true e false quindi non servono proprio "ON e OFF":
Boolean tasto = (digitalRead(8) = HIGH)
ogni altro caso; rimaneggiando il tuo codice:
int stato; //e questo a che serve ???? non c'e' nel codice int conteggio;
const int PREMUTO = 1; const int RILASCIATO = 0;
long t0; long t;
void setup() { Serial.begin(9600); pinMode(8, INPUT); stato = RILASCIATO; //e questo a che serve ???? non c'e' nel codice conteggio = 0; }
void loop(){
Boolean tasto = (digitalRead(8) = HIGH) if ((conteggio == 0) && tasto == true) { conteggio = true; t0 = millis(); digitalWrite(12, HIGH); Serial.println("Premiuto tasto"); }
if ((conteggio == true) && (tasto == false)) { conteggio = false; t = millis() - t0; if ((t >= 100) && (t 1000){ digitalWrite (12, LOW);} Serial.print("tempo="); Serial.println(t); } }
Il 08/10/2019, Claudio_F ha detto :
per me e' la cipolla (semicit.)
Dopo dura riflessione, Franz_aRTiglio ha scritto :
intendevo: dato che non ho MAI maneggiato arduino non capisco lo scopo di HIGH e LOW se poi sono ridondanti con TRUE e FALSE, chiedevo per
diversi oltre che al riferimento mnemonico, io arrivo da una "scuola" ove ogni bit e ciclo macchina era preziosissimo e fatico a concepire
e domandavo se potesse avere un senso visto che se nonho male l'oggetto e' multistato on/pull_up/pull_down/off...
Il 08/10/2019, Franz_aRTiglio ha detto :
dislessia portami via, manca un "capito":
capito
Il 08/10/19 00:21, Franz_aRTiglio ha scritto:
Immagino che gli ideatori abbiano pensato di "astrarre":
- usare true/false per le condizioni e variabili booleane
- usare LOW/HIGH per i livelli di ingresso/uscita
- usare 0/1 dove si trattano valori numerici
...il tutto solo per "chiarezza" o_O
Il fatto e` che e` una chiarezza niente affatto chiara per i principianti quali sono la maggior parte degli utenti arduini
Personalmente non vedrei nessuna difficolta` nell'usare dappertutto solo
0 e 1.Il 08/10/19 00:15, Franz_aRTiglio ha scritto: > Boolean tasto = (digitalRead(8) = HIGH)
boolean tasto = (digitalRead(8) == HIGH)
ma allora ancora meglio e piu` espressivo:
boolean premuto = (digitalRead(8) == HIGH)
Claudio_F ha spiegato il 08/10/2019 :
guarda, mi son trattenuto dal postare arcani tipo
if ( variabile = true == true) per semplificare per non complicargli
simulatore e ora sto pasticciando, tempo permettendo.
Il 07/10/19 17:03, Drizzt do'Urden ha scritto:
Il problema e` che va eliminato sia all'attacco che al rilascio.
Effettuare il debounce dentro la logica di gestione e` complicatissimo.
Effettuarlo invece "a parte", appena dopo la lettura dell'ingresso, e dare alla logica un valore pulito, e` molto piu` semplice.
unsigned long t; boolean inConteggio; unsigned long tDeb; byte premutoPrec; //------------------------------------------------- void setup() { pinMode(8, INPUT); inConteggio = false; premutoPrec = LOW; tDeb = millis() } //------------------------------------------------- void loop() { boolean premuto = (digitalRead(8) == HIGH);
if (premuto == premutoPrec) { tDeb = millis(); } else if (millis()-tDeb > 50) { premutoPrec = premuto; } premuto = premutoPrec;
if (!inConteggio && premuto) { t = millis(); accendi(); inConteggio = true; } else if (inConteggio && !premuto) { unsigned long trascorso = millis() - t; if (trascorso > 1000) { spegni(); } inConteggio = false; } }
Il 07/10/2019 23:31, Franz_aRTiglio ha scritto:
Ciao e grazie per l'impegno, spero tanto non stiate "lavorando" per nulla visto quanto sono zuccone :-)
Il codice per misurare il tempo premuto l'ho preso da un tutorial di Paolo Aliverti, me li sto guardando per imparare qualcosa e mi sto anche
attivare l'uscita quando mi serve, effettivamente anche io mi sono
miglior chiarezza per chi non conosce l'elettronica:
Il 08/10/2019 00:15, Franz_aRTiglio ha scritto:
Dunque, stamattina, prima di fare qualsiasi modifica al programma ho creato un anti rimbalzo hardware, giusto per vedere come reagiva Arduino e infatti il programma funziona (al di la di come sia scritto, sicuramente da snellire), mi rimane il dubbio del funzionamento del if
non vedo altro motivo per cui i rimbalzi vengano visti. Ora provo anche il tuo listato :-)
thread.
Prova questo sito di simulazione con arduino :
programmazione, funziona bene.
In questo caso non ti aspettare la giusta soluzione in simulazione :)
Il 08/10/2019 00:15, Franz_aRTiglio ha scritto:
Ho provato e con le dovute modifiche date dal linguaggio di arduino, funziona pure questo perfettamente, naturalmente con l'anti rimbalzo hardware, senza fa lo stesso difetto:
const int PREMUTO = 1; const int RILASCIATO = 0; int stato; int conteggio; long t0; long t;
void setup() { Serial.begin(9600); pinMode(2, INPUT); pinMode (12, OUTPUT); stato = RILASCIATO; //e questo a che serve ???? non c'e' nel codice conteggio = 0; }
void loop(){
boolean tasto = (digitalRead(2) == true); if ((conteggio == 0) && tasto == HIGH) { conteggio = HIGH; t0 = millis(); digitalWrite(12, HIGH); Serial.println("Premiuto tasto"); }
if ((conteggio == HIGH) && (tasto == LOW)) { conteggio = LOW; t = millis() - t0; if ((t >= 100) && (t 1000){ digitalWrite (12, LOW);} Serial.print("tempo="); Serial.println(t); } }
Il 08/10/2019 11:53, Franco Af ha scritto:
Grazie :-)
casi simili a quelli di un campo di database che distingue tra valore nullo e campo non assegnato. Non sono nel linguaggio C/C++ ma si incontrano spessissimo programmando.
Nel suo scritto precedente, Drizzt do'Urden ha sostenuto : ro che
No: e' il risultato logico dei controlli tra le parentesi:
int zz;
void loop() { zz++; if (zz >10 && zz
Il 08/10/19 11:20, Drizzt do'Urden ha scritto:
Alla pressione mi sembra che non ci siano effetti negativi sull'uscita, la variabile conteggio puo` oscillare un po' di volte da ON a OFF e viceversa ma l'uscita HIGH rimane HIGH (a proposito la digitalWrite HIGH nel secondo if non serve a niente, l'uscita e` gia` stata accesa nel primo if).
Invece al rilascio ogni rimbalzo fa riattivare il primo if e riaccendere l'uscita.
Hai visto anche la mia soluzione dell'1:22?
Il 08/10/2019 17:41, Claudio_F ha scritto:
Si, l'ho vista ora, oggi ho avuto da fare e non ho avuto tempo di fare delle prove, spero domani pomeriggio... non riesco mai a seguire la cosa come vorrei.
Have something to add? Share your thoughts — no account required.
Ask the community — no account required