两个arduino mega 2560 之间双向数传 出现问题-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3855|回复: 1

[已解决] 两个arduino mega 2560 之间双向数传 出现问题

[复制链接]
回帖奖励 18 金币 回复本帖可获得 2 金币奖励! 每人限 1 次
发表于 2013-12-21 16:33 | 显示全部楼层 |阅读模式
要做的事:在做通讯时做的一个握手程序,大致描述是这样的,上电后,主机从机发送字符‘S’,然后等待返回,
从机收到确认后,返回一个‘C’然后跳出握手循环,主机确认返回‘C‘后也跳出握手循环,
问题:不知道为什么实际只有一个会跳出,跳出握手循环!谁先跳出跟复位先后有关,但不出现预期的两个都跳出握手循环,
希望各路大侠指点迷津……多谢!!!!!
//主机
#define Uchar unsigned char   
Uchar TX_Packet[6]={0};
Uchar RX_Packet[6]={0};
Uchar i=0;
Uchar connectSuccess=0;

////////////////////////////////////////////////////////////////////////////
void setup()
{
  Serial.begin(9600);
  Serial1.begin(9600);
//  while (!Serial) ;
  TX_Packet[0]='S';
  TX_Packet[1]='C';

}
/////////////////////////////////////////////////////////////////////////
void loop()
{
  connectTX();
  while(1)
  {
    Serial.println("TX Success!!! ^-^ ");
  }
}
//////////////////////////////////////////////////////////////////
void connectTX(void)
{
  while(connectSuccess==0)
{
    if(i>9)
    {
      Serial1.write(TX_Packet[0]);
      i=0;
    }
    i++;
    Serial.println("TXconnecting........");
    if(Serial1.available()>0)
    {
      RX_Packet[1]=Serial1.read();
      Serial.println(RX_Packet[1]);
      if(RX_Packet[1]=='C')
      {
        connectSuccess=1;      
      }else
        {
          connectSuccess=0;      
        }
        Serial.println(connectSuccess);     }
  }
  connectSuccess=0;
}

//从机
#define Uchar unsigned char   
Uchar TX_Packet[6]={0};
Uchar RX_Packet[6]={0};
Uchar i=0;
Uchar connectSuccess=0;

////////////////////////////////////////////////////////////////////////////
void setup()
{
  Serial.begin(9600);
  Serial1.begin(9600);
//  while (!Serial) ;
  TX_Packet[0]='S';
  TX_Packet[1]='C';

}
/////////////////////////////////////////////////////////////////////////
void loop()
{
  connectRX();
  while(1)
  {
    Serial.println("RX Success!!! ^-^ ");
  }
}
///////////////////////////////////////////////////////////////////////////
void connectRX(void)
{
  while(connectSuccess==0)
  {
    Serial.println("RXconnecting........");
    delay(2);
    if(Serial1.available()>0)
    {
      RX_Packet[0]=Serial1.read();
      Serial.println(RX_Packet[0]);
      delay(2);
      if(RX_Packet[0]=='S')
      {
        connectSuccess=1;
        Serial1.write(TX_Packet[1]);
       }else
        {
          connectSuccess=0;
        }
        Serial.println(connectSuccess);     }
  }
  connectSuccess=0;
}



发表于 2013-12-22 21:58 | 显示全部楼层

回帖奖励 +2 金币

未见 “主机确认返回‘C‘”这一句的具体实现。
可进一步简化程序后测试问题所在
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-4 03:53 , Processed in 0.071464 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表