leggere il valore di un'uscita?

è 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 :sweat_smile: c'è per caso un modo più semplice?
grazie!

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

Certo che si può. Basta leggere il corrispondente bit sul registro della porta del micro:

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

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

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 :sweat_smile:...

BrainBooster:
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 :sweat_smile:

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

ok per convincervi vi spiego proprio il problema... :slight_smile:
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? :slight_smile:

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 :wink:

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

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

Si tanto alla fine legge i registri :slight_smile:

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;
}

Si tanto alla fine legge i registri smiley

anche digitalWrite alla fine scrive sui registri :smiley: