stamane ho trovato un progetto pilota interessante in howtomechatronics.com in cui si realizza una comunicazione bidirezionale tra due moduli wireless.
La comunicazione monodirezionale dall’arduino uno al nano funziona perfettamente (ho pilotato il servo in modalità wireless attraverso un joystick).
Le dolenti note ci sono quando voglio dall’arduino nano accendere un led posizionato sull’arduino uno attraverso un interruttore a pulsante.
Ho notato che quando faccio l’upload dello sketch (che allego per completezza) il led rx dell’arduino nano blinka di rosso mentre quello tx verde.
Non è che per caso si è fritto qualcosa, o c’è qualche difetto di fabbricazione…
L’arduino nano è nuovo e per giunta originale.
text è già l'indirizzo dell'array, o ricordo male?
è un array, non una variabile singola, il suo nome riferisce all'indirizzo, infatti viene passato come puntatore senza bisogno di referenziarlo, giusto? come qui
Ducembarr:
... perché per l'indirizzo usa un array di byte e non di char?
perché per trasmettere una stringa passa l'indirizzo dell'array di char?
const char text[] = "Hello World";
radio.write(&text, sizeof(text));
text è già l'indirizzo dell'array, o ricordo male?
Infatti bastava passare solo 'text' ... il metodo write è difatti definito come:
bool write( const void* buf, uint8_t len );
... quindi vuole il puntatore al buffer e la sua lunghezza e 'text' è già il puntatore al buffer.
In questo caso comunque la cosa non dovrebbe comportare problemi, salvo non vengano poi fatte operazioni matematiche su quel pointer, difatti:
'text' è il pointer al PRIMO elemento dell'array (quindi incrementando di 1 il pointer si avanza di una quantità pari alla dimensione del singolo elemento)
'&text' è il pointer a TUTTO l'array (quindi incrementando di 1 il pointer si avanza di una quantità pari alla dimensione di tutto l'array)
E' cosa piuttosto subdola e può dare adito facilmente ad errori
il problema non è ancora risolto.
Ho provato:
1 - A far comunicare una string di testo dal nano (transmitter) all’uno (receiver) una string di testo e funziona.
Sulla COM3 dell’Arduino Uno ricevo la string (funziona anche il viceversa (con la COM8)).
2 - Ho verificato il funzionamento di tutti i pin coinvolti (Pin 4 del receiver e Pin 4 del transmitter) con dei semplici sketch led e lavorano perfettamente (ovviamente ho inserito una resistenza da 220 ohm per limitare la corrente ad un valore cautelativo)
3 - Ho verificato la 5 v del nano e funziona.
Allora ho modificato gli sketch originali con il seguente scopo:
schiacciando un pushbutton sul nano mando un segnale high di input sul pin 4(del nano).
Questo segnale di input dovrebbe essere trasmesso all’Uno e una volta arrivato se HIGH mette il pin 4 (dell’uno) su HIGH altrimenti il pin 4 rimane low (e il led non si accende).
Se provo a caricare i due sketch (che riporto in allegato) noto che già a monte (sul nano (transmitter) nel monitor seriale non ricevo nessun numero nè 1 nè 0.
Quindi sembrerebbe che commetto qualche errore
I pin collegati al modulo radio sulla uno sono i seguenti:
3.3 V uno - 3.3 v modulo radio
gnd uno - gnd modulo radio
8 sulla uno - CSN radio
7 sulla uno - CE radio
13 sulla uno - SCK radio
11 sulla uno- MOSI radio
12 sulla uno- MISO radio
Come detto il modulo funziona controllando un servomotore(sulla nano) dalla uno e funziona mandando string di testo sia in una direzione che nell'altra.
ardschrcr1987:
Se provo a caricare i due sketch (che riporto in allegato) noto che già a monte (sul nano (transmitter) nel monitor seriale non ricevo nessun numero nè 1 nè 0.
Quindi sembrerebbe che commetto qualche errore
infatti
tu sul trasmettitore trasmetti solo se hai "radio.available()"
ma siccome il ricevitore non trasmette mai, il trasmettitore non avrà mai "radio.available()"
non ho ancora ottenuto la comunicazione bidirezionale però sono riuscito a tramettere dal nano all’uno e accendere il led.
Allego gli sketch se a qualcuno possono servire…
è previsto per essere ambidestro, uguale tra trasmettitore e ricevitore, non ci sono differenze, basta girare i due indirizzi alle righe 15 e 16 della setup
se da un arduino si preme il pulsante al pin 12 si accende il led al pin 14 qui e quello al pin 13 sull’arduino lontano
e viceversa, spero
però io non ho quei moduli, l’autore mi farebbe una cortesia se provasse, così magari imparo qualcosina