本帖最后由 小学徒 于 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);
}
|