Salve ragazzi, stavolta credo di averla fatta grossa.
Vorrei realizzare un menu con swift/case, un contatore e 4 tasti ma caricandolo su Arduino mi ero accorto che c'era un problema: sul display mi compariva sempre l'ultimo menu.
Ho aggiunto il Serial.begin per vedere a monitor cosa stesse accadendo e mi sono accorto che il contatore saliva da solo senza che venisse sfiorato alcun tasto.
Ho smontato il display e i 4 tasti lasciandone solo uno con la solita resistenza di pull-up da 10k e ho provato a settare ogni pin dal 2 al 13 (lo sketch attuale è sul 4) ma il risultato è uguale: incremento del contatore di circa 100/150 al secondo.
Aggiungo che ho anche il led L sul pin 13 sempre acceso.
const int avantiPin = 4 ;
int cont = 0;
int StatoPulsAvanti = 0;
int lastStatoPulsAvanti = 0;
void setup() {
Serial.begin(9600);
pinMode(avantiPin, INPUT);
digitalWrite (avantiPin, LOW);
}
void loop() {
StatoPulsAvanti = digitalRead(avantiPin);
if (StatoPulsAvanti != lastStatoPulsAvanti){
if (StatoPulsAvanti == HIGH) {
cont++;
delay (20); }
}
Se hai una resistenza di pull-up (perché non usare quella interna?), ovviamente leggerai HIGH quando il pulsante NON è premuto. Questo dovrebbe collegare a massa alla pressione, portandoti quindi a leggere LOW.
Fabio_80:
Salve ragazzi, stavolta credo di averla fatta grossa.
Hai aperto la finestra, si?
Ho aggiunto il Serial.begin per vedere a monitor cosa stesse accadendo e mi sono accorto che il contatore saliva da solo senza che venisse sfiorato alcun tasto.
Ho smontato il display e i 4 tasti lasciandone solo uno con la solita resistenza di pull-up da 10k
Primo, sempre postare il circuito. Tu dici di aver messo le resistenze di pull-up, ma allora questo significa che avrai messo il pulsante tra il pin e massa (spero) quindi la logica è inversa, il pulsante premuto è LOW non HIGH.
Ma se non posti lo schema, ci si mette più tempo...
Poi hai postato un codice incompleto, dove aggiorni la "lastStatoPulsAvanti" ??
Insomma, metti uno sketch COMPLETO e uno schema (o una descrizione COMPLETA) dei collegamenti che hai fatto, e con i quali hai provato QUELLO sketch, e possiamo dirti qualcosa.
PS: sperimenta usando Tinkercad Circuits (ex Autodesk 123d circuits) , hai un simulatore Arduino con tanto di debugging!
Fabio_80:
Pulsante è fra la resistenza e il 5volt quindi la resistenza è pull-down? Se non è zuppa è pan bagnato
Pull-up e' una resisteenza dal pin al VCC, con il pulsante che chiude il pin a massa (quindi pulsante premuto = ingresso LOW) ... pull-down e' resistenza fra pin e massa, con pulsante che chiude il pin a VCC (quindi pulsante premuto = HIGH) ... in entrambi i casi, mettere condensatore di valore fra 47n e 100n fra pin e massa, per il debounce ...
Se hai messo la resistenza in serie al pulsante che chiude a VCC, ma non hai messo altro = molto male ... non e' pull-up, e' un pin lasciato volante che capta tutti i disturbi presenti ed agisce a caso ...
spostato sul pin di massa ma non ho mai avuto bisogno di premerlo il pulsante visto che il valore cont come spiegato su sale da solo senza sfiorare il tasto
Ammetto che ci capisco poco, ma io farei così:
Collego il pulsante tra il + e il pin, senza altre cose in giro
Setto il pin INPUT_PULLUP
Nego la logica (premuto é LOW)
Uso un debounce software
Incremento la variabile
Aspetto che il pulsante sia rilasciato
... appunto, come dicevo ... il filo cosi fa da antenna e capta disturbi, non c'e' alcun pullup ne pulldown, e neppure un debounce, come fa a funzionare ? ... i pin usati come ingressi non vanno MAI lasciati "volanti" ... persino la pista dello stampato potrebbe essere sufficente a raccogliere segnali, con un'impedenza di ingreso di 100 megaohm ...
Fabio_80:
spostato sul pin di massa ma non ho mai avuto bisogno di premerlo il pulsante visto che il valore cont come spiegato su sale da solo senza sfiorare il tasto
Da questo "sintomo" potevi capire facilmente che il pin non è collegato al pulsante ma è flottante e legge quindi 0 e 1 a casaccio (e quindi cont aumenta), come ti aveva già detto @etem al post#5
Allora ... li hai letti con attenzione i post precedenti o li hai solo guardati ? ? ? :o :o :o
Perché sono post e post che ti stanno dicendo come si collega una resistenza di pull-up o di pull-down e tu continui a metterla in serie al bottone, ovvero in modo del tutto inutile !
La restitenza va tra il pin di ingresso e ... Vcc se è una pull-up, GND se è una pull-down ... il bottone va direttamente a GND per la pull-up e a +Vcc per la pull-down.
Nel modo in cui hai fatto tu il pin, quando il bottone NON è premuto, NON è collegato a nulla e quindi legge ciò che vuole (HIGH o LOW a caso).
Se ha fatto come suggerito e non ci sono stati cambiamenti mi vengono dei dubbi su due cose:
1)Il pulsante funziona?
2) Arduino legge bene?
Per rispondere alla prima domanda userei un tester per vedere se la corrente misurata cambia. Se sprovvisto di un tester potrei vedere bene un led posto tra l'uscita del pulsante e il pin di ingresso.
Se il controllo mostrasse che il pulsante fa il suo mestiere... Allora dubiterei dell'Arduino
Fabio_80:
provato anche il condensatore senza cambiamenti
Se usi la resistenza interna di pullup di Arduino allora la resistenza è nel posto sbagliato (e deve essere da 10ohm e non 10k).
Se NON usi la resistenza interna di Arduino allora lo schema è errato, indipendentemente dal condensatore.
Inoltre anche il tuo codice di setup ha degli errori o altrimenti delle cose inutili.
Se usi la pullup interna di Arduino la puoi attivare così: