四驱两探头快速循迹+改进版四探头
本帖最后由 小学徒 于 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);
}
朋友,能私信我一下联系方式吗?有pwm方面的问题想请教一下 ak47wz 发表于 2017-3-10 18:31
朋友,能私信我一下联系方式吗?有pwm方面的问题想请教一下
1015427630备注是极客工坊添加
页:
[1]