Go Down

Topic: leggere il valore di un'uscita? (Read 484 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
no comment

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
no comment

Go Up