PDA

View Full Version : Inviare e ricevere array di bytes porta seriale


francescoB81
26-02-2013, 10:21
Salve

Sto cercando di inviare un array di dati ad un dispositivo Bluetooth e di riceverli da quest'ultimo. L'ambiente di sviluppo che sto utilizzando è visual studio 2010 e il linguaggio C++. Premetto che sono un programmatore alle prime armi.
Utilizzando un codice che si trova in rete sono riuscito a stabilire la connessione bluetooth tra PC e dispositivo; ora vorrei mandare il seguente array di byte:{0x00,0x02,0x06,0x13,0x01,0x01,0x00} e leggere poi i byte che mi arrivano dal dispositivo. Per fare ciò ho utilizzato il seguente codice:

if(this->serialPort1->IsOpen){
//this->_serialPort->WriteLine(String::Format("<{0}>: {1}",name,message));
//this->serialPort1->WriteLine(message);
array<Byte>^TxBfr={0x00,0x02,0x06,0x13,0x01,0x01,0x00};
this->serialPort1->Write(TxBfr,0,7);

try{
this->textBox1->Text=this->serialPort1->ReadLine();
//this->textBox1->Text=this->serialPort1->ReadByte();
//printf("%02X",this->serialPort1->ReadByte());
//printf ("%s \n", "A string");
}
catch(TimeoutException^){
this->textBox1->Text="Timeout Exception";
}

Nel codice ho lasciato volutamente anche le righe commentate: non so per esempio se è meglio usare ReadByte o ReadLine.

Quando faccio girare il codice ho solo questo messaggio: "TimeoutException";

Come potrei fare per verificare se sto mandando correttamentei dati?

Spero mi possiate aiutare...
Saluti
F

!fazz
26-02-2013, 16:42
Salve

Sto cercando di inviare un array di dati ad un dispositivo Bluetooth e di riceverli da quest'ultimo. L'ambiente di sviluppo che sto utilizzando è visual studio 2010 e il linguaggio C++. Premetto che sono un programmatore alle prime armi.
Utilizzando un codice che si trova in rete sono riuscito a stabilire la connessione bluetooth tra PC e dispositivo; ora vorrei mandare il seguente array di byte:{0x00,0x02,0x06,0x13,0x01,0x01,0x00} e leggere poi i byte che mi arrivano dal dispositivo. Per fare ciò ho utilizzato il seguente codice:

if(this->serialPort1->IsOpen){
//this->_serialPort->WriteLine(String::Format("<{0}>: {1}",name,message));
//this->serialPort1->WriteLine(message);
array<Byte>^TxBfr={0x00,0x02,0x06,0x13,0x01,0x01,0x00};
this->serialPort1->Write(TxBfr,0,7);

try{
this->textBox1->Text=this->serialPort1->ReadLine();
//this->textBox1->Text=this->serialPort1->ReadByte();
//printf("%02X",this->serialPort1->ReadByte());
//printf ("%s \n", "A string");
}
catch(TimeoutException^){
this->textBox1->Text="Timeout Exception";
}

Nel codice ho lasciato volutamente anche le righe commentate: non so per esempio se è meglio usare ReadByte o ReadLine.

Quando faccio girare il codice ho solo questo messaggio: "TimeoutException";

Come potrei fare per verificare se sto mandando correttamentei dati?

Spero mi possiate aiutare...
Saluti
F
la cosa più veloce imho è costruirsi uno sniffer 232 con un paio di connettori dsub e controllare direttamente quello che passa per il cavo

ESSE-EFFE
27-02-2013, 16:39
L'ambiente di sviluppo che sto utilizzando è visual studio 2010 e il linguaggio C++. Premetto che sono un programmatore alle prime armi.
Dato che dici di essere alle prime armi, perchè hai optato per C++ invece che C#?

Quando faccio girare il codice ho solo questo messaggio: "TimeoutException";
Usi ReadLine e se il protocollo di comunicazione non prevede il "NewLine" è normale ricevere quell'eccezione. Dopo che hai inviato il pacchetto devi metterti in attesa della risposta, interpretando il protocollo specifico. Usa uno degli altri metodi per leggere, tipo Read o ReadExisting. Di solito si fa in un thread a parte.