Aiuto Problemi con D0

Se sei riuscito a programmare arduino possiamo presumere che il pin vada

Quindi rimangono solo le resistenze il pulsante e il cablaggio

Tre sole cose da controllare, quindi

Ho scollegato fisicamente D0 ed ho misurato la tensione è sempre a +5V, il circuito con il pulsante lavora normalmente.
Ho provato con un altra board, the same stuation.
Strano il comportamento.

Ricorda questo.

I pin DO e D1 sono collegati, (secondo il circuito ufficiale dell'arduino uno), con un resistore da 1k al chip di comunicazione che gestisce la porta USB, (l'ATMEGA 16U2 se è quello originale). Quella tensione sulla porta DO è senza dubbio impostata dal chip di comunicazione. Quindi dimentichiamoci di usare D0 e D1 per niente, almeno è quello che faccio.
Saluti.

A meno che non usiamo un arduino mini che non ha un chip di comunicazione, questi pime sono liberi di usare quando non lo stiamo programmando.

Buona sera docdoc
Vi aggiorno su quanto fatto:
compilato uno sketch che impiega solo D0 configurato come ingresso e D10 come out, l'anomalia resta la stessa. Mantenendo D0 come Input ed impostando D7 poi 8 poi 9 come out la situazione non varia.
Invertendo la configurazione di D0 impostato come OUT e D10 come IN, il programma funziona regolarmente.
Modificato lo sketch verificato e poi caricato mi appariva su Arduino IDE messaggio di" Errore durante il caricamento".
Immagine Errore

Dopo vari tentativi, con esito negativo, ero giunto alla conclusione di aver danneggiato la board. :joy:
Scollegata la board e riavviato Arduino IDE la board si è programmata. :blush:
I pins D0-D1 sono impiegati per la comunicazione seriale di Arduino, e sono direttamente collegati al chip ATmega8U2 USB-to-TTL. E' probabile che D0 (RX) configurato come input interferisca con il chip ATmea8U2.
Al momento non ho competenza per confermare questo.
Voi cosa ne pensate?
Saluti

Scusatemi ma non avevo visto i vostri post precedenti.
Grazie per l'aiuto.
Buona notte

Buonasera docdoc

Sono ritornato su questo sketch.

Come già anticipato non ho grosse conoscenze di programmazione.

Mi avevi accennato sulla possibilità di snellire lo sketch, impiegando degli array di valori il in modo di evitare i "copia-incolla" e rendere più elegante lo sketch.

Questa pratica mi ha incuriosito ed ho incominciato a seguire ciò che ho trovato in rete.

Per quanto riguarda la parte dedicata agli Input credo di aver capito come proseguire.

Ma non riesco a capire, ed incontro problemi per come impiegare sulla parte in uscita.

Puoi cortesemente indicarmi dove poter avere ulteriori informazioni.

Cordiali saluti

Tommaso

Ok, ma non c'è un "dove avere informazioni" anche perché non mi è chiaro quale sia la tua difficoltà. Facci vedere i tuoi tentativi, anche non funzionanti o non compilabili, così provo a darti qualche consiglio più "specifico"! :smiley:

adesso ho traffico (vado a recuperare saldatore e oscilloscopio) ma se torno presto quattro idee le metto anc'io

Beh, semplice

tu puoi fare un array di pulsanti
int pulsanti[10]=....
uno di rele
int rele[10]=...
e via così

per ciclarli con un ciclo for

for (byte i=0; i<10; i++) { pinmode(pulsanti[i]...... }
sia nella setup() che nella loop()

in un secondo tempo potresti anche creare una struttura che descrive il gruppo pulsante-rele-tempo-stato

typedef struct {

byte pulsante;
byte relay
.
.
} gruppo;

e fare un array di gruppi, che cicli singolarmente e per avere accesso al singolo pulsante accedi al membro pulsante dell'i-esimo elemento dello array di gruppi
if (gruppi[i].pulsante==.....

così facendo (ho provato) il programma diventa lungo 65 righe (pur lasciando una riga di stacco tra le parentesi graffe, come BSD comanda
contro le 258 del tuo, che pure è ben indentato, complimenti
poi il compilato diventa grosso modo la metà
e l'occupazione di memoria ram sale di 10 byte (credo per il padding delle strutture), visto che praticamente non ci sono altre variabili globali

adesso invece entro nello specifico del tuo problema HW, anche qui ho idee

edit

ommaquestoèassurdo
i tag code ci sono, ma non li esegue, li mostra...
se metto i doppi apici rovesciati mette tutto il codice in una sola riga...
ma che vada ad espletare funzioni corporali...
adesso è mezzanotte e ci penso domani
di più non riesco a fare oggi

Argomento differente -> differente anche il post

non me ne vogliate quindi per due post consecutivi

per la parte HW
io credo che il tuo arduino funzioni benissimo e che si possa tranquillamente usare il pin 0 anche come input/output regolare, ovviamente se non si usa la seriale e se quando lo si programma si stacca tutto quello che c'è attaccato ai primi due pin

l'errore di prospettiva è che il pin 0 è pulluppato, anche quando NON si attiva INPUT_PULLUP

perché è pulluppato in hardware dal chip di comunicazione USB
basta saperlo e usarlo come input pullup
peraltro sapendo che le seriali TTL sono attive basse è ovvio che sia così

PS, ho provato anche questo, quindi non ditemi che non va

PPS recuperato saldatore e oscilloscopio, domani in ditta mi regalo un poco di stagno

Stranissimo infatti, ho corretto con il pulsante "</>" (code) e ora funziona ... :roll_eyes:

Guglielmo

Quindi hai visto anche tu?

Non ero troppo stanco io, quindi

Salve Guglielmo
questo, è riferito al mio post?:
Stranissimo infatti, ho corretto con il pulsante "</>" (code) e ora funziona ... :roll_eyes:
Saluti

Sera Standaroil
In sostanza se cambio il pull-down su gli ingressi e li porto a pull-up Arduino funzionerà regolarmente?
Ho bisogna intervenire sulle impostazioni in codice, o HW.

Saluti

Hardware e software

Troppo stanco adesso

domani!

NO, non vedi che c'è l'avatar di Standardoil nella reply? Era riferito a lui ...

Guglielmo

Ho trovato questo:
https://www.arduino.cc/en/Tutorial/DigitalInputPullup

Mi sembra ben spiegato

Tks