Hallo
Das ist mein erstes Tutorial, also Verbesserungen und Kritik sind sehr erwünscht.
In diesem Tutorial geht es um die Kommunikation mit VB und dem Arduino über die Serielle Schnittstelle.
Folgende Punkte werde ich behandeln:
- Simple Kommunikation (Nur einzelene Chars)
- Erweiterte Kommunikation (Ganze Strings übergeben)
- Automatische Erkennung des Arduino
Simple Kommunikation:
Das wurde hier schon einmal leicht angesprochen doch ich werde es trozdem einbauen so als kleiner start.
Hier geht es darum einzelne Chars vom PC aus an den Arduino zu senden und diese auszuwerten. Dies wird mittels eines SerialPorts gemacht.
Erstellen eines SerialPorts:
Entweder wählt man ihn als SerialPort in der Toolbox aus oder man erstellt ihn über Code:
Nun muss unserem Serialport einen Namen zugewiesen werden, welcher mit dem Port des Arduinos übereinstimmt. Welcher das ist, ist überall anderst, darum wird später noch die Automatische Erkennung erklärt.
In diesem Beispiel sagen wir einfach ist es „COM5“.
Nachdem dies geschehen ist kann der Port geöffnet werden. Achtung ein Port kann immer nur von einem Programm gleichzeitig verwendet werden.
Jetzt ist er bereit um die Chars an den Arduino zu senden. Wir senden hier jetzt einfach eine 0 an den Arduino, was dieser nacher damit anfängt kommt später.
Gut und nun zum Arduino:
Als allererstes muss beim Arduino auch den SerialPort aktiviert werden. Dies geschiet im setup loop:
Die 9600 gibt die Baud-Rate an, die ist Standard immer 9600 darum auch hier. Der Integer „inByte“ wird dazu verwendet den einkommenden Char zu speichern.
Und nun zum Empfangen des Signals:
So, der ganze code der in void loop drin steht wird immer wiederholt. Über Seriel.available() wird überprüft ob etwas gesendet wurde und fals ja wird es mit Serial.read() ausgelesen und in inByte gespeichert.
In unserem Fall die „0“, jetzt wie komme ich auf 48? Gesendet wurde ein Char, doch der Arduino nimmt diesen als Byte auf. Welcher Char welches Byte ist kann man in einer Ascii-Tabelle nachschauen.
Erweiterte Kommunikation:
Hier geht es darum einen ganzen String zu versenden und der Arduino zeigt den dann vielleicht auf einem kleinen Display an.
Das senden geht genau wie oben nur das man statt „0“ auch „Hallo Test Test“ versenden kann.
Doch wie weiss der Arduino jetzt wann der ganze String gesendet wurde? Ganz einfach, nach jedem Senden eines Strings wird noch ein „Enter“ gesendet:
So nun zum Arduino:
Automatische Erkennung des Arduinos:
Die Idee ist sehr simpel. Man programmiert den Arduino so das wenn man z.B. „$“ sendet das er statt es in das inText Array schreibt, einen String zurücksendet der z.B. der Name des Gerätes ist.
So und nun muss man in VB noch alle Ports auflisten und jedem ein „$“ senden, und bei dem wo die Antwort „test_geraet“ zurückkommt, den kann man als Arduino Port nehmen.
Ein Beispiel wie das zu lösen ist:
Nun kann das check_port Event aufgerufen werden und es wird jeder Port abgescannt ob der Arduino angeschlossen ist.
So das wars mit meinem Tutorial, ich hoffe es hat euch gefallen und ihr habt dabei was gelernt.
Bei Fragen und Kritik nicht zögern, beides ist sehr erwünscht.
Mfg Ebrithil
Das ist mein erstes Tutorial, also Verbesserungen und Kritik sind sehr erwünscht.
In diesem Tutorial geht es um die Kommunikation mit VB und dem Arduino über die Serielle Schnittstelle.
Folgende Punkte werde ich behandeln:
- Simple Kommunikation (Nur einzelene Chars)
- Erweiterte Kommunikation (Ganze Strings übergeben)
- Automatische Erkennung des Arduino
Simple Kommunikation:
Das wurde hier schon einmal leicht angesprochen doch ich werde es trozdem einbauen so als kleiner start.
Hier geht es darum einzelne Chars vom PC aus an den Arduino zu senden und diese auszuwerten. Dies wird mittels eines SerialPorts gemacht.
Erstellen eines SerialPorts:
Entweder wählt man ihn als SerialPort in der Toolbox aus oder man erstellt ihn über Code:
Nun muss unserem Serialport einen Namen zugewiesen werden, welcher mit dem Port des Arduinos übereinstimmt. Welcher das ist, ist überall anderst, darum wird später noch die Automatische Erkennung erklärt.
In diesem Beispiel sagen wir einfach ist es „COM5“.
Nachdem dies geschehen ist kann der Port geöffnet werden. Achtung ein Port kann immer nur von einem Programm gleichzeitig verwendet werden.
Jetzt ist er bereit um die Chars an den Arduino zu senden. Wir senden hier jetzt einfach eine 0 an den Arduino, was dieser nacher damit anfängt kommt später.
Gut und nun zum Arduino:
Als allererstes muss beim Arduino auch den SerialPort aktiviert werden. Dies geschiet im setup loop:
Die 9600 gibt die Baud-Rate an, die ist Standard immer 9600 darum auch hier. Der Integer „inByte“ wird dazu verwendet den einkommenden Char zu speichern.
Und nun zum Empfangen des Signals:
So, der ganze code der in void loop drin steht wird immer wiederholt. Über Seriel.available() wird überprüft ob etwas gesendet wurde und fals ja wird es mit Serial.read() ausgelesen und in inByte gespeichert.
In unserem Fall die „0“, jetzt wie komme ich auf 48? Gesendet wurde ein Char, doch der Arduino nimmt diesen als Byte auf. Welcher Char welches Byte ist kann man in einer Ascii-Tabelle nachschauen.
Erweiterte Kommunikation:
Hier geht es darum einen ganzen String zu versenden und der Arduino zeigt den dann vielleicht auf einem kleinen Display an.
Das senden geht genau wie oben nur das man statt „0“ auch „Hallo Test Test“ versenden kann.
Doch wie weiss der Arduino jetzt wann der ganze String gesendet wurde? Ganz einfach, nach jedem Senden eines Strings wird noch ein „Enter“ gesendet:
So nun zum Arduino:
Quellcode
- int inByte;
- char inText[300];
- int index;
- void setup() {
- Serial.begin(9600);
- }
- if (Serial.available() > 0) {
- inByte = Serial.read();
- if (inByte == 13) // Wenn das Enter ankommt
- {
- // Hier kann alles Mögliche stehen, der vor dem Enter gesendete Text steht im inText Array
- // Nach der Verarbeitung des Textes muss der Index auf 0 gesetzt werden und das Array gelöscht
- index = 0;
- memset(&inText[0], 0, sizeof(inText));
- }
- else // Falls kein Enter kommt muss der Text gespeichert werden in dem inText Array
- {
- if (index < 300) { // Diese Überprüfung ist nötig, damit das Array nicht überfüllt wird sonst werden andere Variablen überschrieben.
- inText[index] = inByte;
- index += 1;
- }
- }
Automatische Erkennung des Arduinos:
Die Idee ist sehr simpel. Man programmiert den Arduino so das wenn man z.B. „$“ sendet das er statt es in das inText Array schreibt, einen String zurücksendet der z.B. der Name des Gerätes ist.
So und nun muss man in VB noch alle Ports auflisten und jedem ein „$“ senden, und bei dem wo die Antwort „test_geraet“ zurückkommt, den kann man als Arduino Port nehmen.
Ein Beispiel wie das zu lösen ist:
VB.NET-Quellcode
- Dim SP_Empfangen As String
- Private _Encoding As System.Text.Encoding
- Public Sub New()
- InitializeComponent()
- _Encoding = System.Text.Encoding.Default
- End Sub
- Private Sub SP_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SP.DataReceived
- Dim ToRead As Integer = SP.BytesToRead
- If ToRead > 0 Then
- Dim Buffer(ToRead - 1) As Byte
- SP.Read(Buffer, 0, ToRead)
- SP_Empfangen &= _Encoding.GetString(Buffer)
- End If
- End Sub
- Private Sub check_port()
- For Each Port As String In ComboBox1.Items
- If SP.IsOpen = True Then
- SP.Close()
- End If
- SP.PortName = Port
- SP.Open()
- SP_Empfangen = Nothing
- SP.Write("1")
- sleep(100)
- If Not SP_Empfangen = Nothing Then
- If SP_Empfangen.Contains("test_geraet") Then
- ComboBox1.SelectedItem = Port
- Exit Sub
- End If
- End If
- Next
- MessageBox.Show("Gerät wurde nicht gefunden!", "Fehler!", MessageBoxButtons.OK, MessageBoxIcon.Error)
- End Sub
Nun kann das check_port Event aufgerufen werden und es wird jeder Port abgescannt ob der Arduino angeschlossen ist.
So das wars mit meinem Tutorial, ich hoffe es hat euch gefallen und ihr habt dabei was gelernt.
Bei Fragen und Kritik nicht zögern, beides ist sehr erwünscht.
Mfg Ebrithil
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ebrithil“ ()