Non riesco ad avere una connessione stabile con l'antenna.
Con il mac la rilevo, faccio il pairing con codice "1234" ma dopo circa 10s si disconnette.
Penso sia questo il mio problema principale.
Spero di aver capito il funzionameto:
connetto TX ed RX dell'antenna con RX e TX dell'arduino o sui pin scelti con NewSoftSerial
stabilisco una connessione con l'antenna
quello che mando alla seriale relativa all'antenna sul mac arriva alla seriale dell'arduino.
Giusto?
Ti consiglio:
collega anche i pin 32 e 31 a due led connessi a gnd.
uno dei due lampeggia di continuo quando è in cerca di connessione, quando l'ha trovata rallenta il blinking e si accende l'altro fisso.
una volta collegato, devi distinguere tre porte com:
dove è collegato arduino ed è la stessa dell'ide dell'arduino
una dovrebbe essere la com del dispositivo bluetooth che hai sul pc (usb o interno)
una porta com che bluesoleil associa al nuovo dispositivo
Io mi collego tramite putty alla porta del punto 3; unico problema è che quando apro putty durante la connessione avvenuta, il modulo si scollega dal pc.
Ci sono riuscito con Mac OS X.
Il problema era che usavo il modulo MASTER invece di quello SLAVE.
Ho fatto così:
Connetto la TX e RX dell'antenna ad RX e TX sull'arduino usando NewSoftSerial con una connessione a 115200
Il mac rileva l'antenna e vi associa una porta seriale /dev/tty.BC-05-xxxx
Apro minicom sulla porta /dev/tty.BC-05-xxxx a 115200 e quello che scrivo viene trasmesso all'Arduino.
P.S. Per dare i comandi AT, bisogna mettere l'antenna in modalità AT, mettendo un valore di tensione alto (3.3V o 5V) sul pin 34.
Con questi comandi è possibile cambiare le configurazioni dell'antenna, per esempio è possibile convertire il MASTER in SLAVE e viceversa.
riddick86:
P.S. Per dare i comandi AT, bisogna mettere l'antenna in modalità AT, mettendo un valore di tensione alto (3.3V o 5V) sul pin 34.
Con questi comandi è possibile cambiare le configurazioni dell'antenna, per esempio è possibile convertire il MASTER in SLAVE e viceversa.
Ma il pin 34 deve stare fisso a 3.3v per abilitare la modalità AT?
Appena puoi posta il codice che hai usato che faccio un pò di prove... grazie!
ma il pin dell'AT, l'hai messo a 3.3v o hai messo qualche resistenza in serie?
appena lo metto a 3.3v non riesco più a farlo collegare al mio modulo bluetooth (del pc)...
Questi moduli non vengono rilevati da LG Optimus One e HTC Desire HD.
Ho provato con vari altri cellulari e smartphone e vengono rilevati senza problemi.
Poichè ho un LG O1 devo capire se è un problema software o di incompatibilità dell'hardware.
Ciao riddik86,
io non ho fin'ora avuto problemi di riconoscimento, ho provato con Nokia (vari modelli), LG GT540, HTC G1.
devo capire se è un problema software o di incompatibilità dell'hardware.
Il Bluetooth è uno standard, non penso si possa parlare di incompatibilità
Nel senso che potrebbe non andare a buon fine il pairing, ma il modulo dovrebbe essere sempre visibile...
Forse il modulo bt era associato e connesso con altro device, quando effettuavi la ricerca con gli smartphone che hai citato?
(potrei aver detto una castronata, non ci ho provato)
pitusso:
Forse il modulo bt era associato e connesso con altro device, quando effettuavi la ricerca con gli smartphone che hai citato?
(potrei aver detto una castronata, non ci ho provato)
No, non era associato a nessun dispositivo, anche perchè non conoscevano il pin di connessione.
Poi le prove le ho fatte anche da solo con il mio Optimus One e non lo "vede".
Ho risolto!!!
In pratica ho cambiato il modo operativo dell'antenna, l'ho passata da SLAVE a SLAVE-LOOPBACK con questo codice:
#include <NewSoftSerial.h>
int pinRX = 6;
int pinTX = 5;
int pinAT = 8;
NewSoftSerial blue(pinRX, pinTX);
int pinLed = 13;
void commandAT(char *v)
{
int i=0;
while(v[i] != '\n')
{
blue.print(v[i]);
i++;
}
blue.print('\n');
}
void readResponse()
{
int a = blue.available();
Serial.print("Caratteri disponibili: ");
Serial.println(a);
if(a > 0){
for(int i=0; i < a; i++){
char data = (char)blue.read();
Serial.print(data);
delay(100);
}
}
}
void setup()
{
blue.begin(38400);
Serial.begin(9600);
Serial.println("Inizializzo sistema...");
pinMode(pinLed, OUTPUT);
pinMode(pinAT, OUTPUT);
//Valore ALTO per switchare in modalità AT
// il 34 sull'antenna
digitalWrite(pinAT, HIGH);
Serial.println("pinAT attivo");
//Comando AT da inviare
char s[] = "AT+ROLE=2\r\n";
Serial.print("Scrivo comando: ");
Serial.print(s);
delay(50);
//Invio comando all'antenna
commandAT(s);
delay(50);
//Leggo la risposta
readResponse();
}
void loop()
{
}
Ora si riescono a leggere anche le risposte, bisogna che l'antenna sia connessa con qualche dispositivo via bluetooth, non basta la seriale di Arduino.
Ho fatto in questo modo:
Arduino <---> Modulo BT <----> MacBook PRO BT (connessione con minicom)
e magicamente il monitor seriale di Arduino stampa anche le risposte!!!
Quindi basta collegare opportunamente il modulo bluetooth all'arduino ed utilizzare su questo un software tipo newsoftserial collegato alle porte tx ed rx del bluetooth, e sul pc aprire una connessione digitando la passkey e poi aprire con putty una connessione sulla porta com giusta?
Quindi basta collegare opportunamente il modulo bluetooth all'arduino ed utilizzare su questo un software tipo newsoftserial collegato alle porte tx ed rx del bluetooth, e sul pc aprire una connessione digitando la passkey e poi aprire con putty una connessione sulla porta com giusta?
esattamente.
In realtà, se il sw di gestione bt te lo permette (direi che tutti ormai lo fanno), una volta fatto il primo pairing non dovrebbe essere più necessario digitare il codice.
Si, però deve funzionare come slave.
riddick86 ha perfettamente ragione, nel caso in cui il modulo bt supporti sia la modalità master che slave.
I più economici solitamente supportano solo la modalità slave.
riddick86:
Ho risolto!!!
In pratica ho cambiato il modo operativo dell'antenna, l'ho passata da SLAVE a SLAVE-LOOPBACK con questo codice:
Mi correggo, il mio LG Optimus ONE come l'HTC Desire HD non vedevano il modulo bluetooth perchè quest'ultimo ha di default CLASSE 0.
Cambiando la CLASSE (io ho messo CLASS=2) vengono visti senza problemi.
Il comando AT per cambiare la classe è:
AT+CLASS=2\r\n
La modalità SLAVE-LOOPBACK da problemi se si intende utilizzare Amarino, infatti l'applicazione prendeva quello che ritornava l'antenna, non l'Arduino.