我有一些麻煩,使2個arduinos Uno之間的溝通工作。ZigBee Arduino,錯誤的解析數據
Arduino1 <>的ZigBee> ---------- <的ZigBee <> Arduino2
目前,我試圖讓他們瞭解彼此。該消息目前在第一Arduino和他的Zigbee之間進展良好,然後到第二Zigbee。
Arduino1 <>的ZigBee> ---------- <的ZigBee - X-- Arduino2
的問題是:當我嘗試解析,上Arduino2傳入分組的有效載荷從Arduino1,消息是不同的。因爲我使用的是ZigBee API2,所以在ZigBees之間旅行時會有一條CRC消息,因此(經過一些調查),我確信在抵達ZigBee2時數據包是正確的(如果沒有,數據包將被丟棄) 。
所以,現在的主要事件:
memmove(received,xbee_Rx.getData(),24);
當我收到的數據包
xbee.readPacket();
if (xbee.getResponse().isAvailable())
{
if (xbee.getResponse().getApiId() == ZB_RX_RESPONSE)
{
xbee.getResponse().getZBRxResponse(xbee_Rx);
memmove(received,xbee_Rx.getData(),24);
for (int i = 0; i < 24; i++) {
Serial.print(received[i],HEX);
}
}
}
雖然我在HEX發送此 「4144000000000000446B3AB4083E8484258」 上Arduino1
我收到這個 「414400000000000008C201862419B5」在HEX上Arduino2
這是一個實例數據總是錯誤的(也許從兩個第一個字節開始)。結果是有點隨意,對我來說是無法使用的。
我也試圖與
for (int i = 0; i < 24; i++) {
received[i] = xbee_Rx.getData()[i];
Serial.print(received[i],HEX);
}
解析,但結果卻是有點相同。
所以我的問題是:我在做解析錯了嗎? getData()函數與有問題嗎?
謝謝:-)
編輯: 經過一番研究,我發現,如果我這樣做
for (int i = 0; i < sizeof(xbee_Rx.getData()); i++) {
Serial.print(xbee_Rx.getData()[i],HEX);
}
Serial.println();
for (int i = 0; i < sizeof(received); i++) {
Serial.print(received[i],HEX);
}
的數據都是不一樣的。
414400000000000008C201885358C80
414400000000000008C201862419E6
,而不是 4144000000000000441A6E9B407DDD494258
所以,我想,而我讀的數據在不斷變化,這也許爲什麼他媽的了DATAS。那麼,在閱讀它們之前有沒有辦法「凍結」Datas?
您如何發送數據? – eventHandler 2015-04-01 16:36:34
用xbee.send(TXRequest);在Arduino1上(它使用相同的庫,即Xbee-Arduino);當我使用XCTU記錄數據包時,數據是正確的,所以問題顯然是Arduino2上的解析問題。 – Venix 2015-04-02 08:37:51
您做錯了,必須只有*一次* getResponse()調用。你現在有多個電話,所以,是的,數據將會改變。您需要編寫'XBeeResponse response = xbee.getResponse();',然後在解析代碼中使用* response *。 – 2015-04-02 14:44:42