Hey iedereen,
Ik zit al de hele avond enorm te prutsen om RS232 communicatie met m'n Arduino voor elkaar te krijgen. Gisteren heeft een GoT-ter me al geholpen met de Arduino code (die nu werkt voor zover ik kan checken).
Maar nu zit ik met de VB code die niet meewerkt. Het zou als volgt moeten verlopen:
- VB stuurt string via COM poort naar Arduino
- Arduino ontvangt deze en stuurt 'm net zo hard weer terug
- VB ontvangt string en zet deze in een textbox
Dit werkt een heel klein beetje, maar de string die VB terugkrijgt is meestal helemaal onzinnig. Maar heel soms komt ie wel goed over.
Om te beginnen maar eens de VB code:
Het hangt nog een beetje van testjes aan elkaar. Direct na het versturen van de string roep ik meteen 'receiveSerialData' aan, want dat is de enige manier waarop ie nog iets binnenkrijgt. Als ik het doe met de knop ('Button1_Click') gebeurt er helemaal niks. Waarschijnlijk omdat ik te traag ben.
Als ik de string ditiseenteststring~ verstuur (die tilde heb ik nodig als EOL karakter), dan moet ik 3 keer versturen voordat er ook iets terugkomt. Wat er terugkomt ziet er dan zo uit:
d?????????????????ditisee?W??????????ditiseenteststring~
Zoals je ziet is de laatste wel ok. Ik heb al geprobeerd langer te wachten, door een sleep van een x aantal milliseconden ertussen te zetten, maar dit levert ook weinig nuttigs op.
Hieronder de code op de Arduino, wie weet zit daar nog iets fout, maar uit mijn tests blijkt dat in ieder geval niet.
Ik kan op internet maar bijzonder weinig goede voorbeelden vinden en wat ik vind werkt niet als ik het zelf probeer. Er moeten toch mensen zijn die vaker dit soort dingen vanuit VB.NET doen?
Alle hulp is welkom en mijn dank is al bij voorbaat eindeloos!
Ik zit al de hele avond enorm te prutsen om RS232 communicatie met m'n Arduino voor elkaar te krijgen. Gisteren heeft een GoT-ter me al geholpen met de Arduino code (die nu werkt voor zover ik kan checken).
Maar nu zit ik met de VB code die niet meewerkt. Het zou als volgt moeten verlopen:
- VB stuurt string via COM poort naar Arduino
- Arduino ontvangt deze en stuurt 'm net zo hard weer terug
- VB ontvangt string en zet deze in een textbox
Dit werkt een heel klein beetje, maar de string die VB terugkrijgt is meestal helemaal onzinnig. Maar heel soms komt ie wel goed over.
Om te beginnen maar eens de VB code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
| Imports System Imports System.IO.Ports Imports System.Threading 'This is the module that will handle communications with the Arduino UNO. Public Class Arduino_Comms Dim arduinoport As New SerialPort() Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Hier alleen crap die geladen moet worden bij het laden van de Form. End Sub Private Sub Main() End Sub Private Sub btnSendToArduino_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSendToArduino.Click 'When the 'Send To Arduino' button is pressed, the value in the textbox will be sent to the Arduino (duh). Dim TypedInText TypedInText = boxInput.Text sendToArduino(TypedInText) 'boxInput.Clear() End Sub 'This function sends its input to the Arduino via the serial port Private Sub sendToArduino(ByRef arduinoCommand) Dim commandToSend As String commandToSend = arduinoCommand 'commandToSend = Str(arduinoCommand) arduinoport.PortName = "COM3" arduinoport.BaudRate = 9600 Try arduinoport.Open() arduinoport.Write(commandToSend) arduinoport.Close() Catch ex As System.Exception MsgBox("Whoops. Cannot write serial data.") 'Do whatever you want to do when there's an error here. 'In most cases, the error is caused by the fact that the Arduino is not connected. End Try 'This is just a test. Check immediately if there's anything to read receiveSerialData() End Sub Private Sub receiveSerialData() Dim nBytes As Integer Dim rxByte As Byte Dim rxChar As Char Dim rxString As String arduinoport.PortName = "COM3" arduinoport.BaudRate = 9600 Try arduinoport.Open() nBytes = arduinoport.BytesToRead boxReceived.Text = ("Bytes to read: " + Str(nBytes)) While (arduinoport.BytesToRead > 0) 'rxByte = (arduinoport.ReadByte) rxString = arduinoport.ReadLine() End While arduinoport.Close() Catch ex As System.Exception MsgBox("Whoops. Cannot read serial data.") MsgBox(ex.Message) 'Do whatever you want to do when there's an error here. 'In most cases, the error is caused by the fact that the Arduino is not connected. End Try boxReceived.Text = rxString End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click receiveSerialData() End Sub End Class |
Het hangt nog een beetje van testjes aan elkaar. Direct na het versturen van de string roep ik meteen 'receiveSerialData' aan, want dat is de enige manier waarop ie nog iets binnenkrijgt. Als ik het doe met de knop ('Button1_Click') gebeurt er helemaal niks. Waarschijnlijk omdat ik te traag ben.
Als ik de string ditiseenteststring~ verstuur (die tilde heb ik nodig als EOL karakter), dan moet ik 3 keer versturen voordat er ook iets terugkomt. Wat er terugkomt ziet er dan zo uit:
d?????????????????ditisee?W??????????ditiseenteststring~
Zoals je ziet is de laatste wel ok. Ik heb al geprobeerd langer te wachten, door een sleep van een x aantal milliseconden ertussen te zetten, maar dit levert ook weinig nuttigs op.
Hieronder de code op de Arduino, wie weet zit daar nog iets fout, maar uit mijn tests blijkt dat in ieder geval niet.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| /* * This sketch is a test for sending strings back and forth via the serial port. */ void setup() { // initialize the serial communication: Serial.begin(9600); } void loop() { char rxbyte; String rxstring; while (true) { // check if data has been sent from the computer: if (Serial.available()!= 0) { // read the most recent byte: rxbyte = Serial.read(); // add the most recent byte to the string: rxstring = rxstring + rxbyte; //send the received string back over the serial port: // check if end of string if (rxbyte == '~') { break; // break out of the while loop } } } if (rxstring != "") { Serial.println(rxstring); Serial.flush(); } rxstring = ""; // ready to receive a new string } |
Ik kan op internet maar bijzonder weinig goede voorbeelden vinden en wat ik vind werkt niet als ik het zelf probeer. Er moeten toch mensen zijn die vaker dit soort dingen vanuit VB.NET doen?
Alle hulp is welkom en mijn dank is al bij voorbaat eindeloos!
Tapping progress on the shoulder and saying: "More forwards, please!".