Arduino I2C通訊

我現在用Arduino I2C 透過MEGA2560和LABVIEW 做通訊 讓傳感器回傳值
但是現在Labview那邊得到的值有問題,

可以請各位大老幫忙解惑!!

你想要得到的回覆是如何解決你的問題?還是你的問題是什麼呢?

我現在碰到的問題是ARDUNO I2C在和Labview做通訊上 通訊到Labview上時 讀馬達encoder 值有問題,
在arduino 這我是用官方的encoder library 和i2c 做結合 但是傳到labview時值不對 想請教一下是arduino程式哪邊寫錯和 該如何解決…

85388

我現在碰到的問題是ARDUNO I2C在和Labview做通訊上 通訊到Labview上時 讀馬達encoder 值有問題
所以問題到底是什麼?明白的表達自己的問題是提問的基本,而不是要別人去看你的程式猜你的問題到底是什麼?

這就好像你迷路了,警察問你住哪裡,你回答住家裡一樣,一點幫助都沒有。

稍微看了你的程式,大概猜你的問題是
Labview送出0x20,Arduino這邊收到應該會回應"newPosition",但是Labivew這邊卻只收到"newPo"。

下面是我覺得奇怪的地方,以及你可以自己debug的方式

1.Wire.write(“newPosition”,8)
Wire.write(data, length)
data: an array of data to send as bytes
length: the number of bytes to transmit
根據第二篇改過的程式碼,只送了8個bytes出去
2. Byte Count specifies the number of bytes of data this VI reads from the I2C slave device.
根據第一篇的block diagram只設定收6個bytes,但第二篇的front panel實際收到5個bytes,“newPo”

我不知道為什麼少收一個byte,但是你有沒有試過增減這兩個數字,結果會不會改變?

參考資料:
https://www.arduino.cc/en/Reference/WireWrite

https://zone.ni.com/reference/en-XX/help/373925C-01/myrioreference/myrioref_i2cwriteread/

好像是不能傳字串
現在改成用資料來傳
但現在碰到的問題是 encoderpin18 和19 位在此範圍
現在不是很懂 為啥要去宣告他

5514511415451

“newPosition” 這個東西叫常數 Constant,資料型態是 String
newPosition 這個東西叫變數 Variable,資料型態是 Short int 長度2個bytes
110 101 119 80 111 這些東西是ASCII的10進位表示 也就是
110 = ‘n’
101 = ‘e’
119 = ‘w’
80 = ‘P’
111 = ‘o’

你要先知道你要送的是什麼,實際送的是什麼,收到的又是什麼

好的 了解 謝謝

這樣我要送的是感測器讀出的值 請問我要怎麼去改這個程式呢?

Arduino應該是Wire.write(newPosition)

Labview收的地方應該會收到2個bytes,再依照Hi 跟 Lo byte組合回十進位數字

e.q.
256001 = 100(hi byte)*256 + 1(lo byte)