Mostrar mensagens com a etiqueta Programação. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Programação. Mostrar todas as mensagens

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

CODE FOR CASH!


Este post vai directamente para o segmento Geek. Trata-se de uma competição organizada pela Ericsson que consiste em desenvolver aplicações móveis recorrendo a API desenvolvidas igualmente pela Ericsson. O prémio é aliciante: 20.000€. Portanto, "code for cash"!

Welcome to the Ericsson Application Awards - an opportunity for student developers to gain exposure with the telecom world and have a chance to win upwards of EUR 20,000 in prize money.
Requirements
Develop an application that address at least one of the categories related to the theme "Everyday life: Sustainable, Social and Fun" and build your applications on at least one Ericsson Labs enabler.
We recommend the following platforms: Java ME, Android and Browser based platforms
Prizes
In the First round 14 teams will be selected and each registered team member win one mobile phone each. The winner in the final round wins Euro 20 000, second place is awarded with Euro 15 000 and third place is awarded with Euro 10 000. The prize money will be shared equally among the registered team members. The winning teams will be contacted to ensure payment of prize. Finalists will be announced on the Ericsson Application Award portal.
Deadlines 2010
March 5 – Last date for registration of competing teams (Team Signup)
March 20 – Last date for submission of application
March 30 – Announcing winners in the first round and start of beta-test
May 20 – Announce finalist teams
The winners will be awarded at the Ericsson Application Awards ceremony in June 2010

Video demonstrativo do que se pode fazer com uma dessas API:


ericssonapplicationawards.com
labs.ericsson.com

Bookmark and Share

Talk To Arduino with C#

Vou aproveitar este post para dar uma ideia de como se pode comunicar com o Arduino através de um computador e recorrendo à linguagem C#. O objectivo é fazer uma coisa com este aspecto:

Convém dizer que não sou nenhum expert em C#, antes pelo contrário, pelo que, se fores um entendido e encontrares alguma coisa que aches obscena, dá um desconto! (e comunica que assim todos aprendemos)

Antes de mais instala a versão gratuita do Microsoft Visual C# Express (a Microsoft também tem coisas boas!)

A ideia principal do programa é enviar informação através da porta serial à qual está ligado o Arduino. Em rigor, o Arduino está ligado ao computador através de USB mas como tem um conversor USB-Serial, abstraímos-nos do USB e falamos apenas da ligação Serial.
Por forma a simplificar o "protocolo" de comunicação a informação transmitida é constituída apenas por caracteres. Um caracter corresponde a uma determinada acção. Descreve-se aqui o exemplo mais simples que é acender e apagar um LED.

Vamos então ao código!

Abre o Microsoft Visual C# Express e faz File>New>Project e na tab Visual C# escolhe "Windows Forms Application".
Vais precisar de uma TextBox, um Button, duas Labels, duas ComboBoxes e uma SerialPort. Arrasta cada um desses compotentes para a Form1 que é criada assim que crias o projecto. Para adicionar código a cada um destes componentes basta clicares duas vezes em cima de cada um.

Só vou listar aqui as duas partes de código que considero mais importantes. O código na íntegra está disponível no fim deste post.

Para que possas comunicar através da porta Serial tens que definir, pelo menos, duas coisas: a taxa de transferência de dados (BAUD RATE) e a porta em que está ligado o Arduino (por ex: COM7). Se não souberes em que porta está ligado o Arduino clica com o botão direito do rato no "O Meu Computador", "Propriedades" e em "Gestor de Dispositivos". Aí, encontras essa informação.

Para definires a baud rate utiliza o seguinte código:


private void baudrate_combobox_SelectedIndexChanged(object sender, EventArgs e)
{
serialPort.BaudRate = Convert.ToInt16(baudrate_combobox.Text);
}
O valor escolhido para a baud rate tem de corresponder ao utilizado pelo Arduino.

Para definires a porta serial bem como efectuares a sua abertura, utiliza o seguinte código:

private void port_combobox_SelectedIndexChanged(object sender, EventArgs e)
{
serialPort.PortName = port_combobox.Text;

try
{
serialPort.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

As funções try/catch previnem o programa de qualquer excepção que possa ocorrer na abertura da porta Serial.

Por fim, para enviares uma mensagem para o Arduino utiliza o seguinte código:

private void send_button_Click(object sender, EventArgs e)
{
try
{
serialPort.Write(message_textbox.Text);
message_textbox.Text = "";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,"ERROR",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
Por sua vez vais precisar de enviar código para o Arduino por forma a que este fique à espera e reconheça os comandos (caracteres, neste caso) que lhe envias. Assim faz o upload do seguinte código:

#define BAUD_RATE 9600
#define ledPin 13

char incomingChar;

void setup()
{
pinMode(ledPin, OUTPUT);

// serial communication
Serial.begin(BAUD_RATE);
}

void loop()
{
if(Serial.available() > 0){

incomingChar = Serial.read();

//your protocol goes here
switch(incomingChar){
case '1':
// led is ON
digitalWrite(ledPin, HIGH);
break;
case '0':
// led is OFF
digitalWrite(ledPin, LOW);
break;
}
}

O que é que este código quer dizer? Quer dizer que se enviares um caracter '1' o LED ligado no pino 13 se acende e que se enviares um caracter '0' o LED fica desligado.

Concluindo... C# é uma excelente linguagem para, com poucas linhas e em pouco tempo, se fazerem umas brincadeiras interessantes. Mais. O que se tentou aqui fazer foi, nada mais nada menos, do que algo que já existe no Arduino IDE desde a sua versão 0017. Ainda assim, espero que tenha sido do teu agrado.

Downloads:
TalkToArduino C# source code
TakToArduino.pde


Mais informação:
C# na wikipedia
Arduino webpage
Microsoft Visual C# Express

Bookmark and Share