2012-05-02 15 views
13

Hola, soy nuevo en el control del hardware con una conexión USB. Tengo un Microcontrolador Arduino UNO y estaba buscando recursos para comenzar. Programo en C# (Visual Studio 2010) y me preguntaba si había algunas cosas básicas que podría usar para configurar/probar mi conexión. Estoy buscando algo tan simple como una casilla de verificación en mi WinForm alternar el pin de E/S digital en el Arduino entre alto y bajo. No he podido encontrar mucho para empezar.Conceptos básicos de Arduino UNO para C#

Gracias de antemano.

Respuesta

6

Estoy seguro de que saber que Arduino tiene un par de muestras que se pueden utilizar con C#

Here's their C# page

+0

por alguna razón, mi búsqueda nunca me puso esa página. Gracias. – ikathegreat

11

Hay muchas maneras de enviar un comando de 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 según el 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 claras, pero esto es más claro.

En el ejemplo, el arduino espera una 'a' o una 'b' de la pc. la PC envía una 'a' cuando se marca una casilla de verificación y envía una 'b' cuando una casilla de verificación está desmarcada. El ejemplo asume el pin digital 4 en el arduino.

código de 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; 
      } 
     } 
    } 
} 

de Windows C#

Este código residirá en el archivo de su formulario de Cs. El ejemplo asume que ha adjuntado eventos de formulario para OnOpenForm, OnCloseForm y el evento OnClick a la casilla de verificación. De cada uno de los eventos a los que 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");  
     } 
    } 
} 

Consejo:

Si desea leer un mensaje del Arduino a continuación, añadir un temporizador para su formulario con un intervalo de 50 o 100 milisegundos.

En el caso de OnTick el temporizador debe comprobar 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 contiene myVarHello World.

1

He estado trabajando en una biblioteca de C# para interactuar con Arduinos, hay muchos buenos ejemplos de código allí y deberían ser comentados lo suficiente como para ayudar a que las cosas tengan sentido, ¡espero que eso ayude!

github repo: https://github.com/qwertykeith/ArduinoLibrary

0

La forma básica de comunicación entre el PC y el Arduino es crear 2 botones en la PC y encender/apagar la luz sobre Arduino. Utilice portwrite();

Aquí está la demostración más simple: https://www.instructables.com/id/C-Serial-Communication-With-Arduino/ que es absolutamente lo que quiere!

C# Código:

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); 
     } 
    } 
} 

Arduino boceto:

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);  
} 
Cuestiones relacionadas