studio - Fundamentos de Arduino UNO para C#
recibir datos de arduino en c# (5)
Hola, soy nuevo en el control de hardware con una conexión USB. Tengo un microcontrolador Arduino UNO y estaba buscando recursos para que empiece. Programé en C # (Visual Studio 2010) y me preguntaba si habría algunos conceptos básicos que podría usar para configurar / probar mi conexión. Estoy buscando algo tan simple como una casilla de verificación en mi WinForm que alterna el pin de E / S digital en el Arduino entre alto y bajo. No he podido encontrar mucho para empezar.
Gracias por adelantado.
Estoy seguro de que sabes que Arduino tiene algunas muestras que puedes usar con C #
Hay muchas maneras de enviar un comando desde la PC a un arduino. Sandeep Bansil proporciona un buen ejemplo de conexión y lectura de un puerto serie.
A continuación se muestra un ejemplo práctico de cómo escribir en un puerto serie en función del estado de una casilla de verificación en un formulario de Windows y cómo procesar la solicitud desde la PC en el arduino.
Este es un ejemplo detallado, hay soluciones más limpias, pero esto es más claro.
En el ejemplo, el arduino espera una ''a'' o una ''b'' desde el PC. la computadora envía una ''a'' cuando se marca una casilla de verificación y envía una ''b'' cuando la casilla de verificación no está marcada. El ejemplo asume el pin digital 4 en el arduino.
Código arduino
#define DIGI_PIN_SOMETHING 4
unit8_t commandIn;
void setup()
{
//create a serial connection at 57500 baud
Serial.begin(57600);
}
void loop()
{
//if we have some incomming serial data then..
if (Serial.available() > 0)
{
//read 1 byte from the data sent by the pc
commandIn = serial.read();
//test if the pc sent an ''a'' or ''b''
switch (commandIn)
{
case ''a'':
{
//we got an ''a'' from the pc so turn on the digital pin
digitalWrite(DIGI_PIN_SOMETHING,HIGH);
break;
}
case ''b'':
{
//we got an ''b'' from the pc so turn off the digital pin
digitalWrite(DIGI_PIN_SOMETHING,LOW);
break;
}
}
}
}
Windows C #
Este código residirá en su archivo .cs de formulario. El ejemplo asume que ha adjuntado eventos de formulario para OnOpenForm, OnCloseForm y el evento OnClick a la casilla de verificación. Desde cada uno de los eventos puede llamar a los métodos respectivos a continuación ...
using System;
using System.IO.Ports;
class fooForm and normal stuff
{
SerialPort port;
private myFormClose()
{
if (port != null)
port.close();
}
private myFormOpen()
{
port = new SerialPort("COM4", 57600);
try
{
//un-comment this line to cause the arduino to re-boot when the serial connects
//port.DtrEnabled = true;
port.Open();
}
catch (Exception ex)
{
//alert the user that we could not connect to the serial port
}
}
private void myCheckboxClicked()
{
if (myCheckbox.checked)
{
port.Write("a");
}
else
{
port.Write("b");
}
}
}
Propina:
Si desea leer un mensaje del arduino, agregue un temporizador a su formulario con un intervalo de 50
o 100
milisegundos.
En el evento OnTick
del temporizador, debe verificar los datos utilizando el siguiente código:
//this test is used to see if the arduino has sent any data
if ( port.BytesToRead > 0 )
//On the arduino you can send data like this
Serial.println("Hellow World")
//Then in C# you can use
String myVar = port.ReadLine();
El resultado de readLine()
será que myVar
contiene Hello World
.
He estado trabajando en ac # library para interactuar con Arduinos, hay un montón de buenos ejemplos de código allí y deberían comentarse lo suficientemente bien como para que las cosas tengan sentido, ¡espero que eso ayude!
github repo: https://github.com/qwertykeith/ArduinoLibrary
La forma básica de comunicación entre la PC y Arduino es crear 2 botones en la PC y encender / apagar la luz en Arduino. Utilice portwrite();
Aquí está la demostración más simple: https://www.instructables.com/id/C-Serial-Communication-With-Arduino/ Eso es absolutamente lo que quieres!
Código C #:
using System;
using System.Windows.Forms;
using System.IO.Ports;
namespace ledcontrol
{
public partial class Form1 : Form
{
SerialPort port;
public Form1()
{
InitializeComponent();
this.FormClosed += new FormClosedEventHandler(Form1_FormClosed);
if (port==null)
{
port = new SerialPort("COM7", 9600);//Set your board COM
port.Open();
}
}
void Form1_FormClosed(object sender,FormClosedEventArgs e)
{
if(port !=null &&port.IsOpen)
{
port.Close();
}
}
private void button1_Click(object sender, EventArgs e)
{
PortWrite("1");
}
private void button2_Click(object sender, EventArgs e)
{
PortWrite("0");
}
private void PortWrite(string message)
{
port.Write(message);
}
}
}
Bosquejo de Arduino:
const int LedPin = 13;
int ledState = 0;
void setup()
{
pinMode(LedPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
char receiveVal;
if(Serial.available() > 0)
{
receiveVal = Serial.read();
if(receiveVal == ''1'')
ledState = 1;
else
ledState = 0;
}
digitalWrite(LedPin, ledState);
delay(50);
}
Ya que está utilizando Visual Studio, puede interesarle este complemento de Visual Studio para el desarrollo de Arduino. http://www.visualmicro.com