小学徒 发表于 2016-11-4 16:18:05

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

本帖最后由 小学徒 于 2018-1-10 19:14 编辑

http://player.youku.com/player.php/sid/XMTgwNTE1MTQ3Mg==/v.swf


const int XLC=24;//左边传感器
const int XRC=25;//右边传感器
intLPWM=11;         //调速
intRPWM=12;         //调速
/****注意:这里是两个输出马达的控制线,把两边的并联起来就是四驱啦,用L298够用了**************/
#definemotorPin1 26 //Arduino 链接到298驱动
#definemotorPin2 27                           
#definemotorPin3 28                           
#definemotorPin4 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();}//前进
}

/********前进函数**************/
voidqj()                        
{

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

/********慢后退函数**************/
voidmht()                  
{
   
   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);
}

/*******慢左转函数*****************/
voidmzz()                     
{

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

/*******慢右转函数*****************/
voidmyz()                     
{

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

ak47wz 发表于 2017-3-10 18:31:42

朋友,能私信我一下联系方式吗?有pwm方面的问题想请教一下

小学徒 发表于 2017-4-4 23:51:33

ak47wz 发表于 2017-3-10 18:31
朋友,能私信我一下联系方式吗?有pwm方面的问题想请教一下

1015427630备注是极客工坊添加
页: [1]
查看完整版本: 四驱两探头快速循迹+改进版四探头