Serialport empfängt keine Daten vom Handy

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Serialport empfängt keine Daten vom Handy

    Hallo, ich versuche zurzeit mein Telefon mittels (Bluetooth)-Serialport zum Sprechen zu bringen, also habe ich mir nen Programm geschrieben, was AT (GSM)-Befehle an das Telefon sendet. Im test mit Putty antwortet das Telefeon auf die enstprechenen Befehle (AT => OK) und so weiter...

    Versuche ich nun das Telefon mittels meines Programms anzusprechen, erhalte ich immer nur aus dem Buffer das gesendete =/

    VB.NET-Quellcode

    1. Public Sub InitComport(ByVal port As String, ByVal baud As String)
    2. Dim d As New SerialDevice
    3. If port <> "" Then
    4. If baud <> "" Then baud = 9600
    5. d.baudrate = baud
    6. d.Portname = port
    7. d.isopen = False
    8. d.Serialport = My.Computer.Ports.OpenSerialPort(d.Portname, d.baudrate, d.parity)
    9. d.Serialport.Write("at")
    10. Dim t As New Thread(AddressOf DataReceiveing)
    11. t.IsBackground = True
    12. t.Start(d)
    13. SerialDevices.Add(d)
    14. End If
    15. End Sub
    16. Private Sub DataReceiveing(ByVal d As SerialDevice)
    17. Do Until d.Serialport.IsOpen = False
    18. d.message = d.Serialport.ReadLine
    19. If d.message <> "" Then
    20. RaiseEvent Datareceived(d.id, d.message)
    21. d.message = ""
    22. End If
    23. Loop
    24. End Sub
    Pack das Dim d As New SerialDevice aus der Prozedur in die Klasse und entferne den entsprechenden Parameter in DataReceiveing.
    Was ist SerialDevice überhaupt für ein Ding?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    SerialDevice ist eine Struktur, InitComport erstellt einmalig eine neue Struktur in einer Liste (of T)
    siehe tcpserver von kevin89, da ist das gleiche schema, habe aber nicht vor das ding mit try catch zu versehen.

    VB.NET-Quellcode

    1. Private Structure SerialDevice
    2. Dim id As Integer
    3. Dim Serialport As Ports.SerialPort
    4. Dim Portname As String
    5. Dim baudrate As Integer
    6. Dim parity As Ports.Parity
    7. Dim serialerror As Ports.SerialError
    8. Dim serialdata As Ports.SerialData
    9. Dim serialpinchange As Ports.SerialPinChange
    10. Dim Handshake As Ports.Handshake
    11. Dim Stopbits As Ports.StopBits
    12. Dim message As String
    13. Dim isopen As Boolean
    14. End Structure


    und das ganze ist bereits in einer Klasse... namens "ComServer" ich habe es deshalb so Konstruiert um später eventuell mehrere Handys gleichzeitig ansteuern zukönnen :)

    aber @ the moment ist da .... nothing xD

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MrTweek“ ()

    Nutze das SerialPort aus dem Designer und zieh es Dir auf die Form.
    Das hat ein Event DataReceived.
    Sieh mal hier im Schnittstellenforum, da sind einige Beiträge von mir dazu.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja dann erhalte mich aber auch nur MEIN gesendetes aber ich das "OK" vom Handy...
    Es geht darum, dass ich bereits vom COMPort lesen kann aber ich erhalte nicht das was ich will

    Laut Putty antwortet das Telefon mit "OK", wenn ich AT sende, oder wenn ich irgendwelchen Rotz sende mit "ERROR" aber das erhalte ich nicht... sondern nur das was ich sende =(, ruft einer an, dann müsste das Telefon "RING" senden :/ (von selbst)

    EDIT: Ich glaube das ist schon richtig, ich wette ich muss das

    VB.NET-Quellcode

    1. Private Sub SerialPort1_PinChanged(ByVal sender As Object, ByVal e As System.IO.Ports.SerialPinChangedEventArgs) Handles SerialPort1.PinChanged
    2. Select Case e.EventType
    3. Case IO.Ports.SerialPinChange.Break
    4. MsgBox(IO.Ports.SerialPinChange.Break.ToString)
    5. Case IO.Ports.SerialPinChange.CDChanged
    6. MsgBox(IO.Ports.SerialPinChange.CDChanged.ToString)
    7. Case IO.Ports.SerialPinChange.CtsChanged
    8. MsgBox(IO.Ports.SerialPinChange.CtsChanged.ToString)
    9. Case IO.Ports.SerialPinChange.DsrChanged
    10. MsgBox(IO.Ports.SerialPinChange.DsrChanged.ToString)
    11. Case IO.Ports.SerialPinChange.Ring
    12. MsgBox(IO.Ports.SerialPinChange.Ring.ToString)
    13. Case Else
    14. End Select
    15. End Sub


    überwachen und dann evtl events raisen, damit mein Programm weiß, dass es senden kann... =/
    aber woher weiß ich wann ich senden kann und wann ich empfangen kann. Wenn ich mich auf das tele werfe mit diesem select case dann kommt

    DSRchanged und noch etwas anderes, ich glaube ctrchanged =/
    Bilder
    • Neue Bitmap.png

      55,62 kB, 675×424, 103 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MrTweek“ ()

    MrTweek schrieb:

    Ich glaube das ist schon richtig, ich wette ich muss das
    Dann solltest Du bei Wetten Dass auftreten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    MrTweek schrieb:

    bei datareceived bekomme ich nur den eventype
    Was genau kommt da?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    da kommt die meldung, dass im puffer "Chars" (1) sind... wenn ich die lese bekomme ich nur das was ich gesendet habe (at) statt "OK"
    wenn ich mir die beschreibung von writeline ansehe, dann steht da ausgabepuffer...
    hmm wie sende ich die ab? xD oder ist da ne möglichkeit es zu "flushen"??? =(

    Edit: Hier ist die lösung, ich habe vergessen ein Newline-Zeichen zu deklarieren "Char(13)", jetzt bekomme ich das "OK" die lösung war hier zufinden:


    social.msdn.microsoft.com/foru…9e-4cf8-a9c1-e4b2de31bd34

    gibt es eine möglichkeit, das gesendete rauszufiltern?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MrTweek“ ()