Serial Talk

Diria que este post é uma continuação deste aqui. Nesse tutorial dei a conhecer uma aplicação feita em C# que permitia enviar informação pela porta serie. Mas muitas das vezes é util não só enviar como também receber. E por esse motivo aqui segue mais uma "achega". Todo o código fonte é disponibilizado ali mais abaixo.

O objectivo desta vez é fazer uma coisa com este aspecto:


Esta aplicação foi feita a pensar no Arduino mas, como é obvio, pode ser utilizada com qualquer disposivo que comunique através da porta série do PC.

Para usar o programa basta definir a porta COM e a baud rate. A janela do programa pode ser redimensionada ao gosto do utilizador para melhor visualização das mensagens a enviar/receber.

O caracter de terminação da comunicação série pode ser definido no código que disponibilizo através da seguinte linha:

const string TERM_CHAR = "\n";

Bastando substituir o \n por outro caracter à escolha.

Tendo em conta o código utilizado no Talk to Arduino, a única novidade é a existência de uma thread dedicada à recepção de mensagens.

Mensagens seguidas de "S:" correspondem a mensagens enviadas e, analogamente, mensagens seguidas de "R:" correspondem a mensagens recebidas.

O código enviado para o Arduino é apenas um exemplo. Neste caso o objectivo foi receber strings e dar-lhe o devido tratamento para que a informação transferida tivesse um aspceto mais human-friendly (e menos machine-friendly). O protocolo usado poderá ser completamente diferente e mais optimizado.

#define BAUD_RATE 9600
#define BUF_LEN 128
#define TERM_CHAR '\n'

void setup(){
Serial.begin(BAUD_RATE);
}

int i;
char incomingChar, buf[BUF_LEN];

void loop(){

//clean buffer
memset(buf,'\0',BUF_LEN); i = 0;

// read incoming message
while(Serial.available()){
incomingChar = (char) Serial.read();
if(incomingChar != TERM_CHAR && i != BUF_LEN)
buf[i++] = incomingChar;
else
break;

delay(1); // wait for another byte
}

// your protocol goes here
if(strcmp(buf,"Hello Arduino!") == 0)
Send("Hello PC!");
else
if(strcmp(buf,"How are you?") == 0)
Send("I'm reeeally fine.");

}

void Send(char *msg){
Serial.print(msg);
Serial.print(TERM_CHAR);
}


Posto isto... Enjoy!
Qualquer dúvida ou sugestão fica à vontade.

SerialTalk C# source code
SerialTalk.pde


Bookmark and Share

1 comentários:

Cool Programmers disse...

Hi,
I am using Visual Studio 2010 and it is showing this error please help me...
Error 1 Unable to find manifest signing certificate in the certificate store. Serial Talk

Please help.
My email address is nikunj2512@gmail.com