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.
Ich bin mir sicher, dass Sie wissen, dass Arduino einige Beispiele hat, die Sie mit C # verwenden können.
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 myVar
Hello World
enthält.
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
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
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);
}