Salve ragazzi,
presento il problema:
nella sezione Loop ho questo pezzo di codice:
if (digitalRead(PinPulsante)){
isEnableSensori= !isEnableSensori;
if (isEnableSensori) digitalWrite(PinLED, HIGH);
else digitalWrite(PinLED, LOW);
}
il problema è che siccome non c'è il delay nella funzione loop non riesce a leggere il dato correttamente perché io sto spingendo il pulsante per 1s però lui sarà passato già x volte su digitalRead in 1 sec quindi io ho inserito un condensatore in parallelo di 100uF però a volte funziona a volte no, cioè magari per 3-4 volte se schiaccio il pulsante mi si accende il led (come potete vedere dal codice) altre volte se schiaccio il pulsante mi si accende e subito dopo mi si spegne come se avessi premuto 2 volte di seguito, ma ciò non è vero. A questo punto capisco che devo cambiare condensatore oppure schema potrete gentilmente aiutarmi e dirmi come sarebbe giusto mettere il pulsante oppure cambiare il condensatore ?
Io non ho capito niente di quello che hai detto ... sorry, tipo
il problema è che siccome non c'è il delay nella funzione loop non riesce a leggere il dato correttamente perché io sto spingendo il pulsante per 1s
che tipo di pulsante chiedi? uno switch? una volta accendi e una volta spegni? perchè in questo caso serve una variabile che memorizzi lo stato dell'output
isEnableSensori che cos'è?
Il condensatore è senz'altro un aiuto come antirimbalzo, ma non è definitivo un piccolo delay ti ci vuole sempre a meno che non usi un serio antirimbalzo hardware fatto con operazionali o porte AND-OR
Se intendevi dire che il tempo migliore di debounce è di 250-200 .... è del tutto relativo, io ho i debounce con delay forzato = a 0 con condensatore in parallelo e funziona egregiamente, dipende anche dalla lunghezza e complessità del programma, il programma stesso in loop fa da debounce. Se usiamo un micro che gestisce solo un pulsante o si fa un debounce hardware o un debounce software un po' più complicato ma si fa (sacrificando più memoria).
-Puoi racchiudere la lettura degli input dentro a un millis()
-Puoi usare un delay()
-Puoi sfruttare la complessità del programma quindi il tempo di loop con un delay più piccolo
o farlo hardware se non vuoi perdere tempo e memoria
Scusatemi se non sono stato troppo esplicito, quindi vi mostro l'immagine di come io abbia collegato il pulsante, la resistenza e di 10 KOhm, poi in parallelo al pulsante io ho aggiunto un condensatore di 100uF.
Aspetta ... se come dici nel post hai inserito un condensatore da 100uF IN PARALLELO al pulsante, la cosa non ha senso ... primo, non e' il modo corretto per usare un condensatore come antibounce, secondo, se la resistenza di pull ti carica il condensatore al massimo, quando lo chiudi con il pulsante lo cortocircuiti sul contatto del pulsante stesso, che di certo non gradisce (si strina, e potrebbe addirittura incolarsi o fondersi :P)
Per usare un condensatore come antirimbalzo, devi collegarlo fra l'ingresso e la massa, con una resistenza da, tipo, 100 ohm in serie al pulsante ...
dal tuo disegno sembra che usi un pulsante che chiude al positivo con una resistenza da 10K a amssa come pulldown ... metti il condensatore fra il pin di ingresso e il positivo (se usi un'elettrolitico, il negativo va al pin di ingresso ovviamente), ed una resistenza da 100 ohm fra il pulsante ed il positivo ... inoltre non usare 100uF, e' esagerato, qualsiasi valore fra 100nF ed 1uF e' piu che sufficente come antirimbalzo (e ti consiglio di usare un'altro pulsante, se quello ha gia preso un po di botte con i 100uF, non so in che stato saranno i suoi contatti ormai )
Aspetta ... se come dici nel post hai inserito un condensatore da 100uF IN PARALLELO al pulsante, la cosa non ha senso ... primo, non e' il modo corretto per usare un condensatore come antibounce
perchè no alcuni schemi riportano un circuito RC con C in parallelo, a casa mia funziona
Pablos, non e' che non funzioni, e' che 100 microfarad caricati a 5V, e scaricati brutalmente sul contatto di un pulsantino per segnali, al pulsante non e' che gli facciano poi cosi bene, specie se ripetuti parecchie volte
Se ci metti 100nF ok, se ci metti 100uF, o metti in serie la resistenza al condensatore, o al pulsante ... oppure dopo un po ti ritrovi con i contatti del pulsante incollati in corto
Etemenanki:
Per usare un condensatore come antirimbalzo, devi collegarlo fra l'ingresso e la massa, con una resistenza da, tipo, 100 ohm in serie al pulsante ...
dal tuo disegno sembra che usi un pulsante che chiude al positivo con una resistenza da 10K a amssa come pulldown ... metti il condensatore fra il pin di ingresso e il positivo (se usi un'elettrolitico, il negativo va al pin di ingresso ovviamente), ed una resistenza da 100 ohm fra il pulsante ed il positivo ... inoltre non usare 100uF, e' esagerato, qualsiasi valore fra 100nF ed 1uF e' piu che sufficente come antirimbalzo (e ti consiglio di usare un'altro pulsante, se quello ha gia preso un po di botte con i 100uF, non so in che stato saranno i suoi contatti ormai )
Ho provato a realizzare ciò, purtroppo senza risultato penso di aver sbagliato collegamenti, io ho a disposizione i seguenti componenti:
potresti spiegarmi come realizzare il circuito anti-rimbalzo ?
nel reply 8 hai 8 link che mostrano come collegarlo e i parametri dei componenti, cosa ti serve ancora ? qualcuno che venga a casa tua a montare i pezzi?
Leggi e mettiti al lavoro ] le informazioni di cui avevi bisogno le hai avute
Perdona i toni, ma certe volte siete proprio pigri, non vi degnate nemmeno di leggere, c'è anche google che non è poco