Kann nicht vom Serialport lesen

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Kann nicht vom Serialport lesen

    Hallo zusammen,

    ich möchte mein Handy (Samsung Star) per Serialport ansteuern, um SMS zu versenden und zu empfangen. Leider scheitere ich schon an der Verbindung zum Handy. In Putty kann ich eingeben, verbinde zu COM4, dann habe ich ne Konsole und kann Befehle wie "at" eingeben und bekomme Antwort vom Handy.

    In VB klappt das aber nicht.

    Quellcode

    VB.NET-Quellcode

    1. Imports System.IO.Ports
    2. Public Class Form1
    3. Public cmd As String = ""
    4. Public pin As String = "2508"
    5. Public t As Threading.Thread
    6. Public u As Threading.Thread
    7. Public WithEvents sp As SerialPort
    8. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    9. Dim minutesS As String = InputBox("Zeitspanne in Minuten, 0 für einmalig")
    10. If minutesS = Nothing Then Exit Sub
    11. Dim minutes As Integer = CInt(minutesS)
    12. cmd = pin & " " & "LOCATE"
    13. If minutes <> 0 Then
    14. cmd = cmd & " " & minutes.ToString()
    15. End If
    16. SendCmdToPhone(cmd)
    17. End Sub
    18. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    19. sp = New SerialPort("COM4", 9600)
    20. Try
    21. sp.Close()
    22. Catch ex As Exception
    23. End Try
    24. sp.Open()
    25. t = New Threading.Thread(AddressOf checkSMS)
    26. t.Start()
    27. u = New Threading.Thread(AddressOf checkPortConnection)
    28. u.Start()
    29. End Sub
    30. Private Sub checkSMS()
    31. ' Do
    32. ' sp.
    33. '
    34. ' Loop
    35. End Sub
    36. Private Sub checkPortConnection()
    37. Do
    38. If Not sp.IsOpen Then
    39. MsgBox("not open")
    40. sp.Open()
    41. Else
    42. sp.WriteLine("at")
    43. Dim x As String = sp.ReadLine()
    44. If Not x.Trim.ToLower.Contains("ok") Then
    45. sp.Close()
    46. sp.Open()
    47. MsgBox("not connected, but open")
    48. Else
    49. MsgBox("working")
    50. End If
    51. End If
    52. System.Threading.Thread.Sleep(120000)
    53. Loop
    54. End Sub
    55. Private Sub checkPortConnectionOnce()
    56. If Not sp.IsOpen Then
    57. MsgBox("not open")
    58. sp.Open()
    59. Else
    60. sp.Write("at" & Environment.NewLine)
    61. End If
    62. End Sub
    63. Private Function SendCmdToPhone(ByVal cmd As String) As Boolean
    64. End Function
    65. Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
    66. checkPortConnectionOnce()
    67. End Sub
    68. Private Sub sp_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles sp.DataReceived
    69. MsgBox(sp.ReadExisting)
    70. End Sub
    71. End Class


    Nach dem sp.write("at" & Environment.NewLine) kommt einfach nix mehr, das Programm steht. Obwohl ich mit Putty ein "ok" bekomme.

    Warum? Wie komme ich an die Daten hinter dem Serialport?

    leseratte

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

    @Leseratte: Such mal in diesem Thread nach SerialPort, da gibt es Beispiele, wie es richtig geht.
    Einen separaten Thread benötigst Du nicht.
    Möglicherweise ist das Environment.NewLine das falsche Trennzeichen.
    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!
    Was sagt denn die Beschreibung des Herstellers?
    Nutze ggf. einen Serial-Port-Monitor und kommuniziere über Putty.
    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!