将数据从Xbee Arduino发送到PC

将数据从Xbee Arduino发送到PC,arduino,xbee,Arduino,Xbee,我有一个应用程序,使用MCP3421 18位ADC读取模拟数据。设置为Xbee+Xbee Sheild+Arduino+MCP3421作为变送器。我正在读取此信息并将其传输到带有LCD的远程xbee+arduino模块。数据在LCD上显示良好。但是,我希望在串行端口上接收数据。当我尝试tp时,执行串行.println(s);在接收代码上,我在串行端口上得到的数据是乱码。非常感谢您的帮助 这是我的密码 传送 #include <Wire.h> #include <LiquidC

我有一个应用程序,使用MCP3421 18位ADC读取模拟数据。设置为Xbee+Xbee Sheild+Arduino+MCP3421作为变送器。我正在读取此信息并将其传输到带有LCD的远程xbee+arduino模块。数据在LCD上显示良好。但是,我希望在串行端口上接收数据。当我尝试tp时,执行串行.println(s);在接收代码上,我在串行端口上得到的数据是乱码。非常感谢您的帮助

这是我的密码

传送

#include  <Wire.h>
#include <LiquidCrystal.h>
#define TRUE 1
#define FALSE 0
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup(void)
{
  Serial.begin(9600);
  Wire.begin();
  delay(100);
  Serial.println(">>>>>>>>>>>>>>>>>>>>>>>>");  // just to be sure things are working
  lcd.begin(16, 2);
}

void loop(void)
{

  byte address, Hi, Lo, Config;
  int ADVal;

  while(1)
  {
    address = 0x68;
    Wire.beginTransmission(address);
    Wire.write(0x88);   // config register %1000 1000
    // /RDY = 1, One Conversion, 15 samples per, PGA = X1

    Wire.endTransmission();

    delay(1);
    Wire.requestFrom((int)address, (int) 3);
    Hi = Wire.read();
    Lo = Wire.read();
    Config = Wire.read();
    Wire.endTransmission();

    ADVal = Hi;
    ADVal = ADVal * 256 + Lo;

    //  Serial.print(ADVal, DEC);
    //Serial.print("  ");
    //Serial.println(Config, DEC);
    Serial.print("<");
    Serial.print(ADVal);
    Serial.print(">");


    //lcd.setCursor(0,0);
    //lcd.print(ADVal);
    lcd.setCursor(0,1);
    //float val = ADVal * 0.00006244087;
    //lcd.print(val,3); 
    delay(1);
  }
}
#包括
#包括
#定义真1
#定义FALSE 0
液晶显示器(12,11,5,4,3,2);
作废设置(作废)
{
Serial.begin(9600);
Wire.begin();
延迟(100);
Serial.println(“>>>>>>>>>>>>>>>>”;//只是为了确保一切正常
lcd.begin(16,2);
}
无效循环(无效)
{
字节地址,Hi,Lo,配置;
国际顾问;
而(1)
{
地址=0x68;
电汇开始传输(地址);
Wire.write(0x88);//配置寄存器%1000
///RDY=1,一次转换,每15个样本,PGA=X1
导线端传动();
延迟(1);
电报。请求发件人((int)地址,(int)3);
Hi=Wire.read();
Lo=Wire.read();
Config=Wire.read();
导线端传动();
ADVal=Hi;
ADVal=ADVal*256+Lo;
//连续打印(12月,ADVal);
//连续打印(“”);
//Serial.println(配置,十二月);
连续打印(“”);
//lcd.setCursor(0,0);
//液晶显示打印(ADVal);
lcd.setCursor(0,1);
//float val=ADVal*0.00006244087;
//lcd.打印(val,3);
延迟(1);
}
}
这是接收代码

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // initialize the library with the numbers of the interface pins
bool started = false;
bool ended= false;
char inData[10]; // Leave plenty of room
byte index;
float i;

//char inData[24]; // Or whatever size you need
//byte index = 0;

void setup(){
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // initialize the serial communications:
  Serial.begin(9600);
}

void loop()
{
  //Serial.println(s);
  while(Serial.available() > 0)
  {
    char aChar = Serial.read();
    if(aChar == '<')
    {
      // Start of packet marker read
      index = 0;
      inData[index] = '\0'; // Throw away any incomplete packet
      started = true;
      ended = false;
    }
    else if(aChar == '>')
    {
      // End of packet marker read
      ended = true;
      break; // Done reading serial data for now
    }
    else
    {
      if(index < 10) // Make sure there is room
      {
        inData[index] = aChar; // Add char to array

        index++;
        inData[index] = '\0'; // Add NULL to end

      }
    }
  }

  // When we get here, there is no more serial data to read,
  // or we have read an end-of-packet marker
  if(started && ended)
  {
    // We've seen both markers - do something with the data here
    lcd.setCursor(0,0);
    i = atoi (inData);
    float s = (i * 0.3051851); //multiplying with calibration factor
    float value = ( s / 1000 );

    lcd.setCursor(1,0);
    lcd.print(value,3); // print value after multiplying with calibration factor to LCD

    lcd.setCursor(0,1 );
    lcd.print(i); // Print raw ADC counts as recieved from transmitter

    index = 0;
    inData[index] = '\0';
    started = false;
    ended = false;

  }
} 
#包括
液晶液晶显示器(12,11,5,4,3,2);//使用接口引脚的编号初始化库
bool start=false;
布尔结束=假;
char inData[10];//留出足够的空间
字节索引;
浮点数i;
//char inData[24];//或者你需要的任何尺寸
//字节索引=0;
无效设置(){
//设置LCD的列数和行数:
lcd.begin(16,2);
//初始化串行通信:
Serial.begin(9600);
}
void循环()
{
//序列号。打印号(s);
while(Serial.available()>0)
{
char-aChar=Serial.read();
如果(aChar='')
{
//数据包结束标记读取
结束=真;
break;//现在已完成读取串行数据
}
其他的
{
if(索引<10)//确保有空间
{
inData[index]=aChar;//向数组添加字符
索引++;
inData[index]='\0';//将NULL添加到末尾
}
}
}
//当我们到达这里时,没有更多的串行数据可读取,
//或者我们已经读取了一个数据包结束标记
如果(开始和结束)
{
//我们已经看到了这两个标记-对这里的数据做些什么
lcd.setCursor(0,0);
i=atoi(inData);
浮点s=(i*0.3051851);//乘以校准系数
浮动值=(s/1000);
lcd.setCursor(1,0);
lcd.print(值,3);//将与校准因子相乘后的值打印到lcd
lcd.setCursor(0,1);
lcd.print(i);//打印从变送器接收的原始ADC计数
指数=0;
inData[索引]='\0';
开始=错误;
结束=假;
}
} 
接收arduino通过Xbee获取数据,并在LCD上完美地显示值(附图片)。我还需要通过USB/串行端口在连接到接收arduino的PC上接收数据


当我尝试使用串行监视器时,LCD上的显示消失,串行监视器显示乱码值。当XBEE屏蔽上的DO和DI LED开始闪烁时,串行打印正在将数据发送回XBEE。

您可能需要发布连接示意图,以便我们了解XBEE、LCD和串行监视器如何与Arduino连接。如果他们中的任何人在Arduino上共享I/O线路,您将遇到问题。抱歉,我似乎无法在此处发布图像,因为我没有足够的分数。无论如何,Xbee已安装,Xbee Sheild()我的LCD通过标准连接连接,如下图所示()