Stringausgabe mit Serialer Schnittstellt / Serial Port / Com
Verfasst: 26.01.2018 13:54
Hallo Gemeinde,
seit einigen Stunden versuche ich einen String vom Mikrocontroller zu emfangen. Leider vergebends bei der Auswertung. Schicke ich meinem Kontroller ein Befehl antwortet er darauf. Die Zeichen werden auch emfangen, aber nicht geordnet in einem String. Ich habe jetzt schon über das Forum einige Codes ausprobiert und umgeschrieben. Allerdings klappt es noch immer nicht.
Ich möchte am nach dem Auslesen des SerialPorts einen fertigen String haben, den ich mit einem Command-Befehl vergleichen kann und danach weitere Aktionen tätigen kann bzw. mein Programm später die Rückmeldung gibt, ob der gesendete Befehl an den Kontroller erfolgreich war.
Hier mein zu letzt getesteter Code:
Leider zeigt der Debug nur leere Zeichen bei mir an. Ich bekomme keinen kompletten String mit ASCII 13+10 CR LF raus. Vielleicht kann mir jemand helfen.
L.G. Kai
seit einigen Stunden versuche ich einen String vom Mikrocontroller zu emfangen. Leider vergebends bei der Auswertung. Schicke ich meinem Kontroller ein Befehl antwortet er darauf. Die Zeichen werden auch emfangen, aber nicht geordnet in einem String. Ich habe jetzt schon über das Forum einige Codes ausprobiert und umgeschrieben. Allerdings klappt es noch immer nicht.
Ich möchte am nach dem Auslesen des SerialPorts einen fertigen String haben, den ich mit einem Command-Befehl vergleichen kann und danach weitere Aktionen tätigen kann bzw. mein Programm später die Rückmeldung gibt, ob der gesendete Befehl an den Kontroller erfolgreich war.
Hier mein zu letzt getesteter Code:
Code: Alles auswählen
SPort$ = "Com33"
SBaud = 9600
*SPuffer = AllocateMemory(501)
#SerialPort = 1
Procedure.s RSString(port.i)
length.i = AvailableSerialPortInput(port.i)
If length > 0
If Not ReadSerialPortData(port.i, *SPuffer, length)
;Debug "Error while reading input data"
ProcedureReturn "ERROR"
Else
result.s = PeekS(*SPuffer, length)
buffer.s + result
i = CountString(buffer, Chr(13)+Chr(10))
If i > 0 ; check for newline
For x.i = 1 To i
line.s = StringField(buffer, x, Chr(13)+Chr(10))
Debug line
ProcedureReturn line
Next
buffer = StringField(buffer, x+1, Chr(13)+Chr(10)) ; add the new line to the buffer
EndIf
EndIf
EndIf
ProcedureReturn line
EndProcedure
If OpenSerialPort(#SerialPort, SPort$, SBaud, #PB_SerialPort_NoParity, 8 ,1 ,#PB_SerialPort_NoHandshake, 500, 500)
WriteSerialPortString(#SerialPort, "/help"+Chr(13)+Chr(10))
y=0
Repeat
y=y+1
Emf$ = RSString(#SerialPort)
If Emf$ <> "ERROR"
Debug Emf$
EndIf
;Debug Buffer
Delay(1)
Until y > 300
CloseSerialPort(#SerialPort)
EndIf
End
L.G. Kai