web-dev-qa-db-de.com

Arduino UNO-Grundlagen für C #

Hallo, ich bin neu in der Steuerung von Hardware mit einem USB-Anschluss. Ich habe einen Arduino UNO Microcontroller und suchte nach Ressourcen, um mich anzufangen. Ich programmiere in C # (Visual Studio 2010) und fragte mich, ob es einige Grundlagen gab, die ich zum Einrichten/Testen meiner Verbindung verwenden konnte. Ich suche nach etwas so einfachem wie einem Kontrollkästchen in meiner WinForm, das den digitalen E/A-Pin am Arduino zwischen hoch und niedrig umschaltet. Ich habe nicht viel gefunden, um damit anzufangen.

Danke im Voraus.

16
ikathegreat

Ich bin mir sicher, dass Sie wissen, dass Arduino einige Beispiele hat, die Sie mit C # verwenden können.

Hier ist ihre C # -Seite

7
Sandeep Bansal

Es gibt viele Möglichkeiten, einen Befehl vom PC an ein Arduino zu senden. Sandeep Bansil ist ein gutes Beispiel für das Anschließen und Lesen einer seriellen Schnittstelle. 

Nachfolgend finden Sie ein Arbeitsbeispiel, in dem beschrieben wird, wie auf einem seriellen Anschluss basierend auf dem Status eines Kontrollkästchens in einem AMD-Fenster von Windows Form geschrieben wird, wie die Anforderung vom PC auf dem Arduino verarbeitet wird.

Dies ist ein ausführliches Beispiel, es gibt sauberere Lösungen, aber das ist klarer. 

Im Beispiel wartet der Arduino auf ein 'a' oder ein 'b' vom PC. Der PC sendet ein 'a', wenn ein Kontrollkästchen aktiviert ist, und ein 'b', wenn ein Kontrollkästchen deaktiviert ist. In diesem Beispiel wird der digitale Pin 4 auf dem Arduino angenommen.

Arduino-Code

#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 #

Dieser Code befindet sich in Ihrer .cs-Datei. In diesem Beispiel wird davon ausgegangen, dass Sie dem Ankreuzfeld Formularereignisse für OnOpenForm, OnCloseForm und das Ereignis OnClick zugeordnet haben. Von jedem Ereignis aus können Sie die jeweiligen Methoden unten aufrufen.

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

Spitze: 

Wenn Sie eine Nachricht aus dem Arduino lesen möchten, fügen Sie Ihrem Formular einen Zeitgeber mit einem Intervall von 50 oder 100 Millisekunden hinzu. 

Im OnTick-Ereignis des Timers sollten Sie mit folgendem Code nach Daten suchen:

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

Das Ergebnis von readLine() wird sein, dass myVarHello World enthält.

13
Visual Micro

Da Sie Visual Studio verwenden, interessieren Sie sich möglicherweise für dieses coole Plug-in für Visual Studio für die Arduino-Entwicklung. http://www.visualmicro.com

5
sbonkosky

ich habe an einer C # -Bibliothek gearbeitet, um mit Arduinos zu kommunizieren. Es gibt eine Menge guter Codebeispiele und sollte gut genug kommentiert werden, um die Dinge sinnvoll zu machen, hoffe, das hilft!

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

1
keef

Die grundlegende Art der Kommunikation zwischen PC und Arduino besteht darin, 2 Tasten auf dem PC zu erstellen und das Licht an Arduino ein-/auszuschalten. Verwenden Sie portwrite();

Hier ist die einfachste Demo: https://www.instructables.com/id/C-Serial-Communication-With-Arduino/ Das ist absolut was Sie wollen!

C # -Code:

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

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);      
}
0
haoming weng