Arduino, istruzione if fra due valori.

Il 07/10/19 23:50, Franz_aRTiglio ha scritto:

Sono costanti predefinite:

1 == true == HIGH 0 == false == LOW

Tant'e` vero che (1 + true + HIGH) == 3 :)

Reply to
Claudio_F
Loading thread data ...

per via dei multistati pull_up/down ?

Reply to
Franz_aRTiglio

Il 08/10/19 00:08, Franz_aRTiglio ha scritto:

eh? (cit.)

Reply to
Claudio_F

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); } }

Reply to
Franz_aRTiglio

Il 08/10/2019, Claudio_F ha detto :

per me e' la cipolla (semicit.)

Reply to
Franz_aRTiglio

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...

Reply to
Franz_aRTiglio

Il 08/10/2019, Franz_aRTiglio ha detto :

dislessia portami via, manca un "capito":

capito

Reply to
Franz_aRTiglio

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.
Reply to
Claudio_F

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)

Reply to
Claudio_F

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.

Reply to
Franz_aRTiglio

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; } }

Reply to
Claudio_F

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:

Reply to
Drizzt do'Urden

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 :-)

Reply to
Drizzt do'Urden

thread.

Prova questo sito di simulazione con arduino :

formatting link

programmazione, funziona bene.

In questo caso non ti aspettare la giusta soluzione in simulazione :)

Reply to
Franco Af

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); } }

Reply to
Drizzt do'Urden

Il 08/10/2019 11:53, Franco Af ha scritto:

Grazie :-)

Reply to
Drizzt do'Urden

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.

--

- Vuoi la risposta in cm o in Euro?
Reply to
Archaeopteryx

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

Reply to
Franz_aRTiglio

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?

Reply to
Claudio_F

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.

--
Saluti da Drizzt. 


www.agidone.altervista.org 
http://www.tappezzeriagraziella.com/ 
MAI PIU' OPEL IN VITA MIA!!!!
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.