Forum: PC-Programmierung Arduino Leonardo antwortet nicht auf VB-Serial Script


von Mathias P. (aio)


Lesenswert?

Hallo liebe Forengemeinde,

aus meinem Titel kann man schon erkennen, dass ich ein Problem mit der 
Seriellen Datenübertragung zwischen Arduino und PC habe.

Ich habe mit Visual Studio 2015 einen kleinen Code geschrieben, der die 
am Computer angeschlossenen Geräte erkennt, ich dann in einer ComboBox 
meinen Arduino auswähle, in einer anderen Box die Baudrate einstelle und 
schlussendlich Daten an den Arduno sende.
So weit funktioniert das ganze auch mal, denn der Arduino zeigt mit der 
RX LED an, dass er etwas erhalten hat. Laut Arduino-Code, sollte der 
dann etwas zurückschreiben, tut er aber nicht. Komisch ist aber der 
umstand, dass der Arduino auf den eigenen Serial Monitor reagiert und 
Daten zurücksendet.

Ich würde mich freuen, über etwaige Lösungsvorschläge

Danke im Voraus

MP


Hier der VB Code:
1
Imports System
2
Imports System.Threading
3
Imports System.IO.Ports
4
Imports System.ComponentModel
5
Public Class Form1
6
7
    Dim myPort As Array
8
    Delegate Sub SetTextCallBack(ByVal [text] As String)
9
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
10
11
12
        write.Enabled = False
13
        close.Enabled = False
14
15
    End Sub
16
17
    Private Sub init_Click(sender As Object, e As EventArgs) Handles init.Click
18
19
        If portlist.Text = "" Then
20
            Exit Sub
21
        ElseIf baudlist.text = "" Then
22
            Exit Sub
23
        End If
24
25
        SerialPort1.PortName = portlist.Text
26
        SerialPort1.BaudRate = baudlist.Text
27
        SerialPort1.ReadTimeout = 10000
28
        SerialPort1.Open()
29
30
        write.Enabled = True
31
        close.Enabled = True
32
        init.Enabled = False
33
34
    End Sub
35
36
    Private Sub write_Click(sender As Object, e As EventArgs) Handles write.Click
37
38
        SerialPort1.Write(input.Text)
39
40
41
    End Sub
42
43
    Private Sub close_Click(sender As Object, e As EventArgs) Handles close.Click
44
45
        SerialPort1.Close()
46
47
        write.Enabled = False
48
        close.Enabled = False
49
        init.Enabled = True
50
51
    End Sub
52
53
    Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
54
55
        Me.Invoke(Sub() RecievedText())
56
57
58
    End Sub
59
60
    Private Sub RecievedText()
61
        Dim ToRead As Integer = SerialPort1.BytesToRead
62
        If ToRead > 0 Then
63
            Dim Buffer(ToRead - 1) As Byte
64
            SerialPort1.Read(Buffer, 0, ToRead)
65
            output.Text &= System.Text.Encoding.Default.GetString(Buffer)
66
        End If
67
    End Sub
68
69
    Private Sub scan_Click(sender As Object, e As EventArgs) Handles scan.Click
70
        portlist.Items.Clear()
71
        myPort = IO.Ports.SerialPort.GetPortNames()
72
        portlist.Items.AddRange(myPort)
73
74
    End Sub
75
End Class




Und hier der vom Arduino:
1
char inChar;
2
3
4
void setup() {
5
  // put your setup code here, to run once:
6
  Serial.begin(9600); //beginn der Seriellen Komunikation
7
  while (!Serial){}   //Warten auf öffnen des SerialPorts
8
9
}
10
11
void loop() {
12
  
13
  if (Serial.available() > 0) //wenn Daten vorhanden sind...
14
  {
15
    inChar=Serial.read();     //...lies die Daten aus
16
    if (inChar == 'A' );      //wenn ein A kommt,
17
    {
18
      Serial.println("Test");//Schreibe "Test" zurück
19
    }
20
   
21
  }
22
23
}

: Verschoben durch User
von Danny (Gast)


Lesenswert?

Quittiere einfach mal jedes Zeichen!

: Wiederhergestellt durch Moderator
von Mathias P. (aio)


Lesenswert?

Hallo Danny,

vielen Dank für den Tipp, aber ich denke es liegt nicht am erkennen des 
Zeischens, sondern viel eher daran, dass der Arduino, so blöd wie es 
auch klingt, nicht auf das vb script antworten will.
Ich habe nämlich den Arduino-Code ein klein wenig geändert, und jetzt 
sollte er jede sec. schreiben, dass er das Eingangszeichen nicht 
erhalten hat, oder im falle des erhaltens des Zeichens dies bestätigt. 
Im Serial Monitor der Arduino IDE funktioniert alles bestens, aber 
sobald ich das mit dem vb Script versuche, erhält der Arduino zwar 
Daten, schreibt aber nicht zurück (TX LED blinkt nicht).

Kann es vl. sein, dass meinem Atmega 32U4 für die Seriell auf USB 
umsetzung ein Firmwareupdate benötigt?

Danke,

MP

Arduino-Code:
1
char inChar;
2
3
4
void setup() {
5
  // put your setup code here, to run once:
6
  Serial.begin(9600); //beginn der Seriellen Komunikation
7
  while (!Serial){}   //Warten auf öffnen des SerialPorts
8
9
}
10
11
void loop() {
12
  
13
  if (Serial.available() > 0) //wenn Daten vorhanden sind...
14
  {
15
    inChar=Serial.read();     //...lies die Daten aus   
16
  }
17
18
  if (inChar=='$')             //wenn das Zeichen ein $ ist...
19
  {
20
    Serial.println("$ recieved");
21
  }
22
  else                        //Wenn nicht...
23
  {
24
    Serial.println("no $ recieved");
25
  }
26
  
27
  inChar = 0;                 // lösche den Inhalt des chars
28
  delay (1000);               //warte eine sec.
29
}

von Tek (Gast)


Lesenswert?

Ich würde mal mit einem Terminal Programm prüfen ob am µC alles läuft 
und erst dann das VB Programm testen. So hast Du nich zwei Unbekannte wo 
Fehler sein können.

Was passiert wenn mehr als ein Zeichen vom µC empfangen wird, welches 
steht dann in inChar? Möglicherweise hängt dein VB Programm noch nen CR 
dran.

von Mathias P. (aio)


Lesenswert?

Halo Tek,

danke für den Tipp, habs gleich mit HTerm ausprobiert, aber der Arduino 
sendet immer noch nichts an andere Programme als die eigene IDE...

Danke,

MP

von Mathias P. (aio)


Lesenswert?

Hallo an alle,

ich habe in der Zwischenzeit die Lösung herausgefunden.
Der Arduinotreiber der instaliert werden muss, um den Arduino mit der 
eigenen IDE zu programmieren ist nicht kompatibel mit vb.
Ich hab jetzt einfach einen USB zu Serial communication Board genommen 
und hat mit meinen Programmen super funktioniert.
Ich konnte leider keinen win Treiber für den Arduino Installieren, 
brauche aber zur zeit keine bessere Lösung.

Danke,

MP

von Sebastian S. (amateur)


Lesenswert?

Bist Du sicher, dass Du in das richtige Ende der Röhre schaust?

Viele Arduinos haben zwar etwas, das sich serielle Schnittstelle nennt 
aber kein RS232 Anschluss ist. Auf der PC-Seite wird praktisch nie so 
eine Pseudoschnittstelle zu finden sein, sondern eine "echte" (alt), 
oder eine USB-Seriell-Krücke. Ist ein Pegelproblem.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.