Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 836
ƎR like no other.
|
 |
« on: February 24, 2012, 11:23:34 am » |
è 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!
|
|
|
|
|
Logged
|
|
|
|
|
Deep south of Italy
Offline
Faraday Member
Karma: 6
Posts: 2954
The quieter you become, the more you can hear
|
 |
« Reply #1 on: February 24, 2012, 11:29:28 am » |
Forse non ho capito la domanda.. Ma è un'uscita, sei tù che la imposti e quindi sai sempre se è 1 o 0 no?
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16517
Don't know what I do
|
 |
« Reply #2 on: February 24, 2012, 11:29:59 am » |
Certo che si può. Basta leggere il corrispondente bit sul registro della porta del micro: http://www.arduino.cc/en/Reference/PortManipulation
|
|
|
|
|
Logged
|
|
|
|
|
Deep south of Italy
Offline
Faraday Member
Karma: 6
Posts: 2954
The quieter you become, the more you can hear
|
 |
« Reply #3 on: February 24, 2012, 11:32:53 am » |
Ma potrei capire se si trattasse di un entrata, ma un'uscita...
|
|
|
|
|
Logged
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 836
ƎR like no other.
|
 |
« Reply #4 on: February 24, 2012, 11:35:09 am » |
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  ...
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16517
Don't know what I do
|
 |
« Reply #5 on: February 24, 2012, 11:36:20 am » |
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 
|
|
|
|
|
Logged
|
|
|
|
|
Marche
Offline
Edison Member
Karma: 25
Posts: 2063
|
 |
« Reply #6 on: February 24, 2012, 11:41:13 am » |
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
|
|
|
|
|
Logged
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 836
ƎR like no other.
|
 |
« Reply #7 on: February 24, 2012, 11:44:12 am » |
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 
|
|
|
|
|
Logged
|
|
|
|
|
Genova
Offline
Edison Member
Karma: 14
Posts: 2451
|
 |
« Reply #8 on: February 24, 2012, 12:09:28 pm » |
digitalRead(numporta); garantito 100% che sia impostata come input o output, oppure dai registri
|
|
|
|
|
Logged
|
Meglio imparare dalle cose inutili piuttosto che non imparare niente. [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]
|
|
|
|
Monselice PD Italy
Offline
Faraday Member
Karma: 15
Posts: 4920
фон Крыса
|
 |
« Reply #9 on: February 24, 2012, 12:39:45 pm » |
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; }
|
|
|
|
|
Logged
|
Se corri veloce come un fulmine, ti schianterai come un tuono.
|
|
|
|
Genova
Offline
Edison Member
Karma: 14
Posts: 2451
|
 |
« Reply #10 on: February 24, 2012, 12:48:47 pm » |
Si tanto alla fine legge i registri smiley anche digitalWrite alla fine scrive sui registri 
|
|
|
|
|
Logged
|
Meglio imparare dalle cose inutili piuttosto che non imparare niente. [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]
|
|
|
|
|