è 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 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!
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 ...
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
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...
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
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
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