A última versão da ebl-arduino (r52) trás para os usuários do Arduino uma forma fácil de trocar comandos e dados entre PC e Arduino usando .Net, sendo também fácil de ser portado para outras linguagens e transportes (TCP e assim por diante).
AdvancedSerialUma nova classe que implementa um protocolo serial que torna mais fácil a comunicação entre aplicativos do PC e os programas do Arduino.
Este é um exemplo de programa que recebe comandos do PC para controlar um display LCD:
#include <AdvancedSerial.h>
#include <LiquidCrystal.h>
#define BACKLIGHT_ON_MESSAGE 0
#define BACKLIGHT_OFF_MESSAGE 1
#define TEXT_MESSAGE 2
//pins
#define PIN_BACKLIGHT 7
//configure lcd
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
void setup() {
//configure backlight pin
pinMode(PIN_BACKLIGHT, OUTPUT);
//configure LCD
lcd.begin(16, 2);
//begin serial port with a desirable speed
Serial.begin(115200);
//configure receiver callback
AdvancedSerial.setReceiver(onMessage);
}
void loop() {
//AdvancedSerial job
AdvancedSerial.loop();
}
void onMessage(AdvancedSerialMessage* message) {
switch (message->id) {
case BACKLIGHT_ON_MESSAGE:
digitalWrite(PIN_BACKLIGHT, HIGH);
break;
case BACKLIGHT_OFF_MESSAGE:
digitalWrite(PIN_BACKLIGHT, LOW);
break;
case TEXT_MESSAGE:
lcd.clear();
for (int i=0; i<message->size; i++) {
if (i==16) lcd.setCursor(0, 1);
lcd.write((char)message->payload[i]);
}
break;
}
}
Client API - AdvancedSerialClientAdvancedSerialClient é o ponto de entrada para comunicação com programas baseados na AdvancedSerial. Ele permite garantir que o dispositivo está conectado, enviar mensagens para ele e receber eventos assíncronos.
Esse pedaço de código C# é responsável por enviar mensagens de controle para o programa LCDWriter do último exemplo:
try
{
//create object
AdvancedSerialClient ArduinoClient = new AdvancedSerialClient();
//connect to device
ArduinoClient.Open(Arguments[PARAMETER_PORT].ToString(), 115200);
//command for LED
if (Arguments.ContainsKey(PARAMETER_BACKLIGHT))
{
SerialProtocol.AdvancedSerialMessage BacklightMessage = new SerialProtocol.AdvancedSerialMessage();
if ((bool)Arguments[PARAMETER_BACKLIGHT])
BacklightMessage.ID = BACKLIGHT_ON_MESSAGE;
else
BacklightMessage.ID = BACKLIGHT_OFF_MESSAGE;
ArduinoClient.Send(BacklightMessage);
}
//command for text
if (Arguments.ContainsKey(PARAMETER_TEXT))
{
SerialProtocol.AdvancedSerialMessage TextMessage = new SerialProtocol.AdvancedSerialMessage();
TextMessage.ID = TEXT_MESSAGE;
TextMessage.Payload = new System.Text.ASCIIEncoding().GetBytes(Arguments[PARAMETER_TEXT].ToString());
TextMessage.Size = (byte)TextMessage.Payload.Length;
ArduinoClient.Send(TextMessage);
}
}
catch (Exception ex)
{
Console.Write("Error: " + ex.Message);
}
O completo, e pronto para usar, código desse exemplo está disponível na árvore de código da biblioteca.
Rodando o exemploSão necessários para rodar adequadamente esse exemplo:
* 1 Arduino;
* 1 Protoboard (não esquecer o jogo de fios para as conexões);
* 1 Display 1602A (16x2 com luz de fundo);
* 1 Potenciômetro de 10k.
Os componentes deverão ser montados na protoboard da seguinte forma:
Clique aqui para baixar o arquivo do Fritzing de fonte dessa imagem.
Uma vez que voce tiver gravado o programa LCDWriter dos exemplos da AdvancedSerial (menu da IDE: File/Examples/AdvancedSerial/LCDWriter) para sua placa Arduino o exemplo da API cliente LCDWrite.exe (diretório da IDE: libraries\AdvancedSerial\clientapi\dotnet\Release) será capaz de controlar a luz de fundo e o texto mostrado no display LCD.
Para encerrar, uma pequena demonstração do exemplo funcionando:
Esse projeto possui um repositório com maiores informações sobre as classes, instruções de uso e opções para download. Ele pode ser acessado pela URL
http://code.google.com/p/ebl-arduino/.
Fonte:
Controlando o Arduino com .Net