hallo jungs,
habe einen atmega8 mit print lasse ich in "1", "2" und "3" nacheinander
ausgeben.
funktion ok, im Terminal von MS: 1
2
3
funktion ok, super.
aber in meiner VB.NET 2008 zeigt er mir vor und nach jeweils ein quadrat
oder rechteck, ich denke mal das sind meine gänsefüße, oder etwa nicht.
jetzt meine frage wie bekomme ich die sachen weg. Weil mit den zeichen
habe ich probleme in der verarbeitung des programmes wohl, weil bei
eintreffen der sachen sollen diverse schen farblich gemeldet werden.
ich danke euch schon mal im vorraus.
Zieh Dir mal den SerialPortMonitor: http://www.serial-port-monitor.com/free-serial-port-monitor-downloads.html Der logt alles mit, was über die serielle reinkommt/rausgeht. Dann kannst Du über den Hexcode und einer ASCII-Tabelle sehen, was da empfangen wurde. Schätze aber eher, daß das Steuerzeichen sind.
>aber in meiner VB.NET 2008 zeigt er mir vor und nach jeweils ein quadrat >oder rechteck, ich denke mal das sind meine gänsefüße, oder etwa nicht. Gänsefüßchen sind auch "sichtbare" ASCII-Zeichen. Guck mal in der Codesammlung nach "Hterm". Das ist ein Terminalprogramm, das sehr schön sämtliche Darstellungsformen von Bytes bereitstellt. Ich vermute, dass es sich bei den Klötzchen um Steuerzeichen handelt.
Caridge-Return [CR]=[&H10] und Line-Feed [LF]=[&H08] Du musst Dir halt im VB-Net Programm die gewünschten Zeichen mittels Stringfunktionen (z.B. MyValue = mid(MyString,2,1) rauspicken.
wie meinst du das den genau. vom program her. danke für die antworten
hier der quell code von vb 2008 express
Public Class Form1
Delegate Sub TextBoxCallback(ByVal text As String)
Private WithEvents myComPort As IO.Ports.SerialPort
Private EndOfCommand As String = Constants.vbCrLf.ToString
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim str() As String = IO.Ports.SerialPort.GetPortNames()
If str.Length = 0 Then
MsgBox("No Serialport available!", MsgBoxStyle.Critical)
Me.Close()
End If
Me.myComPort = New IO.Ports.SerialPort(str(1)) 'für com3
Me.myComPort.BaudRate = 4800
Me.myComPort.DataBits = 8
Me.myComPort.StopBits = IO.Ports.StopBits.One
Me.myComPort.Parity = IO.Ports.Parity.None
Me.myComPort.ReceivedBytesThreshold = 1
Me.myComPort.Open()
End Sub
''' <summary>
''' </summary>
Private Sub myComPort_DataReceived( _
ByVal sender As Object, _
ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
Handles myComPort.DataReceived
Select Case e.EventType
Case IO.Ports.SerialData.Chars
Case IO.Ports.SerialData.Eof
End Select
Dim msg As String = Me.myComPort.ReadExisting
Me.ShowText(msg)
End Sub
''' <summary>
''' </summary>
Private Sub myComPort_PinChanged(ByVal sender As Object, ByVal e As
_
System.IO.Ports.SerialPinChangedEventArgs) Handles
myComPort.PinChanged
Select Case e.EventType
Case IO.Ports.SerialPinChange.Break
Case IO.Ports.SerialPinChange.CDChanged
Case IO.Ports.SerialPinChange.CtsChanged
Case IO.Ports.SerialPinChange.DsrChanged
Case IO.Ports.SerialPinChange.Ring
End Select
End Sub
''' <summary>
''' </summary>
Private Sub myComPort_ErrorReceived( _
ByVal sender As Object, _
ByVal e As System.IO.Ports.SerialErrorReceivedEventArgs) _
Handles myComPort.ErrorReceived
Select Case e.EventType
Case IO.Ports.SerialError.Frame
Case IO.Ports.SerialError.Overrun
Case IO.Ports.SerialError.RXOver
Case IO.Ports.SerialError.RXParity
Case IO.Ports.SerialError.TXFull
End Select
Me.ShowText("ERROR" & vbCrLf)
End Sub
''' <summary>
''' </summary>
Private Sub ShowText(ByVal text As String)
If Me.TextBox1.InvokeRequired Then
Dim d As New TextBoxCallback(AddressOf ShowText)
Me.Invoke(d, New Object() {text})
Else
Me.TextBox1.Text = Me.TextBox1.Text & text
End If
End Sub
''' <summary>
''' </summary>
''' <param name="command"></param>
''' <remarks></remarks>
Private Sub Send(ByVal command As String)
Me.myComPort.Write(command & Me.EndOfCommand)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Me.Send("4")
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Me.Send("5")
End Sub
End Class
Hallo Dietmar also die Funktion Print auf dem AVR sendet nicht nur das angegebene Zeichen sondern auch noch ein CR 0x0D und ein LF 0x0A, wenn du das mit dem Termialprogramm anschaust, so sorgen die beiden Steuerzeichen dafür das die Schreibposition zur nächsten Zeile und wieder zum Zeilenanfang springt. Beim Empfang mit VB werden auch diese 2 Codes mit in deinem String 'msg' eingelesen - deine Funktion ShowText kann die Zeichen aber nicht darstellen und zeigt die "Rechtecke" als Platzhalter an. Entweder du bringst print dazu kein CR-LF zu senden oder du entfernst die empfangenen nicht darstellbaren Codes im VB-Programm aus deinem String oder du pickst dir nur die relevanten Daten aus dem String wie Peter schon vorgeschlagen hat. Sascha
da liegt der hund begraben mit dem auspicken, das habe ich noch nie gemacht und weiß jetzt nicht genau wie ich es einbauen soll.
Hi >da liegt der hund begraben mit dem auspicken, das habe ich noch nie >gemacht und weiß jetzt nicht genau wie ich es einbauen soll. Noch einfacher ist es, die Zeichen gar nicht erst zu senden. Einfach statt 'print' zu benutzen, die Zeichen direkt UDR übergeben . MfG Spess
Dietmar schrieb: > da liegt der hund begraben mit dem auspicken, das habe ich noch nie > gemacht und weiß jetzt nicht genau wie ich es einbauen soll. Dann schau in der Hilfe nach, welche Stringfunktionen es gibt. Du hast einen String. Und du willst aus diesem String einen anderen String extrahieren, der aus allen ausser dem ersten und dem letzten Zeichen besteht. In Basic gibt es für Stringverarbeitung eine Menge Funktionen. Unter anderem gibt es Funktionen um die Länge eines Strings festzustellen, um die linken x Zeichen zu bekommen, um die rechten x Zeichen zu bekommen und um einen Substring zu bekommen, der an Position x anfängt und n Zeichen lang ist. Wie gesagt: Durchsuch deine Hilfe nach Stringfunktionen. Die brauchst du sowieso, wenn du auch nur annähernd ersthaft programmieren willst.
Hallo, CR und LF kann man beim Senden sehr einfach unterdrücken wenn man in Basic auf dem AVR statt Print "Text" einfach ein ; anhängt, also Print "Text"; Das ist dann auf dem Terminal-Programm nicht mehr zu lesen, weil das Folge-Print in die gleiche Zeile schreibt. Anders herum kann man in VB .Net das CR und LF einfach ausblenden, wenn man Zeile = Io.Ports.SerialPort.ReadTo(vbcrlf) verwendet. In Zeile ist dann das CR und LF nicht enthalten. Viel Spaß Hermi
Hallo Hermi, danke fuer die hilfe, das problem hat sich mit dank deinem simicolon gelöst. Aber danke auch an alle anderen, für Ihre antworten. Status : Problem gelöst :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.