查看: 1030|回复: 0

[未解决] arduino双线循迹四个传感器

[复制链接]
  • TA的每日心情
    开心
    2018-5-29 13:32
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2018-7-12 19:11 | 显示全部楼层 |阅读模式
    //#include <Servo.h>
    int Left_motor_go=8;     //左电机前进(IN1)
    int Left_motor_back=9;     //左电机后退(IN2)
    int Right_motor_go=10;    // 右电机前进(IN3)
    int Right_motor_back=11;    // 右电机后退(IN4)
    const int SensorRight = 3;     //右循迹红外传感器(P3.2OUT1)
    const int SensorLeft = 5;       //左循迹红外传感器(P3.3OUT2)
    const int SensorRight2 = 6;
    const int SensorLeft2 = 7;
    int SL;   //左循迹红外传感器状态
    int SR;   //右循迹红外传感器状态
    int SR2;//右外侧传感器
    int SL2;//左外侧传感器
    void setup()
    {
      //初始化电机驱动IO为输出方式
    pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM)
    pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)
    pinMode(Right_motor_go,OUTPUT);// PIN 10 (PWM)
    pinMode(Right_motor_back,OUTPUT);// PIN 11 (PWM)
    //pinMode(key,INPUT);//定义按键接口为输入接口
    //pinMode(beep,OUTPUT);
    pinMode(SensorRight, INPUT); //定义右循迹红外传感器为输入
    pinMode(SensorLeft, INPUT); //定义左循迹红外传感器为输入
    pinMode(SensorRight2, INPUT);
    pinMode(SensorLeft2, INPUT);
    }
    //void run(int time)     // 前进
    void run()
    {
      digitalWrite(Right_motor_go,HIGH); // 右电机前进
    digitalWrite(Right_motor_back,LOW);   
    analogWrite(Right_motor_go,20);//PWM比例0~255调速,左右轮差异略增减
    analogWrite(Right_motor_back,0);
    digitalWrite(Left_motor_go,LOW); // 左电机前进
    digitalWrite(Left_motor_back,HIGH);
    analogWrite(Left_motor_go,0);//PWM比例0~255调速,左右轮差异略增减
    analogWrite(Left_motor_back,20);
    //delay(time * 100);   //执行时间,可以调整  
    }
    //void brake(int time)  //刹车,停车
    void brake()
    {
    digitalWrite(Right_motor_go,LOW);
    digitalWrite(Right_motor_back,LOW);
    digitalWrite(Left_motor_go,LOW);
    digitalWrite(Left_motor_back,LOW);
    //delay(time * 100);//执行时间,可以调整  
    }
    //void left(int time)         //左转(左轮不动,右轮前进)
    void left()
    {
    digitalWrite(Right_motor_go,HIGH); // 右电机前进
    digitalWrite(Right_motor_back,LOW);
    digitalWrite(Left_motor_go,HIGH);   //左轮后退
    digitalWrite(Left_motor_back,LOW);
       analogWrite(Right_motor_go,150);//PWM比例0~255调速,左右轮差异略增减
    analogWrite(Right_motor_back,0);
      analogWrite(Left_motor_go,0);//PWM比例0~255调速,左右轮差异略增减
    analogWrite(Left_motor_back,150);
    }
    //void right(int time)        //右转(右轮不动,左轮前进)
    void right()
    {
    digitalWrite(Right_motor_go,LOW);  //右电机后退
    digitalWrite(Right_motor_back,HIGH);
    analogWrite(Right_motor_go,0);
    analogWrite(Right_motor_back,250);//PWM比例0~255调速
    digitalWrite(Left_motor_go,LOW);//左电机前进
    digitalWrite(Left_motor_back,HIGH);
      analogWrite(Left_motor_go,0);
    analogWrite(Left_motor_back,150);//PWM比例0~255调速
      
    }
    //==========================================================
    void loop()
    {
      
    while(SR2 ==HIGH&&SL2==HIGH)//在单线上
      {
      SR= digitalRead(SensorRight);//有信号表明在白色区域,车子底板上L1亮;没信号表明压在黑线上,车子底板上L1灭
      SL= digitalRead(SensorLeft);//有信号表明在白色区域,车子底板上L2亮;没信号表明压在黑线上,车子底板上L2灭
      SR2 = digitalRead(SensorRight2);
      SL2 = digitalRead(SensorLeft2);
      //有信号为LOW  没有信号为HIGH
      if(SL == LOW&&SR==LOW)
      run();   //都亮,前进,都是LOW
    else if (SL == HIGH & SR == LOW)// 左循迹红外传感器,检测到信号,车子向右偏离轨道,向左转
       left();
    else if (SR == HIGH & SL == LOW) // 右循迹红外传感器,检测到信号,车子向左偏离轨道,向右转  
      right();
    else// 都是白色, 停止
    run();//都是亮,前进,都是HIGH
      }
    while(SR2 ==LOW&&SL2==LOW)//在双线上
    {
    SR = digitalRead(SensorRight);//有信号表明在白色区域,车子底板上L1亮;没信号表明压在黑线上,车子底板上L1灭
      SL= digitalRead(SensorLeft);//有信号表明在白色区域,车子底板上L2亮;没信号表明压在黑线上,车子底板上L2灭
      SR2 = digitalRead(SensorRight2);
      SL2 = digitalRead(SensorLeft2);
    if(SR2 ==LOW&SL2==LOW)
    run();
    else if(SR2 ==HIGH)
      left();
    else if(SL2 ==HIGH)
    right();
    }
    }
    单线循迹两个传感器是可以跑的,但是加了SR2 SL2之后发现它就一直前进根本没有左转和右转,请多多指教

    赛道

    赛道

    小车

    小车

    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    [发布帖]RPG游戏 无人世界
    [发布帖]RPG游戏 无人世界
    视频攻略:https://www.bilibili.com/video/av43790997/ 剧情:主角是一只猫又,在逃
    arduino oled 时钟 可设置闹钟 表
    arduino oled 时钟 可设置
    呆板教程,固件是编译好的,有上传工具,这次不是IDE了
    Arduino 蓝牙机械臂
    Arduino 蓝牙机械臂
    蓝牙机械臂(这次没用BLINKER,改
    求助!!!!!!!!
    求助!!!!!!!!
    求助?????错在哪里了?谢谢
    max30102问题
    max30102问题
    最近网上买了个max30102的心率血氧模块,用卖家给的单个例程的时候数据还算准确,但是
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表