请问使用红外遥控,但是在接收到红外信号后程序不运行ze...

2021-05-081.7万
AI 快速预览详细 收起
本文讨论了在使用红外遥控时遇到的程序不运行问题,并提供了详细的调试步骤。通过检查串口通信部分,可以解决红外遥控信号接收后程序无法执行的问题。文章包含了具体的代码示例和调试经验,帮助用户快速定位并修复故障。


使用红外遥控作为开关以及部分功能的遥控,在启动自动跟随后程序无法运行,并且其他动作在通过遥控执行一次后就无法在重复执行,并且自动跟随也无法使用,各位大佬帮忙看看是什么问题则么解决,谢谢!   单独在主程序中去掉函数(距离)就没问题。。
代码
*!
* MindPlus
* mega2560
*
*/
#include <DFRobot_IRremote.h>
#include <DFRobot_Libraries.h>

// 动态变量
String         mind_s_HongWai;
volatile float mind_n_Men, mind_n_index_L, mind_n_index_R, mind_n_switch;
// 函数声明
void DF_JuLi();
void DF_ZuoZhengZhuan(float mind_n_ZuoSu);
void DF_KaiMen();
void DF_ZuoFanZhuan(float mind_n_ZuoSu);
void DF_GuanMen();
void DF_ZuoTing();
void DF_YouZhengZhuan(float mind_n_YouSu);
void DF_YouFanZhuan(float mind_n_YouSu);
void DF_YouTing();
// 创建对象
IRremote_Receive remoteReceive_2;
DFRobot_Servo360 servo360_22;
DFRobot_Servo360 servo360_23;

  byte comdataL[3] = {}; //接受左边传感器的数据
int mind_n_DistanceL = 6800; //左边小车的距离发送模块的距离
byte comdataR[3] = {}; //接受右边传感器的数据
int mind_n_DistanceR = 6800; //右边小车的距离发送模块的距离



// 主程序开始
void setup() {
        Serial.begin(9600);
        Serial1.begin(115200);
  Serial2.begin(115200);
        servo360_22.attach(22);
        servo360_23.attach(23);
}

void loop() {
        mind_s_HongWai = (remoteReceive_2.getIrCommand(2));
        if ((mind_s_HongWai==String("FFA857"))) {
                mind_n_switch = 0;
        }
        if ((mind_s_HongWai==String("FFE01F"))) {
                mind_n_switch = 1;
        }
        if (((mind_s_HongWai==String("FF30CF")) && (mind_n_switch==1))) {
                DF_KaiMen();
        }
        if (((mind_s_HongWai==String("FF18E7")) && (mind_n_switch==1))) {
                DF_GuanMen();
        }
        if (((mind_n_Men==0) && (mind_n_switch==1))) {
                delay(10);
                DF_JuLi();
                Serial.print(mind_n_DistanceL);
                Serial.print("       ");
                Serial.println(mind_n_DistanceR);
                if (((mind_n_DistanceR + mind_n_DistanceL)>=13400)) {
                        DF_YouTing();
                        DF_ZuoTing();
                }
                else {
                        if (((abs((mind_n_DistanceL - mind_n_DistanceR)))<=50)) {
                                DF_ZuoZhengZhuan(150);
                                DF_YouZhengZhuan(150);
                        }
                        else {
                                if (((mind_n_DistanceL - mind_n_DistanceR)>0)) {
                                        DF_ZuoZhengZhuan(150);
                                        DF_YouFanZhuan(150);
                                }
                                else {
                                        DF_YouZhengZhuan(150);
                                        DF_ZuoFanZhuan(150);
                                }
                        }
                }
        }
        Serial.print("switch:");
        Serial.print(mind_n_switch);
        Serial.print("\"门\"");
        Serial.println(mind_n_Men);
}

void DF_JuLi() {
mind_n_DistanceL =6800;
  mind_n_DistanceR =6800;
static byte mind_n_index_L = 0, mind_n_index_R = 0;
  while (Serial1.available()) //如果串口数据可用
  {
    if (mind_n_index_L == 0)
    {
      comdataL[mind_n_index_L] = Serial1.read();//把获取传感器的数据存放到数组里面
      if (comdataL[mind_n_index_L] == 0xA5) //判断数据的头文件
        mind_n_index_L++;
    }
    else
    {
      comdataL[mind_n_index_L++] = Serial1.read();
    }
    if (mind_n_index_L >= 3)
    {
      mind_n_index_L = 0;
      mind_n_DistanceL = comdataL[1] << 8 | comdataL[2]; //把收到的数据合成为距离值
    }
  }

  while (Serial2.available()) //如果串口数据可用
  {
    if (mind_n_index_R == 0)
    {
      comdataR[mind_n_index_R] = Serial2.read();//把获取传感器的数据存放到数组里面
      if (comdataR[mind_n_index_R] == 0xA5) //判断数据的头文件
        mind_n_index_R++;
    }
    else
    {
      comdataR[mind_n_index_R++] = Serial2.read();
    }
  }
  if (mind_n_index_R >= 3)
  {
    mind_n_index_R= 0;
    mind_n_DistanceR = comdataR[1] << 8 | comdataR[2]; //把收到的数据合成为距离值
  }
}
void DF_ZuoTing() {
        analogWrite(13, 0);
        analogWrite(12, 0);
}
void DF_ZuoZhengZhuan(float mind_n_ZuoSu) {
        analogWrite(12, mind_n_ZuoSu);
        analogWrite(13, mind_n_ZuoSu);
        digitalWrite(50, LOW);
        digitalWrite(51, HIGH);
        digitalWrite(52, LOW);
        digitalWrite(53, HIGH);
}

void DF_GuanMen() {
        // 22右
        // 23左
delay(10);
        servo360_22.speed(90);
        servo360_23.speed(-90);
        delay(600);
        servo360_22.speed(0);
        servo360_23.speed(0);
        mind_n_Men = 0;
}
void DF_ZuoFanZhuan(float mind_n_ZuoSu) {
        analogWrite(12, mind_n_ZuoSu);
        analogWrite(13, mind_n_ZuoSu);
        digitalWrite(50, HIGH);
        digitalWrite(51, LOW);
        digitalWrite(52, HIGH);
        digitalWrite(52, LOW);
}
void DF_KaiMen() {
  delay(10);
        servo360_22.speed(-90);
        servo360_23.speed(90);
        delay(600);
        servo360_22.speed(0);
        servo360_23.speed(0);
        mind_n_Men = 1;
}
void DF_YouTing() {
        analogWrite(10, 0);
        analogWrite(11, 0);
}
void DF_YouZhengZhuan(float mind_n_YouSu) {
        analogWrite(11, mind_n_YouSu);
        analogWrite(10, mind_n_YouSu);
        digitalWrite(46, LOW);
        digitalWrite(47, HIGH);
        digitalWrite(48, LOW);
        digitalWrite(49, HIGH);
}
void DF_YouFanZhuan(float mind_n_YouSu) {
        analogWrite(11, mind_n_YouSu);
        analogWrite(10, mind_n_YouSu);
        digitalWrite(46, HIGH);
        digitalWrite(47, LOW);
        digitalWrite(48, HIGH);
        digitalWrite(49, LOW);
}




G@4(3A7P2(_BCR466E$J)9I.png (157.95 KB, 下载次数: 1682)

红外遥控信号接收后程序不运行的解决方法 | DF创客社区_image_3.webp

YH6QPDAXEZ0XNKEXBD~R2AM.png (5.96 KB, 下载次数: 1655)

红外遥控信号接收后程序不运行的解决方法 | DF创客社区_image_6.webp

YH6QPDAXEZ0XNKEXBD~R2AM.png (5.96 KB, 下载次数: 1725)

红外遥控信号接收后程序不运行的解决方法 | DF创客社区_image_9.webp

G@4(3A7P2(_BCR466E$J)9I.png (157.95 KB, 下载次数: 1786)

红外遥控信号接收后程序不运行的解决方法 | DF创客社区_image_12.webp

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -