2016-06-09 44 views
0

我試圖使用Gazelle協議將數據從設備發送到主機,但是,在MATLAB中讀取時變信號時,值會不斷更改數組中的元素。Simblee/Rfduino Gzll通信失敗

這裏是Simblee/Rfduino主機代碼:

#include <SimbleeGZLL.h> 
device_t role = HOST; 
char array[5]; 
void setup() { 
    Serial.begin(9600); 
    SimbleeGZLL.begin(role); 
    timer_one(1); // 1 ms timer 
} 

void loop() { 
    Serial.flush(); 
    printf(EMG); 
} 


void SimbleeGZLL_onReceive(device_t device, int rssi, char *data, int len) 
{ 
    if (len > 0) { 
    digitalWrite(2,HIGH); 
    array[0] = data[0]; 
    array[1] = data[1]; 
    array[2] = data[2]; 
    array[3] = data[3]; 
    array[4] = '\0'; 
    } else SimbleeGZLL.sendToDevice(device, 'A'); 
} 

和設備代碼:

包括

device_t role = DEVICE1; 

volatile int state; 
char array[4]; 

void setup() { 
    SimbleeGZLL.begin(role); 
    Serial.begin(9600); 
    timer_one(1); 
} 

void loop() { 

     array[0] = analogRead(2); 
     array[1] = analogRead(3); 
     array[2] = analogRead(4); 
     array[3] = analogRead(5); 
     SimbleeGZLL.sendToHost(EMG,4); 
} 

可能有人請提供一些援助,以確定哪些問題可能在於? 謝謝!

回答

0
  1. Matlab通過串行通信不是很可靠。我實際上遇到了一個類似的問題,即串行設備的輸入值會出現亂碼。你是在發信號什麼時候開始和停止打印?你的matlab代碼是什麼樣的?

  2. 我會在主機和設備上設置一個環形緩衝區來處理asycn時間問題。

  3. 您將使用當前方法獲取計時問題。你想要什麼樣的頻率? analogRead超級慢,連續兩倍似乎讓事情變得更慢。你可以嘗試設置一個ADC中斷嗎?

  4. 你的計時器代碼在哪裏?

相關問題