Arduino Leonardo antwortet nicht auf VB-Serial Script

OP #4415137
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
}
OP #4416060
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
}
Gast #4416181
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.
OP #4421890
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
#4421909
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren