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.