none
藍芽接收程式的問題 RRS feed

  • 問題

  • 現在我用一個藍芽接收一些生理的訊號,接收到顯示在MessageBox.Show,但現在出現一個問題,就是接收到的如果是數字"0"的話,就會不會顯示出來,例如本來接收到是"2007",但是我這個程式接收後會變成"2"中間就沒有了,要再按一次接收才會出現"7",但中間的"00"卻不會出現,拜託幫我想想辦法>"<。以下是我的程式。

     

    Private Sub ReceiveCommand_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ReceiveCommand.Click
            Try
                SerialPort1.PortName = "COM9"
                SerialPort1.BaudRate = 9600
                SerialPort1.DtrEnable = True
                SerialPort1.Parity = System.IO.Ports.Parity.None
                SerialPort1.DataBits = 7
                SerialPort1.StopBits = System.IO.Ports.StopBits.One
                SerialPort1.NewLine = 0
                SerialPort1.Open()
                MessageBox.Show(SerialPort1.ReadLine(), "接收結果")
                SerialPort1.Close()
            Catch ex As Exception

                MessageBox.Show("錯誤訊息為" + ex.Message + ";檢查電腦COM Port是否存在!")

            End Try

    2008年1月23日 下午 07:07

解答

  • SerialPort.ReadLine 方法   讀取輸入緩衝區 NewLine之前的內容。
     
    因此

     

    請改一下     SerialPort1.NewLine = 字串結束碼 

     

    查一下 妳發送的  "2007" 字串所使佣的 結束碼  是 什麼  


    2008年1月24日 上午 01:40
  •  Guess Wang 寫信:

     

    我是!

    它的結束碼是一堆#字號,但是"SerialPort1.NewLine = 字串結束碼"無法使用字元的符號‧

    似乎只能使用數字。

     

    Visual Basic (宣告)
    Public Property NewLine As String
    

     

    ==========================================

     

    Dim StringEndCode AS String;

     

    StringEndCode="#"

    SerialPort1.NewLine = StringEndCode

    2008年1月24日 上午 04:16

所有回覆

  • SerialPort.ReadLine 方法   讀取輸入緩衝區 NewLine之前的內容。
     
    因此

     

    請改一下     SerialPort1.NewLine = 字串結束碼 

     

    查一下 妳發送的  "2007" 字串所使佣的 結束碼  是 什麼  


    2008年1月24日 上午 01:40
  • 不好意思

    如果"SerialPort1.NewLine = 字串結束碼"不是0的話

    我的藍芽就不法接收作顯示,這個也不知道是什麼原因‧

    如果改成其他的的數字碼的話,藍芽也無法做顯示,不好意思在麻煩一下。

     

    2008年1月24日 上午 02:56
  •  Guess Wang 寫信:

    不好意思

    如果"SerialPort1.NewLine = 字串結束碼"不是0的話

    我的藍芽就不法接收作顯示,這個也不知道是什麼原因‧

    如果改成其他的的數字碼的話,藍芽也無法做顯示,不好意思在麻煩一下。

     

     

    請問你是   hjko  嗎 ?

     

    請問 妳可否得知     發送端  發送一字串 時  其字串結束碼是什麼嗎 ?


    2008年1月24日 上午 03:11
  •  

    我是!

    它的結束碼是一堆#字號,但是"SerialPort1.NewLine = 字串結束碼"無法使用字元的符號‧

    似乎只能使用數字。
    2008年1月24日 上午 04:09
  •  Guess Wang 寫信:

     

    我是!

    它的結束碼是一堆#字號,但是"SerialPort1.NewLine = 字串結束碼"無法使用字元的符號‧

    似乎只能使用數字。

     

    Visual Basic (宣告)
    Public Property NewLine As String
    

     

    ==========================================

     

    Dim StringEndCode AS String;

     

    StringEndCode="#"

    SerialPort1.NewLine = StringEndCode

    2008年1月24日 上午 04:16
  • 問題已解決,感激不盡

     

    2008年1月24日 上午 04:46
  • ^^

    2008年1月24日 上午 05:05
  • 不好意思再問一個問題

    如果我的結束碼是一個不定數

    就是是一個變數的話

    那StringEndCode怎麼寫??

     

    如果一次要把讀取的字傳全部讀取完

    還有什麼方法嗎??

     

    因為上次M結尾之後還是有字元

     

    2008年5月13日 下午 06:34
  • 你讀取 字串的程式碼片段貼出來吧

     

    我再想想 該如何改

    2008年5月14日 上午 01:58
  • 最後的程式碼是這樣~

    Private Sub ReceiveCommand_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ReceiveCommand.Click
            Try

                Dim Buf As String
                Dim StringEndCode As String
                SerialPort1.PortName = "COM9"
                SerialPort1.BaudRate = 9600
                SerialPort1.DtrEnable = True
                SerialPort1.Parity = System.IO.Ports.Parity.None
                SerialPort1.DataBits = 7
                SerialPort1.StopBits = System.IO.Ports.StopBits.One
                StringEndCode = "M"
                SerialPort1.NewLine = StringEndCode 

                SerialPort1.Open()
                MessageBox.Show(SerialPort1.ReadLine(), "接收結果")
                SerialPort1.Close()
            Catch ex As Exception

                MessageBox.Show("錯誤訊息為" + ex.Message + ";檢查電腦COM Port是否存在!")

            End Try

     

    但在M結尾後面還是有字串~

    是否可以一次讀取完全部

    或許

    還是可以讀取完這次之後~

    下次讀取就不會讀取剩下的字串~而會重新讀取新的字串

    如果語意有誤的話~見諒^^

     

    2008年5月14日 上午 03:49

  • 不好意思  還是無法理解

    既然 M結尾後面還是有字串  為何要用  M 作為 結束碼   ?


    2008年5月14日 上午 03:57
  •  

    因為需要的字串在前面

    所以才擷取到M

     

    不解的是~是不是擷取之後~

    在M之後的字串會自動不做接收而做擷取中斷??

    還是會持續連結~至下一次做擷取的動作的字串裡面

     

    因為我做字串的切割之後

    切割第一次和第二次的地方會有所不同

    不知原因~

     

    如語意有誤的話~見諒^^

     

    2008年5月14日 上午 05:21
  • 請查閱

     

    SerialPort.BytesToRead 屬性

    取得接收緩衝區中的資料位元組數。

     

    SerialPort.ReadTo 方法

    讀取輸入緩衝區指定 value 之前的字串。

     

     

    SerialPort.ReadExisting 方法

    讀取 SerialPort 物件的資料流和輸入緩衝區中所有立即可用的位元組。

     

    2008年5月14日 上午 06:25