2016-06-09 52 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. 你的计时器代码在哪里?

相关问题