Buongiorno a tutti, sono Federico e sono otto anni che non programmo più e mi sono dimenticato molte cose avrei bisogno di un aiuto a programmare Arduino uno perché da solo non riesco a fare quello che vorrei adeso vi spiego di cosa avrei bisogno.
ho due pulsanti collegati sul pin 5 e 6 che sono due entrate e dovrei andare a comandare 3 uscite. Se premo il primo pulsante si attiva l'uscita sul pin 9 e se premo il secondo si attiva l'uscita sul pin 10 e se premo tutti e due i pulsanti contemporaneamente mi si attiva luscita sul pin 11 lasciando il pin 9 e 10 disattivati.
vi lascio il codice che avrei scritto ma non funziona completamente:
ho notato anche che se rilascio il pulsante passano almeno 5 sec prima che si disattivi l'uscita invece che essere quasi immediato come dovrebbe essere. sapreste dirmi il perché?
se potete aiutarmi sarei felice.
Cordiali Saluti
Federico
Buongiorno e benvenuto nella sezione Italiana del forum,
prima di tutto ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato, dopo di che ...
... cortesemente, leggi attentamente il REGOLAMENTO di detta sezione, (prestando molta attenzione al punto 15) e poi, come da suddetto regolamento, fai la tua presentazione NELL'APPOSITA DISCUSSIONE spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati ...
... infine, come richiesto al punto 7 del succitato regolamento, per favore edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita che si trova in basso del tuo post), seleziona la parte di codice e premi l'icona </> nella barra degli strumenti per contrassegnarla come codice. Inoltre, così com'è, non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmdT su un Mac, sempre all'interno del IDE).
Grazie,
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione e sistemato il codice come indicato, nel rispetto del regolamento nessuno ti risponderà (eventuali risposte verrebbero temporaneamente nascoste), quindi ti consiglio di farla al più presto.
devo andare a comandare 3 relè con i due pulsanti quando si preme il primo si attiva solo il primo relè, quando si preme il secondo si attiva solo il secondo relè e quando si premono tutti e due i pulsanti insieme si attiva solo il terzo relè
... si, non mi interessano le funzioni, mi interessa come li hai collegati e ... così proprio NON va bene.
Gli ingressi digitali di Arduino sono ad alta impedenza ed abbiamo detto e ripetuto molte volte, che NON debbono mai essere lasciati "volanti" (non collegati a nulla) perché la loro lettura divventa del tutto inaffidabile.
Hai due possibilità ...
se vuoi verificare la chiusura verso Vcc, allora devi connettere i pin di Arduino (che usi come INPUT) ciascuno ad una resistenza verso massa da circa 10 KΩ così da tenere il pin normalmente a LOW e permettere di accorgersi quando va HIGH per la pressione del pulsante.
se invece fai la chiusura verso GND, allora non ti serve altro, se non cambiare la definizione della pinMode trasformandola in pinMode (numeroPin, INPUT_PULLUP); così da attivare la resistenza di pull-up interna che terrà il pin normalmente HIGH mentre il pulsante lo porterà LOW.
In entrambi i casi di segnalo che hai anche un problema di "debouncing" visto che nessun pulsante reale chiude ed apre perfettamente in una condizione senza rimbalzi e quindi ... dovrai risolvere anche quella.
Quando premi (o rilasci) un pulsante, nella realtà, succede questo:
... che, alla velocità con cui gira il loop() di Arduino, ti darà NON una, ma una SERIE di aperture e chiusure del pulsante.
Per evitare il problema, due sono le soluzioni, una software, che usa dei delay() ed una hardware che usa una rete integratrice R/C ... io preferisco quella hardware che evita inutili rallentameneti del programma:
quindi per risolvere il problema basta utilizzare il pullup interno e collegare il pulsante a massa e tra il pulsante e il PIN inserire una resistenza da 100 al +?
Riguardando bene no, la logica gestisce tutte le combinazioni, mi sono confuso con le parentesi che sono pure scritte bene, per cui i problemi potrebbero dipendere in effetti solo dalla mancanza di pull-up/down.
Il debounce in questo caso specifico (semplice logica combinatoria senza stati che comanda lenti relé) potrebbe essere un falso problema per via dell'inerzia dei relé stessi.
Quindi nello schema iniziale mancano solo le resistenze di pull-down tra gli ingressi e GND.