找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4179|回复: 1
打印 上一主题 下一主题
收起左侧

基于arduino的循迹小车,源代码

[复制链接]
跳转到指定楼层
楼主
ID:220285 发表于 2017-7-17 15:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void motor(char pin,char pwmpin,char state,int val)
{
    pinMode(pin, OUTPUT);   

  if(state==1)
  {  
    analogWrite(pwmpin,val);
    digitalWrite(pin,1);
   }
  else if(state==2)
{  
   analogWrite(pwmpin,val);
   digitalWrite(pin,0);
}
else if(state==0)
{
    analogWrite(pwmpin,0);
    digitalWrite(pin,0);
}
}

void runfoward(int i)   //前进
{
  motor(4,5,1,i);
  motor(7,6,1,i);
}
void runback(int j)    //后退
{
   motor(4,5,2,j);
   motor(7,6,2,j);
}
void turnL(int m)     //左转
{
  motor(4,5,1,m);
  motor(7,6,0,0);
}
void turnR(int n)      //右转
{
  motor(4,5,0,0);
  motor(7,6,1,n);
}
void stop()            //停止
{
  motor(4,5,0,0);
  motor(7,6,1,0);
}
void setup()
{
  pinMode(10,INPUT);//定义右边传感器,
  pinMode(11,INPUT);//定义中间传感器,
  pinMode(12,INPUT);//定义左边传感器,  
  Serial.begin(9600);
}
void loop()
{
  char num1,num2,num3;

  num1=digitalRead(12);
  num2=digitalRead(11);
  num3=digitalRead(10);  

   if((num1==0)&&num2&&num3)
   {
    turnL(120);          //检测到左边传感器遇到黑线,说明小车右偏了,立即往左转一点
    delay(2);
    while(1){
    num2=digitalRead(11);         //循环判断中间传感器度数,
    if(num2==1)
    {  turnL(120);                     //如果num2==1说明还没有转到中间位置,继续左转
     delay(2);}
     else
     break;                      //检测到num2==0说明转过头了,跳出循环,检测三个传感器的状态再做出相应动作
   }                                       //后面道理相同
   }   

  else if(num2&&num1&&(num3==0))
   {
    turnR(120);
    delay(2);
    while(1)
    {
     num2=digitalRead(11);
    if(num2==1){
      turnR(120);   
     delay(2);}
     else
      break;
    }
   }
  else
  {
    runfoward(120);
    delay(2);
  }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:221212 发表于 2017-7-20 22:28 | 只看该作者
厉害厉害,这个循迹有点像自动避障呀?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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