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: http://www.arduino.cc/en/Reference/PortManipulation

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 :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... :) 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 :D