Il topic è a livello di curiosità ma neanche troppo
Mettiamo di aver finito i pin e che ne rimanga uno solo analogico, sarebbe possibile leggere in input un valore variabile e poi usare lo stesso pin come output?
L'idea sarebbe quella di impostare un timer in base alla lettura del pin analogico sul setup e poi non variarlo più o anche se variato non deve essere preso in considerazione fino al prossimo riavvio.
Eventualmente come dovrebbe essere fatto il circuito?
@erpomata:
teoricamente è possibile, il pinMode puoi farlo in qualunque punto del codice.
Il problema è però questo: mettiamo che hai un segnale in ingresso su un pin di Arduino impostato come input.
Se ora quel pin lo commuti su output e lo imposti a LOW fai un corto a massa.
Viceversa, se hai su un pin una linea collegata a massa e metti il pin come output con un segnale HIGH: bruci il GPIO.
Una risposta tipo RND(1764) che risultato darà ... ambarabacicicocò
Si potrebbe provare con un line buffer I/O http://www.onsemi.com/pub_link/Collateral/MC74AC244-D.PDF (link di esempio) questi dispositivi hanno un pin di controllo della direzione.... non trovo uno schema completo adesso, un po' di tempo fa ne avevo trovato uno che poteva addattarsi, comunque con un po' di resistenze di pull up-down e qualche diodo si dovrebbe riuscire a evitare un corto secco , cercare di rimanere nei limiti di corrente nel caso un pin output in high sia connesso a gnd
Salvo tutti i link di interesse, da qualche parte l'ho messo se lo trovo lo posto, il casino è che ne ho troppi e mal organizzati
Grazie per l'indicazione, purtroppo quel progetto è un pò troppo complesso per le mie conoscenze.
Potresti fare un estratto che faccia solo quello che serve?
erpomata:
Grazie per l'indicazione, purtroppo quel progetto è un pò troppo complesso per le mie conoscenze.
Potresti fare un estratto che faccia solo quello che serve?
Un esempio? vuoi attivare/disattivare il segnale PWM di un pin agganciato ad un timer. Puoi semplicemente passare da output ad input:
while (1) {
pinMode(pin, OUTPUT); //segnale sul pin
delay(500);
pinMode(pin, INPUT); //segnale assente
delay(500);
}
leo72: @erpomata:
teoricamente è possibile, il pinMode puoi farlo in qualunque punto del codice.
Il problema è però questo: mettiamo che hai un segnale in ingresso su un pin di Arduino impostato come input.
Se ora quel pin lo commuti su output e lo imposti a LOW fai un corto a massa.
Viceversa, se hai su un pin una linea collegata a massa e metti il pin come output con un segnale HIGH: bruci il GPIO.
Si risolve prevedendo il problema in fase di scrittura del codice e con alcuni accorgimenti hardware.
Ad esempio aggiungendo una resistenza di limitazione sul pin in modo che se metto il pin in output con segnale High e lo collego a massa, la resistenza mi limiti la corrente per impedire di fare un corto.
Poi io non so che stai facendo per cui sto solo dando dei suggerimenti.