查看: 399|回复: 3

[已解决] Arduino 红外遥控小车异常(没有使用PWM)

[复制链接]
回帖奖励 5 金币 回复本帖可获得 5 金币奖励! 每人限 1 次(中奖概率 50%)
  • TA的每日心情
    难过
    2019-7-7 14:18
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-7-7 14:17 | 显示全部楼层 |阅读模式
    本帖最后由 xinghanwen001 于 2019-7-7 16:34 编辑

    如果不使用红外遥控功能我们的小车可以正常地前进后退,但是加上红外遥控功能之后使用按键控制小车,小车就会不听指令,比如按1前进,但是可能连续按两次1它就会后退;废话不说了,贴代码

    #include <IRremote.h>
    int Pin0 = 8;
    int Pin1 = 9;
    int Pin2 = 10;
    int Pin3 = 11;
    int Pin4 = 0;
    int Pin5 = 1;
    int Pin6 = 2;
    int Pin7 = 3;
    int _step =0 ;
    int recvPin = 13;//定义红外接收器的引脚为13
    IRrecv irrecv(recvPin);
    decode_results results;
    boolean dir; //= -1;正反转
    int stepperSpeed = 2;//电机转速,1ms一步

    long KEY_CODE_EQ = 0xFF906F;
    long KEY_CODE_ONE = 0xFF30CF;
    long KEY_CODE_TWO = 0xFF18E7;
    long KEY_CODE_THREE = 0xFF7A85;
    long KEY_CODE_FOUR = 0xFF10EF;
    long KEY_CODE_LONG_PRESS = 0xFFFFFFFF;
    long longPressKey = -1; //长按下的那个键

    void setup()
    {
      pinMode(Pin0, OUTPUT);
      pinMode(Pin1, OUTPUT);
      pinMode(Pin2, OUTPUT);
      pinMode(Pin3, OUTPUT);
      pinMode(Pin4, OUTPUT);
      pinMode(Pin5, OUTPUT);
      pinMode(Pin6, OUTPUT);
      pinMode(Pin7, OUTPUT);
      irrecv.enableIRIn(); // 初始化红外接收器
      Serial.begin(9600);
    }

    void loop()
    {
          if (irrecv.decode(&results))
          {
        Serial.println(results.value, HEX);//以16进制换行输出接收代码
        Serial.println();//为了便于观看输出结果增加一个空行
        irrecv.resume(); // 接收下一个值
           }

         if (results.value == KEY_CODE_ONE ) {
          foward();
      }
      //长按1键的事件
      if ( results.value == KEY_CODE_LONG_PRESS && longPressKey == KEY_CODE_ONE) {
          foward();
      }
       //按下2键的事件
      if (results.value == KEY_CODE_TWO ) {
        back();
      }
      //长按 2键的事件
      if ( results.value == KEY_CODE_LONG_PRESS && longPressKey == KEY_CODE_TWO) {
        back();
      }
         if (results.value == KEY_CODE_THREE ) {
          left();
      }
      //长按3键的事件
      if ( results.value == KEY_CODE_LONG_PRESS && longPressKey == KEY_CODE_THREE) {
          left();
      }
       //按下4键的事件
      if (results.value == KEY_CODE_FOUR ) {
        right();
      }
      //长按4键的事件
      if ( results.value == KEY_CODE_LONG_PRESS && longPressKey == KEY_CODE_FOUR) {
        right();
      }
    }

    void back()
      {

        switch(_step){
        case 0:
        //stepperSpeed++;
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, HIGH);//32A
          digitalWrite(Pin4, LOW);
          digitalWrite(Pin5, LOW);
          digitalWrite(Pin6, LOW);
          digitalWrite(Pin7, HIGH);//32A
        break;
        case 1:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, HIGH);//10B
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, HIGH);
          digitalWrite(Pin4, LOW);
          digitalWrite(Pin5, HIGH);//10B
          digitalWrite(Pin6, LOW);
          digitalWrite(Pin7, HIGH);
        break;
        case 2:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, HIGH);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, LOW);
          digitalWrite(Pin4, LOW);
          digitalWrite(Pin5, HIGH);
          digitalWrite(Pin6, LOW);
          digitalWrite(Pin7, LOW);
        break;
        case 3:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, HIGH);
          digitalWrite(Pin2, HIGH);
          digitalWrite(Pin3, LOW);
          digitalWrite(Pin4, LOW);
          digitalWrite(Pin5, HIGH);
          digitalWrite(Pin6, HIGH);
          digitalWrite(Pin7, LOW);
        break;
        case 4:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, HIGH);
          digitalWrite(Pin3, LOW);
          digitalWrite(Pin4, LOW);
          digitalWrite(Pin5, LOW);
          digitalWrite(Pin6, HIGH);
          digitalWrite(Pin7, LOW);
        break;
        case 5:
          digitalWrite(Pin0, HIGH);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, HIGH);
          digitalWrite(Pin3, LOW);
          digitalWrite(Pin4, HIGH);
          digitalWrite(Pin5, LOW);
          digitalWrite(Pin6, HIGH);
          digitalWrite(Pin7, LOW);
        break;
          case 6:
          digitalWrite(Pin0, HIGH);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, LOW);
          digitalWrite(Pin4, HIGH);
          digitalWrite(Pin5, LOW);
          digitalWrite(Pin6, LOW);
          digitalWrite(Pin7, LOW);
        break;
        case 7:
          digitalWrite(Pin0, HIGH);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, HIGH);
          digitalWrite(Pin4, HIGH);
          digitalWrite(Pin5, LOW);
          digitalWrite(Pin6, LOW);
          digitalWrite(Pin7, HIGH);
        break;
        default:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, LOW);
          digitalWrite(Pin4, LOW);
          digitalWrite(Pin5, LOW);
          digitalWrite(Pin6, LOW);
          digitalWrite(Pin7, LOW);
        break;
      }
       _step++;

      if(_step>7){    _step=0;  }

      delay(stepperSpeed);
      }



      void foward()
    {

      switch(_step){
        case 0:
        //stepperSpeed++;
          digitalWrite(Pin0, HIGH);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, LOW);//32A
          digitalWrite(Pin4, HIGH);
          digitalWrite(Pin5, LOW);
          digitalWrite(Pin6, LOW);
          digitalWrite(Pin7, LOW);//32A
        break;
        case 1:
          digitalWrite(Pin0, HIGH);
          digitalWrite(Pin1, LOW);//10B
          digitalWrite(Pin2, HIGH);
          digitalWrite(Pin3, LOW);
          digitalWrite(Pin4, HIGH);
          digitalWrite(Pin5, LOW);//10B
          digitalWrite(Pin6, HIGH);
          digitalWrite(Pin7, LOW);
        break;
        case 2:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, HIGH);
          digitalWrite(Pin3, LOW);
          digitalWrite(Pin4, LOW);
          digitalWrite(Pin5, LOW);
          digitalWrite(Pin6, HIGH);
          digitalWrite(Pin7, LOW);
        break;
        case 3:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, HIGH);
          digitalWrite(Pin2, HIGH);
          digitalWrite(Pin3, LOW);
          digitalWrite(Pin4, LOW);
          digitalWrite(Pin5, HIGH);
          digitalWrite(Pin6, HIGH);
          digitalWrite(Pin7, LOW);
        break;
        case 4:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, HIGH);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, LOW);
          digitalWrite(Pin4, LOW);
          digitalWrite(Pin5, HIGH);
          digitalWrite(Pin6, LOW);
          digitalWrite(Pin7, LOW);
        break;
        case 5:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, HIGH);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, HIGH);
          digitalWrite(Pin4, LOW);
          digitalWrite(Pin5, HIGH);
          digitalWrite(Pin6, LOW);
          digitalWrite(Pin7, HIGH);
        break;
          case 6:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, HIGH);
          digitalWrite(Pin4, LOW);
          digitalWrite(Pin5, LOW);
          digitalWrite(Pin6, LOW);
          digitalWrite(Pin7, HIGH);
        break;
        case 7:
          digitalWrite(Pin0, HIGH);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, HIGH);
          digitalWrite(Pin4, HIGH);
          digitalWrite(Pin5, LOW);
          digitalWrite(Pin6, LOW);
          digitalWrite(Pin7, HIGH);
        break;
        default:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, LOW);
          digitalWrite(Pin4, LOW);
          digitalWrite(Pin5, LOW);
          digitalWrite(Pin6, LOW);
          digitalWrite(Pin7, LOW);
        break;
      }
        _step++;

      if(_step>7){    _step=0;  }

      delay(stepperSpeed);

    }

    void right()
      {

        switch(_step){
        case 0:
        //stepperSpeed++;
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, HIGH);//32A
        break;
        case 1:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, HIGH);//10B
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, HIGH);
        break;
        case 2:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, HIGH);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, LOW);
        break;
        case 3:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, HIGH);
          digitalWrite(Pin2, HIGH);
          digitalWrite(Pin3, LOW);
        break;
        case 4:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, HIGH);
          digitalWrite(Pin3, LOW);
        break;
        case 5:
          digitalWrite(Pin0, HIGH);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, HIGH);
          digitalWrite(Pin3, LOW);
        break;
          case 6:
          digitalWrite(Pin0, HIGH);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, LOW);
        break;
        case 7:
          digitalWrite(Pin0, HIGH);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, HIGH);
        break;
        default:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, LOW);
        break;
      }
       _step++;

      if(_step>7){    _step=0;  }

      delay(stepperSpeed);
      }



      void left()
    {

      switch(_step){
        case 0:
        //stepperSpeed++;
          digitalWrite(Pin0, HIGH);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, LOW);//32A
        break;
        case 1:
          digitalWrite(Pin0, HIGH);
          digitalWrite(Pin1, LOW);//10B
          digitalWrite(Pin2, HIGH);
          digitalWrite(Pin3, LOW);
        break;
        case 2:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, HIGH);
          digitalWrite(Pin3, LOW);
        break;
        case 3:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, HIGH);
          digitalWrite(Pin2, HIGH);
          digitalWrite(Pin3, LOW);
        break;
        case 4:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, HIGH);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, LOW);
        break;
        case 5:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, HIGH);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, HIGH);
        break;
          case 6:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, HIGH);
        break;
        case 7:
          digitalWrite(Pin0, HIGH);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, HIGH);
        break;
        default:
          digitalWrite(Pin0, LOW);
          digitalWrite(Pin1, LOW);
          digitalWrite(Pin2, LOW);
          digitalWrite(Pin3, LOW);
        break;
      }
        _step++;

      if(_step>7){    _step=0;  }

      delay(stepperSpeed);

    }
  • TA的每日心情
    难过
    2019-7-7 14:18
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2019-7-19 17:22 | 显示全部楼层

    就是有时候使用红外遥控会出现无法预估的乱码状况,要多次按下按钮才会接收到正确的按钮值

    该用户从未签到

    发表于 2019-7-21 07:15 | 显示全部楼层
    本人经验是接触不良会导致接收头接受的数据不准确
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    【干货分享】国产mega2560改进板原理图PCB图纸altium designer18
    【干货分享】国产mega2560
    暂时付费分享,基于某宝上 mega2560 R3 改进版抄的,算是最便宜的mega2560了,自己也
    开贴讲讲NRF24L01P,让你彻底搞懂它的工作原理,持续更...
    开贴讲讲NRF24L01P,让你
    *****************************************
    循迹小车程序怎么改
    循迹小车程序怎么改
    void setup() { // put your setup code here, to run once: } void loop() { /
    【原创】 drawbot平面关节scara机械臂写字机 画画机器人直播...
    【原创】 drawbot平面关节
    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
    【Arduino】66种传感器系列实验(93)---CSR8350蓝牙音乐模块
    【Arduino】66种传感器系
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表