Serial port Arduino Xbee数据解析
我很抱歉做这样一个帖子,但我已经尝试了一切,我不能让这个工作 我有两个arduinos和xbee的连接 一个连接到我的电脑接收数据,另一个是更好的动力,并有一个Wii nunchuck连接。 我知道我从nunchcuck得到了很好的数据,因为我在没有xbee的情况下测试了它。 但是我想通过串行方式发送数据,另一种方式接收数据,用于其他用途,但似乎不起作用。代码如下: 带wii的Arduino:Serial port Arduino Xbee数据解析,serial-port,xbee,Serial Port,Xbee,我很抱歉做这样一个帖子,但我已经尝试了一切,我不能让这个工作 我有两个arduinos和xbee的连接 一个连接到我的电脑接收数据,另一个是更好的动力,并有一个Wii nunchuck连接。 我知道我从nunchcuck得到了很好的数据,因为我在没有xbee的情况下测试了它。 但是我想通过串行方式发送数据,另一种方式接收数据,用于其他用途,但似乎不起作用。代码如下: 带wii的Arduino: #include <Wire.h> #include <Servo.h> co
#include <Wire.h>
#include <Servo.h>
const int vccPin = A3;
const int gndPin = A2;
Servo servo;
const int dataLength = 6; // Number of bytes to request
static byte rawData[dataLength];
enum nunchuckItems {
JoyX, JoyY, accelX, accelY, accelZ, btnZ, btnC};
void setup()
{
pinMode(gndPin, OUTPUT);
pinMode(vccPin, OUTPUT);
digitalWrite(gndPin, LOW);
digitalWrite(vccPin, HIGH);
servo.attach(9);
delay(1000);
Serial.begin(9600);
nunchuckInit();
}
void loop()
{
nunchuckRead();
int joyX = getValue(JoyX);
int joyY = getValue(JoyY);
Serial.print(joyX);
Serial.print(",");
Serial.print(joyY);
Serial.println();
}
void nunchuckInit(){
Wire.begin();
Wire.beginTransmission(0x52);
Wire.write((byte)0x40);
Wire.write((byte)0x00);
Wire.endTransmission();
}
static void nunchuckRequest(){
Wire.beginTransmission(0x52);
Wire.write((byte)0x00);
Wire.endTransmission();
}
boolean nunchuckRead(){
int cnt = 0;
Wire.requestFrom(0x52, dataLength);
while (Wire.available()){
rawData[cnt] = nunchuckDecode(Wire.read());
cnt++;
}
nunchuckRequest();
if (cnt >= dataLength)
return true;
else
return false;
}
static char nunchuckDecode(byte x){
return (x ^ 0x17) + 0x17;
}
int getValue(int item){
if (item <= accelZ)
return (int)rawData[item];
else if (item == btnZ)
return bitRead(rawData[5], 0) ? 0: 1;
else if (item == btnC)
return bitRead(rawData[5], 1) ? 0: 1;
}
#包括
#包括
常数int vccPin=A3;
常量int gndPin=A2;
伺服;
常量int dataLength=6;//要请求的字节数
静态字节rawData[dataLength];
枚举项{
JoyX,JoyY,accelX,accelY,accelZ,btnZ,btnC};
无效设置()
{
pinMode(gndPin,输出);
pinMode(vccPin,输出);
数字写入(gndPin,低电平);
数字写入(vccPin,高);
伺服。连接(9);
延迟(1000);
Serial.begin(9600);
nunchuckInit();
}
void循环()
{
nunchucklead();
int-joyX=getValue(joyX);
int-joyY=getValue(joyY);
串行打印(joyX);
连续打印(“,”);
连载印刷(乔伊);
Serial.println();
}
void nunchuckInit(){
Wire.begin();
导线起始传输(0x52);
Wire.write((字节)0x40);
连线写入((字节)0x00);
导线端传动();
}
静态无效请求(){
导线起始传输(0x52);
连线写入((字节)0x00);
导线端传动();
}
布尔nunchucklead(){
int-cnt=0;
Wire.requestFrom(0x52,数据长度);
while(Wire.available()){
rawData[cnt]=nunchuck解码(Wire.read());
cnt++;
}
nunchuckRequest();
如果(cnt>=数据长度)
返回true;
其他的
返回false;
}
静态字符解码(字节x){
返回(x^0x17)+0x17;
}
int getValue(int项){
如果(项当您读取终端(不带Xbee)时,您是否看到显示有X,Y的行?因为如果您的arduino终端看到它,问题来自Xbee
如果您的终端看到线路,请使用Xctu查看您的Xbee。您必须在两个Xbee上设置panID以查看它们的通信。您还必须使发送方的SL地址等于接收方的DL地址(对于SH/DH也是如此)
你能告诉我们你用的是哪种Arduino,Xbee,盾牌吗?它能帮助我们了解更多细节