2012-05-02 16 views
13

Ciao, sono nuovo nell'hardware di controllo con una connessione USB. Ho un microcontroller Arduino UNO e cercavo risorse per iniziare. Ho programmato in C# (Visual Studio 2010) e mi chiedevo se ci fossero alcune basi che potrei usare per impostare/testare la mia connessione. Sto cercando qualcosa di semplice come una casella di controllo nel mio WinForm che attiva il pin I/O digitale su Arduino tra alto e basso. Non sono stato in grado di trovare molto per iniziare.Nozioni di base di Arduino UNO per C#

Grazie in anticipo.

risposta

6

Sono sicuro si sa che Arduino ha un paio di esempi che è possibile utilizzare con C#

Here's their C# page

+0

per qualche ragione, la mia ricerca non mi ha fatto quella pagina. Grazie. – ikathegreat

5

Dal momento che si sta utilizzando Visual Studio, potreste essere interessati a questo fresco Studio plug-visivo per Sviluppo di Arduino. http://www.visualmicro.com

11

Ci sono molti modi per inviare un comando dal pc ad un arduino. Sandeep Bansil fornisce un buon esempio di connessione e lettura di una porta seriale.

Di seguito è riportato un esempio funzionante di come scrivere su una porta seriale in base allo stato di una casella di controllo su un modulo di Windows e come elaborare la richiesta dal PC sull'arduino.

Questo è un esempio prolisso, ci sono soluzioni più pulite ma questo è più chiaro.

Nell'esempio, l'arduino attende dal pc una "a" o una "b". il pc invia un 'a' quando una casella è selezionata e invia una 'b' quando una casella è deselezionata. Nell'esempio si presuppone il pin digitale 4 sull'arduino.

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

di Windows C#

Questo codice risiederà nel file di modulo .cs. Nell'esempio si presuppone che siano stati associati eventi del modulo per OnOpenForm, OnCloseForm e l'evento OnClick alla casella di controllo. Da ciascuno degli eventi è possibile chiamare i rispettivi metodi indicati ....

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

Suggerimento:

Se si desidera leggere un messaggio del arduino quindi aggiungere un timer per il modulo con un intervallo di 50 o 100 millisecondi.

In OnTick caso di timer si dovrebbe verificare per i dati utilizzando il seguente codice:

//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(); 

Il risultato di readLine() sarà che myVar contiene Hello World.

1

Ho lavorato su una libreria C# per interfacciarlo con Arduinos, ci sono molti buoni esempi di codice e ci dovrebbero essere commentati abbastanza bene da aiutare le cose a dare un senso, sperare che aiuti!

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

0

Il modo di base per la comunicazione tra PC e Arduino è creare 2 pulsanti su PC e accendere/spegnere la luce su Arduino. Utilizzare portwrite();

Ecco la demo più semplice: https://www.instructables.com/id/C-Serial-Communication-With-Arduino/ che è assolutamente quello che vuoi!

C# Codice:

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 schizzo:

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