Go Down

Topic: leggere il valore di un'uscita? (Read 581 times) previous topic - next topic

ƎR

è possibile leggere il valore di una uscita dell'arduino? per esempio io in una parte di programma precedente imposto questa uscita a 1 o a 0 e poi leggere se questa uscita è a 1 o a 0, non so se mi sono spiegato bene, in poche parole io vorrei leggere il valore di un output...
potrei salvare il valore dell'uscita su una variabile e leggere quella, ma mi risulta un po' complicato visto il programma :smiley-sweat: c'è per caso un modo più semplice?
grazie!
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

BrainBooster

Forse non ho capito la domanda..
Ma è un'uscita, sei tù che la imposti e quindi sai sempre se è 1 o 0 no?

leo72

Certo che si può. Basta leggere il corrispondente bit sul registro della porta del micro:
http://www.arduino.cc/en/Reference/PortManipulation

BrainBooster

Ma potrei capire se si trattasse di un entrata, ma un'uscita...

ƎR

eh infatti immaginavo che bastasse leggere il registro della porta, come sui pic... grazie Leo! ;)

Quote
Ma è un'uscita, sei tù che la imposti e quindi sai sempre se è 1 o 0 no?

si vero, ma il problema è che se ho un programma un po' complesso, poi è più difficile sapere con esattezza se l'ultima volta era stata impostata a 0 o a 1, non so se mi spiego :smiley-sweat:...
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

leo72


Ma potrei capire se si trattasse di un entrata, ma un'uscita...

Boh, forse vuole solo salvarsi lo stato delle uscite per ripristinarle in un secondo momento. Cmq è vero, è poco logico essendo lo stato di un'uscita impostata via software  :smiley-sweat:

pelletta

Potresti farti un array, dove su ogni elemento ci vai a mettere una variabile che rappresenta lo stato delle uscite; ogni volta che il tuo programma modifica lo stato delle uscite gli fai anche aggiornare l'array.
A questo punto basta leggere l'array per sapere lo stato delle uscite in qualsiasi momento.
Ciao 

ƎR

ok per convincervi vi spiego proprio il problema... :)
allora ho un robot con 4 ruote omnidirezionali e 4 motori dc (del quale ho già postato una foto la settimana scorsa), il mio problema è che è molto veloce e se voglio farlo fermare non mi basta spegnergli i motori perchè con l'inerzia va avanti per altri 20 cm, quindi per fermarlo gli do una piccola tensione sui motori inversa a quella a cui erano sottoposti prima e così si blocca sul punto in cui gli ho detto di fermarsi, ok? :)

si anch'io avevo pensato all'array ma tanto vale che leggo i valori quando che servono, non capita molto spesso che debba arrestarsi al robot ;)
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

pablos

digitalRead(numporta); garantito 100%
che sia impostata come input o output, oppure dai registri
L'esperienza è il tipo di insegnante più difficile ....
Prima ti fa l'esame e poi ti spiega la lezione.

ratto93


digitalRead(numporta); garantito 100%
che sia impostata come input o output, oppure dai registri

Si tanto alla fine legge i registri :)
Code: [Select]
int digitalRead(uint8_t pin)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);

if (port == NOT_A_PIN) return LOW;

// If the pin that support PWM output, we need to turn it off
// before getting a digital reading.
if (timer != NOT_ON_TIMER) turnOffPWM(timer);

if (*portInputRegister(port) & bit) return HIGH;
return LOW;
}
Se corri veloce come un fulmine, ti schianterai come un tuono.

pablos

Quote
Si tanto alla fine legge i registri smiley

anche digitalWrite alla fine scrive sui registri  :D
L'esperienza è il tipo di insegnante più difficile ....
Prima ti fa l'esame e poi ti spiega la lezione.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy