Mettere pin on o off.

Mi è venuto un dubbio.
Ma se volessi preparare uno schema elettrico che preveda un pin on o off potrei prevedere una cosa del genere?

+5 --> resistenza --> pin arduino -- GND

L'idea sarebbe che non montando la resistenza il pin è a 0(GND) montandola è a +5 (+ o -).

Sbaglio?

Se il pin è collegato direttamente a GND, resta a a livello di GND con o senza resistenza.

Qual è il problema che stai cercando di risolvere ?

Nulla di speciale, vorrei rendere il circuito dinamico.
Cioè se monto la resistenza il pin è alto (ed allora lo sketch fa una cosa) e non la monto il pin è basso (e allora lo sketch fa un'altra cosa).

Mi dovrei arrangiare con un partitore, quindi di 2 resistenze 1 (quella su GND) la devo montare comunque.

erpomata:
Mi è venuto un dubbio.
Ma se volessi preparare uno schema elettrico che preveda un pin on o off potrei prevedere una cosa del genere?

Se hai bisogno di un pin che fa da switch funzionalità, a seconda del suo stato logico, il modo più semplice è attivare la pull up interna del pin in modo che normalmente si trova a 1 logico, quando devi metterlo a 0 logico lo colleghi direttamente a GND.

Non male come soluzione.
Grazie

per attivare la pullup hai due modi: pinMode(pin, INPUT_PULLUP) o, se non supportato dalla tua versione dell'IDE, pinMode(pin, INPUT) poi digitalWrite(pin, HIGH).

Siete spettacolari come sempre.

Grazie grazie

erpomata:
Nulla di speciale, vorrei rendere il circuito dinamico.
Cioè se monto la resistenza il pin è alto (ed allora lo sketch fa una cosa) e non la monto il pin è basso (e allora lo sketch fa un'altra cosa).

Cioè dovresti poter variare le impostazioni dello sketch mediante l'uso di stati logici sui pin esterni? Perché non usi allora solo la pull-u interna come ti ha detto astrobeed ed esternamente una pista verso massa interrotta da un jumper.
Se vuoi attivare la funzionalità metti il jumper (così il pin legge LOW), se non la vuoi attivare lo togli (ed il pin legge HIGH). Oppure viceversa.

Si leo, infatti da questo nasce la mia domanda "eagle e ponticelli" che ho fatto subito dopo la risposta di astro.

Grazie

erpomata:
Si leo, infatti da questo nasce la mia domanda "eagle e ponticelli" che ho fatto subito dopo la risposta di astro.

Grazie

Ah ecco :wink:

Fatto tutto.
Ho provato la modifica al software ed ovviamente funziona ed ho modificato lo schema eagle.

Grazie a tutti.

Ciao a tutti, riprendo il topic per chiedere un' altra cosa.
Tutti gli esempi che ho visto utilizzano un tasto o jumper per portare il pin a massa e quindi a 0, si da praticamente per scontato che il loop dello sketch sia partito ed il programma è in esecuzione (con la resistenza del pullup bella impostata) ma se io volessi mettere a massa prima dell'avvio dello sketch che succede al pin che ancora non è in pull up (credo)?

Cioè al boot del chip le resistenze di pull-up come sono impostate?

Chiarisco con uno pseudo codice:

setup{
imposta pin1 pullup
}

loop{
METTI A MASSA(*)
se pin1
 leggi pin1
else
 leggi pin2
}
METTI A MASSA(*)
setup{
 imposta pin1 pullup
}

loop{
se pin1
 leggi pin1
else
 leggi pin2
}

*Azione del pulsante.

Spero di essermi spiegato.

Dopo un reset i pin sono impostati come input.

Se il pulsante agisce sul pin prima che parta il programma, non succede nulla di che: semplicemente non c'è "nessuno in ascolto".
La resistenza di pull-up serve solo per dare uno stato fisico ben definito al pin, altrimenti, essendo flottante, può essere letto indifferentemente come alto o basso a seconda dell'ambiente (basta avvicinare una mano per influenzare un pin flottante).

Quindi non rischio di fare un corto e di fottere come minimo il pin

Un pin lo bruci se gli offri come input più della tensione che può accettare in ingresso (5 volt).
L'importante è che se il circuito condivide le masse, è bene non dare in input ad un pin una tensione senza che il microcontrollore sia alimentato: in questo caso, le tensioni fluiscono al suo interno, arrivando ad "accenderlo", con comportamenti strani e/o potenzialmente pericolosi (la corrente potrebbe fare strade interne che normalmente non dovrebbe fare).

Ok quindi metto a massa il pin, pinMode(pin, INPUT), digitalWrite(pin, HIGH) ed accendo.
Vado tranquillo.

Grazie

Dall'IDE 1.0.1 puoi fare tutto con un'unica istruzione:

pinMode(pin, INPUT_PULLUP);

Ok grazie