极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12367|回复: 2

四驱两探头快速循迹+改进版四探头

[复制链接]
发表于 2016-11-4 16:18:05 | 显示全部楼层 |阅读模式
本帖最后由 小学徒 于 2018-1-10 19:14 编辑

[/flash]


const int XLC=24;//左边传感器
const int XRC=25;//右边传感器
int  LPWM=11;         //调速
int  RPWM=12;         //调速
/****注意:这里是两个输出马达的控制线,把两边的并联起来就是四驱啦,用L298够用了**************/
#define  motorPin1 26 //Arduino 链接到298驱动
#define  motorPin2 27                           
#define  motorPin3 28                           
#define  motorPin4 29
int k;
void setup()
                {
                for(int k=26;k<=29;k++)
                  pinMode(k,OUTPUT);//26-29脚设为输出
                  pinMode(XLC,INPUT);//传感器设为输入
                    pinMode(XRC,INPUT);

                     digitalWrite(XLC, HIGH);//上拉电阻
                          digitalWrite(XRC, HIGH);
                }
void loop()
    {
     xunji(); //一直执行循迹函数
    }
/***循迹控制子程序***/
void xunji(){
         int XSL=digitalRead(XLC);//读取左传感器状态并存入XSL
        int XSR=digitalRead(XRC);//读取右传感器状态并存入XSR
   if ((XSL == LOW)&&(XSR==LOW))//如果两个传感器跑出黑线,则先停止再后退回到黑线处
     {_stop();delay(30);mht();delay(30);_stop();}//我认为这里的设值,恰到好处!效果挺好
     else
     if((XSL == HIGH)&&(XSR==LOW))//若右传感器跑出黑线,则慢左转修正
    {
        mzz();
        }
     else
     if((XSL == LOW)&&(XSR==HIGH)){myz();}//若左传感器跑出黑线,则慢右转修正
     else
     if((XSL == HIGH)&&(XSR==HIGH)){qj();}//前进
  }

/********前进函数**************/
void  qj()                        
{
  
   digitalWrite(motorPin1, HIGH);
   digitalWrite(motorPin2, LOW);
   digitalWrite(motorPin3, HIGH);
   digitalWrite(motorPin4, LOW);
   analogWrite(LPWM,250); //0---100--250
   analogWrite(RPWM,250);
}

/********慢后退函数**************/
void  mht()                    
{
   
   digitalWrite(motorPin1, LOW);
   digitalWrite(motorPin2, HIGH);
   digitalWrite(motorPin3, LOW);
   digitalWrite(motorPin4, HIGH);
   analogWrite(LPWM,120); //0---100--250
   analogWrite(RPWM,120);
}
/*********停止函数**************/
void _stop()                              
{   
   digitalWrite(motorPin1, LOW);
   digitalWrite(motorPin2, LOW);
   digitalWrite(motorPin3, LOW);
   digitalWrite(motorPin4, LOW);
   analogWrite(LPWM,0); //0---100--250
   analogWrite(RPWM,0);
}

/*******慢左转函数*****************/
void  mzz()                     
{

   digitalWrite(motorPin1, LOW);
   digitalWrite(motorPin2, HIGH);
   digitalWrite(motorPin3, HIGH);
   digitalWrite(motorPin4, LOW);
   analogWrite(LPWM,200); //0---100--250
   analogWrite(RPWM,200);
}

/*******慢右转函数*****************/
void  myz()                     
{

   digitalWrite(motorPin1, HIGH);
   digitalWrite(motorPin2, LOW);
   digitalWrite(motorPin3, LOW);
   digitalWrite(motorPin4, HIGH);
   analogWrite(LPWM,200); //0---100--250
   analogWrite(RPWM,200);
   
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2017-3-10 18:31:42 | 显示全部楼层
朋友,能私信我一下联系方式吗?有pwm方面的问题想请教一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-4 23:51:33 | 显示全部楼层
ak47wz 发表于 2017-3-10 18:31
朋友,能私信我一下联系方式吗?有pwm方面的问题想请教一下

1015427630  备注是极客工坊添加
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 07:57 , Processed in 0.040176 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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