VB2008與Arduino之間溝通(20點)

我在arduino重複寫給Serial Port一個定直 33,但vb2008取值暫存區直都不是33

----------------------------------------------------------------------------------------------------------

vb2008程式

Dim Buffer(4) As Byte

SerialPort1.Read(Buffer, 0, 5)// 0,5是緩衝區的佔存陣列

TextBox1.Text = Buffer(0) & " " & Buffer(1) & " " & Buffer(2)

// TextBox1.Text值都不是33

----------------------------------------------------------------------------------------------------------------\

arduino程式

int a =33;

void setup() {

// 開啟 Serial Port,通訊速率為 9600bps (Bits Per Second)

Serial.begin(9600);

}

void loop () { // loop副程式,重複不斷執行

Serial.println(a);

} // loop副程式結束

如果可以能教我如何讓兩者正確溝通(附上程式碼與註解最好

已更新項目:

我用Arduino裡面Serial Monitor監測

我看不到33個數值

然後VB2008程式我按read(button1)

textbox1也沒有值出現

然後VB2008

Try 以下程式可以多一點注釋

請問大大有其他連若方式嗎?(悲劇高3學生專題的請求QAQ

1 個解答

評分
  • 6 年前
    最佳解答

    主要是Arduino 送資料方法錯了 , 要用 write( ), 不是 print

    請參考 Arduino Serial 函式庫介紹

    圖片參考:https://s.yimg.com/rk/AD01804471/o/1530437946.png

    Arduino 程式

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

    byte a = 33;

    void setup() {

    // 開啟 Serial Port,通訊速率為 9600bps (Bits Per Second)

    Serial.begin(9600);

    }

    void loop () { // loop副程式,重複不斷執行

    while( 0 == Serial.available());

    Serial.read();

    for(int i=0; i<4 ; i++ )

    Serial.write(a);

    Serial.println();

    } // loop副程式結束

    VB2008 端程式 範例

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

    Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    SerialPort1.PortName = "COM16"

    SerialPort1.BaudRate = 9600

    TextBox1.Multiline = True

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Try

    If (Not SerialPort1.IsOpen) Then

    SerialPort1.PortName = TextBox2.Text.ToUpper()

    SerialPort1.Open()

    End If

    Dim buf(4) As Byte

    SerialPort1.DiscardInBuffer()

    SerialPort1.Write("G")

    System.Threading.Thread.Sleep(500) ' Delay 500ms 等資料

    SerialPort1.Read(buf, 1, 4) ' 讀 4 個 Byte

    TextBox1.AppendText(buf(1) & "," & buf(2) & "," & buf(3) & "," & buf(4) & vbCrLf)

    Catch ex As Exception

    MsgBox(ex.Message)

    Finally

    SerialPort1.Close()

    End Try

    End SubEnd SubEnd Class

    2015-02-03 00:25:35 補充:

    Arduino 端, 因為字碼 ! =33 , 所以你在 Serial Monitor 應該是 看到4個驚嘆號 一行 !

    有疑慮就把 a = 33 改成 a= 0x33;

    Serial Monitor 就會看到 4個 3, "3333" 一行

    2015-02-03 00:29:24 補充:

    VB一定要把 PORT 設對, COM 設對了嗎?

    把 VB2008 的 Project 包一包 郵件寄給我, 我幫你改一個....

    參考資料: blog.xuite.net/jl0821/twblog
還有問題?馬上發問,尋求解答。