2015-04-01 68 views
0

我有一些麻煩,使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?

+0

您如何發送數據? – eventHandler 2015-04-01 16:36:34

+0

用xbee.send(TXRequest);在Arduino1上(它使用相同的庫,即Xbee-Arduino);當我使用XCTU記錄數據包時,數據是正確的,所以問題顯然是Arduino2上的解析問題。 – Venix 2015-04-02 08:37:51

+1

您做錯了,必須只有*一次* getResponse()調用。你現在有多個電話,所以,是的,數據將會改變。您需要編寫'XBeeResponse response = xbee.getResponse();',然後在解析代碼中使用* response *。 – 2015-04-02 14:44:42

回答

0

我終於找到了發生了什麼: 我使用NewSoftSerial(因爲一個串行顯然是不夠的),它似乎f ** ck定時器(長超時),我實際上使用TimerOne庫或「Thread.h」庫允許我使用中斷。

那麼,整個事情顯然已經被NSS的超時搞砸了,所以要小心如果你將來一起使用它們。我不得不從TimerOne切換到Thread.h(當然不是真正的線程),這讓我可以避免出現問題。

我還發現,與Arduino捆綁在一起的普通串口與計時器一起玩壞的東西。

所以,謝謝你試圖幫助我,但它並不是真的在我認爲的問題所在。

Venix