查看: 3174|回复: 1

arduino循迹

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

    [LV.1]初来乍到

    发表于 2018-7-20 13:43 | 显示全部楼层 |阅读模式

    //#include <Servo.h>
    int Left_motor_go=8;     
    int Left_motor_back=9;     
    int Right_motor_go=10;   
    int Right_motor_back=11;   


    const int SensorRight = 3;   
    const int SensorLeft = 5;      
    const int SensorM= 4;


    int SL;   
    int SR;   
    int SM;

    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(SensorRight, INPUT); //定义右循迹红外传感器为输入
      pinMode(SensorLeft, INPUT); //定义左循迹红外传感器为输入
      pinMode(SensorM, INPUT);
      Serial.begin(9600);
    }


    //void run(int time)     // 前进
    void r()
    {
       digitalWrite(Right_motor_go,HIGH);
      digitalWrite(Right_motor_back,LOW);     
      analogWrite(Right_motor_go,30);
      analogWrite(Right_motor_back,0);
      digitalWrite(Left_motor_go,LOW);  
      digitalWrite(Left_motor_back,HIGH);
      analogWrite(Left_motor_go,0);
      analogWrite(Left_motor_back,30);
      //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 right()
    {
      digitalWrite(Right_motor_go,HIGH);  //
      digitalWrite(Right_motor_back,LOW);
    digitalWrite(Left_motor_go,HIGH);   //
      digitalWrite(Left_motor_back,LOW);
        analogWrite(Right_motor_go,250);//
      analogWrite(Right_motor_back,0);
       analogWrite(Left_motor_go,250);//
      analogWrite(Left_motor_back,0);
    }
    //void right(int time)        //
    void left()
    {
      digitalWrite(Right_motor_go,LOW);   
      digitalWrite(Right_motor_back,HIGH);
      analogWrite(Right_motor_go,0);
    analogWrite(Right_motor_back,150);//
    digitalWrite(Left_motor_go,LOW);//
      digitalWrite(Left_motor_back,HIGH);  
       analogWrite(Left_motor_go,0);
      analogWrite(Left_motor_back,150);//

    }




    //==========================================================

    int i=1;

    void loop()
    {

      while(1)
      {
      SR = digitalRead(SensorRight);
      SL = digitalRead(SensorLeft);
    SM = digitalRead(SensorM);

    if(SL == LOW&& SR ==LOW&&SM==LOW)//都是黑线
    {

        switch(i)
    {
      case 1:
      Serial.println(i);
      delay(100);
      i++;
      left();//第一次都是黑线,左转
       break;
      case 2:
      Serial.println(i);
    delay(100);
      r();//第二次都是黑线,前进
    i=2;
      break;

      }
      }

    if(SL == HIGH && SR == HIGH&&SM==HIGH)
    r();
    if (SL == LOW && SR == HIGH&&SM==LOW)
    left();
    if (SL == HIGH && SR == LOW&&SM==LOW)
    right();
    if (SL == HIGH && SR == LOW&&SM==HIGH)//
      right();//左前右后,右
      else if (SR == HIGH && SL == LOW&&SM==HIGH) //
       left();
    else if(SL == HIGH && SR == HIGH&&SM==LOW) // 都是白色, 停止
       r();//都是亮,前进,都是HIGH


      }

    }
    这个程序是可以跑单线的,但是在赛道分支口那里,不能保证三个传感器同时识别到黑线。
    另外switch函数里面,delay函数我感觉有点问题。我的switch函数的想法是,第一次往左转。但是它有时候并不能准确的同时识别到黑色
    微信图片_20180720133621.jpg 微信图片_20180720133630.png . 微信图片_20180720134301.jpg 微信图片_20180712190937.jpg

  • TA的每日心情
    开心
    2018-9-27 20:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2018-11-25 11:44 | 显示全部楼层
    能不能详细说一下while(1)后面 的程序是啥意思,怎么执行的啊?
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    《Color Unit免费申请试用》
    《Color Unit免费申请试用
    COLOR 是一款颜色识别 Unit,其内部集成TCS3472彩色光数字转换器,能够将其检测到颜色
    【干货分享】mega2560原理图PCB图纸altium designer18
    【干货分享】mega2560原理
    分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
    求助帖,ESP01S介入WS2812B,无法让灯
    求助帖,ESP01S介入WS2812
    看抖音暴改车间着迷,但是无法调试出氛围灯,新手,有没有大神帮忙解决一下,感谢 上
    完美解决同步开关状态 ,小爱同学+app+本地按键控制状态...
    完美解决同步开关状态 ,
    你有没有发现app上面的按键在操作完毕后你就不知道开关的状态了;或者小爱操作完毕后
    DW542驱动器控制42步进电机
    DW542驱动器控制42步进电
    求一个范例,或者现成的代码,控制42步进电机,实现控制转台转动,要求可以控制转台转
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表