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).
English version of this article: Controlling Arduino with .Net.
AdvancedSerial
Uma 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 - AdvancedSerialClient
AdvancedSerialClient é 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 exemplo
Sã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:
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/.
No comments:
Post a Comment