Arduino I2C通訊

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

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

你想要得到的回覆是如何解決你的問題?還是你的問題是什麼呢?
https://forum.stdb.org/t/topic/14695

我現在碰到的問題是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://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)