Forum: PC-Programmierung Visual Basic Dec-Werte senden (Serielle Schnittstelle) wie HTerm?!


von MOBA 2. (Gast)


Lesenswert?

Hallo liebe Forumsmitglieder,

ich verzweifele schon etwas länger an dem Projekt, dass ich einem Atmel 
über mein VB-Programm div. Werte senden kann/will. Ich möchte die 
Helligkeit mittels Schieberegler einstellen können. Dazu sende ich ein 
"E" und dann soll der Wert kommen (0-255 in dec). Aber ich bekomme nur 
Strings gesendet?!
Hat jmd. eine Idee, wie ich das als .dec senden kann (wie beim HTerm)?
Damit klappt das nämlich wunderbar.

Freue mich auf Hilfe von Euch!

von Thomas G (Gast)


Lesenswert?

Hallöchen !

VB6 mit MSComm
1
' Ein Byte senden
2
3
Dim X as Byte
4
5
X = 1 ' Dein Wert
6
MSComm1.PortOpen = True
7
MSComm1.Output X
8
MSComm1.PortOpen = False
9
10
11
' man kann auch ein Array senden
12
Dim X(3) as Byte
13
X(0) = 0
14
X(1) = 1
15
X(2) = 10
16
X(3) = 255
17
18
MSComm1.PortOpen = True
19
MSComm1.Output X
20
MSComm1.PortOpen = False

Gruß: Thomas

von arther (Gast)


Lesenswert?

Evtl. hilft die Chr-Funktion.

sendestr="E"+chr(123)

http://msdn.microsoft.com/en-us/library/613dxh46%28v=vs.90%29.aspx

von MOBA 2. (Gast)


Lesenswert?

Hallo,

danke für die schnellen Antworten:

also bei mir sieht das so aus:

serialport1.write(...) 'sendet dann immer string

Hier mal die Sub des Sliders:

Private Sub SliderBrighness_Scroll(sender As Object, e As EventArgs) 
Handles SliderBrighness.Scroll

ValueBAR = SliderBrighness.Value()
TrackBarValue(0) = CByte(ValueBAR)

If SerialPort1.IsOpen = True Then
   SerialPort1.Write("E")
   SerialPort1.Write(TrackBarValue, 0, 1)
End If
End Sub

So klappt das nicht, hatte auch schon mit chr() und das Byte senden 
getestet, klappt aber auch nicht :(

Achso: Nutze übrigends MS VS 2012



Mit der Version von "arther"
- sendestr="E"+chr(123)
- serialport1.write(chr(132))

klappt der untere Bereich (gefühlt bis 128) gut, aber danach geht nichts 
mehr, da wird Müll gesendet. Ich kann so nicht im oberen Bereich regeln.
Hat jmd. noch eine Idee; ich wein gleich :(( ?!

von arther (Gast)


Lesenswert?

Marius Dege schrieb:
> klappt der untere Bereich (gefühlt bis 128) gut

Wie ist die Schnittstelle eingestellt? Bei 7 Datenbits geht es nur bis 
127.

von arther (Gast)


Lesenswert?

Da die Defaulteinstellung der Codierung auf ASCII auch alle Zeichen > 
127 mit 63 ersetzt, kann das auch noch ein Problem sein. Umstellen auf 
“Western European (ISO)” hilft.

SerialPort1.Encoding = Encoding.GetEncoding(28591)

http://blogs.msdn.com/b/bclteam/archive/2006/05/26/608377.aspx

von Wolfgang (Gast)


Lesenswert?

Marius Dege schrieb:
> aber danach geht nichts mehr, da wird Müll gesendet
Wenn du schon HTerm in Benutznug hast, dann guck doch mal, welche 
Zeichenwerte "Müll" hat.

von MOBA 2. (Gast)


Lesenswert?

Ich kann im Bereich 0-255 per HTerm senden.
Bei meinem geht das dann nicht über 127 (getestet und bestätigt ist 
wirklich nur bis 127). Ich sende das über Bluetooth an den 
Mikrocontroller, habe jetzt nochmal bei VB eine Rückgabe reingemacht, er 
macht 0-127 wunderbar, ab 128 werden wird wahllos irgendwas gesendet; 
ist unterschiedlich.

Ich habe in VB den Port folgendermaßen angesteuert:

SerialPort1.PortName = My.Settings.COM_aerolight()
SerialPort1.BaudRate = 9600
SerialPort1.Encoding = Encoding.GetEncoding(28591) 'coding to west iso
SerialPort1.Open()

Dieses "Encoding" hat bei mir eine System.xy Datei eingefügt.
Aber leider klappt das so auch nicht.
senden tue ich folgendermaßen:

serialport1.write(chr(x)) 'x ist die Variable, bzw. der Zählstand des 
Var.

Die Schnittstelle ist einfach wie von VB vordefiniert definiert. An der 
Definition 7/8-Bits habe ich nichts geändert, wo geht das?!

von MOBA 2. (Gast)


Lesenswert?

Nochmal ein kurzer Nachtrag:

Ich habe einfach mal folgendes getestet:

SerialPort1.Encoding = Encoding.Default

jetzt geht es?! Komisch das es mit der Coding-Page wie arther es meinte 
nicht funktioniert hat; hoffe das mit default ist jetzt nicht nur bei 
mir so, sondern PC-Unabhängig.

Ich danke euch für die Hilfe!!




Für die Nachwelt:

Senden von 0-255 mit:
serialport1.write(chr(x)) 'x euer Variablenwert 0-255

Wenn es ab 127 nicht klappt, testet (bei Encoding die System.xy 
einbinden)
SerialPort1.Encoding = Encoding.GetEncoding(28591)
oder
SerialPort1.Encoding = Encoding.Default


serialport1 ist der Name eures Seriellenportes.

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.