Scusatemi, sono un nuovo utilizzatore delle schede arduino e ho riscontrato il seguente problema:
Hocaricato un mio programmino sia su di un arduino uno R3 che su un arduino mega 256 utilizzando il canali relativi ai pin 0, 1 e 2 come ingresso digitali con delle resistenza di pull-down (verso masa) di 10K e il canale 0 non legge lo stato dell'ingresso ma resta sempre a livello alto.
E' un guasto delle mie schede o sto sbagliando qualcosa?
i canali 0 e 1 intendi i pin se si io non li userei, la seriale fa capo a essi e potresti avere dei malfunzionamenti (se non si deve, meglio evitare di usarli!!)
detto questo per essere più precisi bisognerebbe avere lo schema elettrico di come hai fatto icollegamenti e magari il programmino, cosi si può "vedere e capire" meglio
Grazie per la rapida risposta
Vi allego lo schema che ho realizzato per provare il circuito, ora in uscita monto dei LED poi in pratica diventeranno dei rele con relativo circuito.
La funzionalità dovrebbe essere la sequente:
Con il pulsante "ON" attivare e disattivare l'allarme e l'uscita "alimentazione porta" (attiva a allarme disattivato.
Con il pulsante "CMD porta" aprire e la luce accendere o chiudere la porta
L'interruttore "Stato porta" risulta chiuso a porta chiusa.
ora il problema è che arduino vede sempre la porta chiusa.
lo schema sembra giusto (ma evita il pin 1 e 0 usali solo se ti puntano una pistola!!) ma nei led ci vanno le resitenze (senza rischi davvero di bruciare tutto)!!!!
il programmino... (ignoranza mia credo) ma non vedevo i goto dai tempi del C=64!! (mai visti in c/C++)
io ho un pò di difficoltà a comprenderlo..attendiamo dei veri programmatori
Come detto, evita pin 0 e 1.
Io ti consiglio di vedere sul forum e internet il concetto di State Machine o macchina a stati.
Hai un unico loop() ovvero ciclo infinito e una variabile di stato che deve eseguire le parti di codice a secondo del "momento" o stato in cui sei. E' più semplice da capire ed eventualmente da modificare rispetto al tuo codice a blocco, monolitico. macchina-a-stati-finiti-e-arduino
Nello schema hai fatto un grosso errore: sulle uscite digitali a LED non hai inserito i resistori di limitazione corrente (330 ohm) senza dei quali puoi bruciare le uscite.
Per gli ingressi ti suggerisco di modificare lo schema in modo che i pulsanti chiudano verso massa: è vero che dovrai invertire la logica da HIGH a LOW, ma come vantaggio puoi eliminare i resistori esterni di pull down ed usare quelli interni di pull up da 20k con l'istruzione pinMode(pin, INPUT_PULLUP);
Il D0 resta sempre High perchè il pin 9 (TXD1) di ATmega16U2 di arduinoUNO è collegato a D0 (RXD) di atmega328 mediante una resistenza da 1k (rete resistiva cat16) quindi forma un partitore 1k-10k , essendo a riposo il pin9 di atmega16u2 sempre high anche D0 è sempre a 4.5V circa. per ovviare a questo problema hai 2 soluzioni:
-1) o usi il D0 sempre come uscita ,
-2) o togli la tua R8 da 10k e colleghi "pulsante_porta" verso gnd, la pullup non serve perchè hai la 1k interna
Grazie mille per la gentilezza e la cortesia
Ma non ho ancora capito se il "difetto" che solo il pin 0 mi resta sempre a livello alto è normale o è un guasto della mia scheda.
Brizzolato59:
Grazie mille per la gentilezza e la cortesia
Ma non ho ancora capito se il "difetto" che solo il pin 0 mi resta sempre a livello alto è normale o è un guasto della mia scheda.
È fisiologico perché quei pin sono la seriale che é collegato attraverso l'addattatore seriale/ USB ( FT232 o ATmega16U2) alla USB del PC.