-
Hi!
Das Tut im Wiki ist von mir. Um variablen in verschiedenen textboxes auszugeben musst du eine Art Marker verwenden. z.B. dein µC sendet:
A53
B129
C223
Die Buchstaben sagen um was für daten es sich grad handelt. z.B. A bedeutet dass es Temparaturdaten sind, B ist Motorstrom etc.
In deiner GUI liest du alle Daten per RS232 ein und guckst dann nach welche Daten es sind und teilst sie dann auf deine Textboxes auf.
Code:
readvar=SerialPort1.ReadLine
ContainsA = readvar.Contains("A") 'checkt ob ein "A" im String ist -> also temperatur
If ContainsA=true then 'wenn ein A drin ist
Temperaturwert=readvar.TrimStart("A") 'dann das A abschneiden
temperaturtextbox.text=temperaturwert 'Rest in die textbox schreiben
end if
So ungefähr sollte das gehen. Dieses Verfahren habe ich auch für meinen Tricopter verwendet, im Video siehst du wie die Software funktioniert:
http://www.villalachouette.de/willia...copter/Tri.wmv
-
Hallo Willa,
kannst du noch etwas genauer beschreiben wo der von dir genannte Code
eingefügt werden muss? ich interssiere mich auch brennend für solche Anleitungen.
PS: Danke für die Erstellung des WIKI!!!
-
Okay, ich kanns gerne nochmal genauer erklären:
Der Serialport wird in einem Timer abgerufen (Interval z.B. 15ms)
Code:
Sub Timer1Tick(ByVal sender As Object, ByVal e As EventArgs)
if serialport1.BytesToRead > 0 then
Do
readvar=SerialPort1.ReadLine
ContainsA = readvar.Contains("A")
ContainsB = readvar.Contains("B")
ContainsC = readvar.Contains("C")
if ContainsA = true then
A_Daten=readvar.TrimStart("A")
Textbox1.text=A_Daten
end if
if ContainsB = true then
B_Daten=readvar.TrimStart("B")
Textbox2.text=B_Daten
end if
if ContainsC = true then
C_Daten=readvar.TrimStart("C")
Textbox3.text=C_Daten
end if
If SerialPort1.BytesToRead = 0 Then
Exit Do
end if
loop
end if
end sub
Ich glaube so sollte das klappen. Vorher müsst ihr natürlich die Variablen noch deklarieren und den Serialport öffnen (so wie im Wiki beschrieben).
-
Da meine Kenntnisse in Sharp sehr begrenzt sind (alles was ich darüber weis
ist aus deinem WIKI) würdest du mir einen großen Gefallen damit erweisen
wenn du noch erklären könntest wo und wie man in Sharp Variablen deklariert. Ich kenne mich programmiertechnisch leider nur in Bascom aus.
Vielen Dank schon mal
-
Hi, danke das du auf meine Mail reagiert hast
Das läuft jetzt so wie ich es in etwa haben wollte.
Im moment macht er mir noch ein merkwürdiges zeichen hinter der ausgabe,
son kästchen, weis da einer was?
-
Das geht ca. so wie in Bascom auch:
Dim ContainsA As Boolean
Dim readvar as string
Am besten direkt unter diese automatisch erzeugten Zeilen setzen:
public Sub New()
Me.InitializeComponent()
End Sub
Dann kann man auf die Variablen aus jeder Sub zugreifen.
-
@Christian:
Wie sieht denn dein Sendebefehl auf dem µC genau aus?
-
hier mal mein code im SharpDevelop
Code:
Public Partial Class MainForm
Public Sub New()
' The Me.InitializeComponent call is required for Windows Forms designer support.
Me.InitializeComponent()
serialport1.open
'
' TODO : Add constructor code after InitializeComponents
'
End Sub
Sub Button1Click(sender As Object, e As EventArgs)
serialport1.Write (1)
End Sub
Sub Button2Click(sender As Object, e As EventArgs)
serialport1.Write (2)
End Sub
Sub Button3Click(sender As Object, e As EventArgs)
serialport1.Write (3)
End Sub
Sub Button4Click(sender As Object, e As EventArgs)
serialport1.Write ("r")
End Sub
Dim readvar As String
Dim ContainsA As Boolean
Dim ContainsB As Boolean
Dim Temperaturwert As String
Sub Timer1Tick(sender As Object, e As EventArgs)
If serialport1.BytesToRead > 0 Then
Do
readvar=SerialPort1.ReadLine
ContainsA = readvar.Contains("A")
ContainsB = readvar.Contains("B")'checkt ob ein "A" im String ist -> also temperatur
If ContainsA=true then 'wenn ein A drin ist
Temperaturwert=readvar.TrimStart("A") 'dann das A abschneiden
temperaturtextbox.text=temperaturwert 'Rest in die textbox schreiben
End If
If ContainsB=true then 'wenn ein A drin ist
Temperaturwert=readvar.TrimStart("B") 'dann das A abschneiden
temperaturtextbox2.text=temperaturwert 'Rest in die textbox schreiben
end if
If SerialPort1.BytesToRead = 0 Then
Exit Do
End If
Loop
End If
End Sub
Sub Label1Click(sender As Object, e As EventArgs)
End Sub
Sub Timer2Tick(sender As Object, e As EventArgs)
End Sub
End Class
hier mein AVR
Code:
Dim A As Byte
Do
A = Inkey()
If A > 0 Then
Select Case A
Case 49 'Das ist der ASCII Code für Taste "1"
Sound Portd.7 , 400 , 450
Print "ATaste 1 wurde gedrückt"
Case 50 'Das ist der ASCII Code für Taste "2"
Sound Portd.7 , 400 , 550
Print "BTaste 2 wurde gedrückt"
Case 51 'Das ist der ASCII Code für Taste "3"
Sound Portd.7 , 400 , 650
Print "Taste 3 wurde gedrückt"
Case 114 'Das ist der ASCII Code für Taste "r"
Print "Reset..."
Goto 0
End Select
End If
Loop
-
hmmm, ob mein Code bei strings wie "BTaste 2 wurde gedrückt" funktioniert weiss ich nicht....
Sende doch mal soetwas:
print "A" ; 123
print "B" ; 124
-
Ist immer noch das kästchen hinter