none
請問VB 使用藍牙COM PORT SerialPort.write(),會當機,請問是那裡有問題 RRS feed

  • 問題

  • 請問VB 使用藍牙COM PORT SerialPort.write(),會當機,請問是那裡有問題

    此程式COM PORT是RS232 OK,但COM PORT是藍牙,在第86行BLUETOOTH.Write(SEND_BUFF, 0, 8),會當機,請問是那裡有問題

    感謝

    Imports System.IO.Ports
    Imports System.IO
    Imports System
    Imports System.Threading
    Imports System.Timers.Timer
    Imports System.Text

    Public Class MAIN_Form1
        Dim WithEvents BLUETOOTH As New IO.Ports.SerialPort
        Dim SEND_COUNT, i, DO_ON_OFF, dwTIME_COUNT As Integer
        Dim SEND_BUFF(10) As Byte

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            For Each sp In SerialPort.GetPortNames
                ComboBox1.Items.Add(sp)
            Next
            ComboBox1.Sorted = True
            ComboBox1.SelectedIndex = 0
            SEND_COUNT = 0
            Timer1.Start()
            Timer1.Interval = 1000
            DO_ON_OFF = 0
            SEND_BUFF(0) = 6
            SEND_BUFF(1) = 5
            SEND_BUFF(2) = 0
            SEND_BUFF(3) = 1
            SEND_BUFF(5) = 0
            SEND_COUNT_1.Text = SEND_COUNT
        End Sub

        Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click

        End Sub

        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles BLUETOOTH_OFF.Click
            BLUETOOTH_TEXT.Text = "藍芽斷線中"
            BLUETOOTH_TEXT.ForeColor = Color.Red
            BLUETOOTH.Close()
            Timer1.Enabled = False
        End Sub

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles BLUETOOTH_ON.Click

            If BLUETOOTH.IsOpen = True Then
                BLUETOOTH.Close()
            End If

            Try
                BLUETOOTH.PortName = ComboBox1.Text
                'BLUETOOTH.BaudRate = 9600
                BLUETOOTH.BaudRate = 115200
                BLUETOOTH.DataBits = 8
                BLUETOOTH.Parity = Parity.None
                BLUETOOTH.StopBits = StopBits.One
                BLUETOOTH.WriteTimeout = 5000
                BLUETOOTH.ReadTimeout = 1000
                BLUETOOTH.Handshake = Handshake.None
                BLUETOOTH.Encoding = System.Text.Encoding.Default
                BLUETOOTH.DtrEnable = True
                BLUETOOTH.RtsEnable = True
                BLUETOOTH.ReceivedBytesThreshold = 1
                BLUETOOTH.Open()
                BLUETOOTH_TEXT.Text = "藍芽連線中"
                BLUETOOTH_TEXT.ForeColor = Color.Blue
                Timer1.Enabled = True
            Catch ex As Exception
                BLUETOOTH.Close()
            End Try
        End Sub

        Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
            TIME_COUNT.Text = dwTIME_COUNT
            dwTIME_COUNT += 1
            If BLUETOOTH.IsOpen = True Then
                If DO_ON_OFF = 0 Then
                    SEND_BUFF(4) = 0
                    SEND_BUFF(6) = 157
                    SEND_BUFF(7) = 189
                    DO_ON_OFF = 1
                Else
                    SEND_BUFF(4) = 255
                    SEND_BUFF(6) = 220
                    SEND_BUFF(7) = 77
                    DO_ON_OFF = 0
                End If
                BLUETOOTH.Write(SEND_BUFF, 0, 8)
                SEND_COUNT += 1
                SEND_COUNT_1.Text = SEND_COUNT
            End If
        End Sub
    End Class

    2018年12月28日 上午 02:29

所有回覆

  • (1) 有甚麼樣的訊息呢 ?
    (2) 少用 Forms.Timer

    (3) 建議你先閱讀這一系列的文章:
    海角點部落 seroalport 系列

    請耐心由 (1) 開始看起


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/


    2018年12月28日 上午 10:12
    版主
  • 你把中斷點放在

     SEND_COUNT += 1

    看看。

    SerialPort.Write 只是把資料寫到 OS 的緩衝區,而非真正輸出。

    你可以先用原廠軟體或公用軟體測試硬體有無問題,以便釐清大方向。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2018年12月28日 下午 03:26