int STBY = 10; //standby
//Motor A
int PWMA = 3; //Speed control
int AIN1 = 9; //Direction
int AIN2 = 8; //Direction
int speed =100;
//Motor B
int PWMB = 5; //Speed control
int BIN1 = 11; //Direction
int BIN2 = 12; //Direction
int hzuo=4; //左方红外传感器
int hzhong=6; //中间红外传感器
int hyou=7; //右方红外传感器
int left,right,center;//定义三个变量存储传感器返回值
void setup() {
// put your setup code here, to run once:
pinMode(STBY, OUTPUT);
pinMode(PWMA, OUTPUT);
pinMode(AIN1, OUTPUT);
pinMode(AIN2, OUTPUT);
pinMode(PWMB, OUTPUT);
pinMode(BIN1, OUTPUT);
pinMode(BIN2, OUTPUT);
pinMode(hzuo,INPUT);
pinMode(hzhong,INPUT);
pinMode(hyou,INPUT);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
left=digitalRead(hzuo);
center=digitalRead(hzhong);
right=digitalRead(hyou);
/* 当没有传感器检测到障碍物时 */
if(left==HIGH&¢er==HIGH&&right==HIGH) // 当没有检测到障碍物
{
qian(); // 直行
}
/* 当1个传感器检测到障碍物时 */
else if(left==LOW&¢er==HIGH&&right==HIGH) //当左边检测到障碍物时
{
you(); //右转
}
else if(left==HIGH&¢er==LOW&&right==HIGH) //当中间检测到障碍物时
{
zuo();
}
else if(left==HIGH&¢er==HIGH&&right==LOW) //当右边检测到障碍物时
{
zuo(); //左转
}
/* 当2个传感器检测到障碍物时 */
else if(left==LOW&¢er==LOW&&right==HIGH) //当左半部分检测到障碍物时
{
you(); //右转
delay(1000);
}
else if(left==HIGH&¢er==LOW&&right==LOW) //当右半部分检测到障碍物时
{
zuo(); //左转
delay(1000);
}
/* 当3个传感器检测到障碍物时 */
else if(left==LOW&¢er==LOW&&right==LOW) //当右半部分检测到障碍物时
{
yuanzuo(); //原地右转
delay(1500);
}
}
void qian() //小车前进
{
digitalWrite(STBY, HIGH); //disable standby
digitalWrite(AIN1, HIGH);
digitalWrite(AIN2, LOW);
analogWrite(PWMA, 50);
digitalWrite(BIN1, HIGH);
digitalWrite(BIN2, LOW);
analogWrite(PWMB, 50);
}
void hou() //小车后退
{
digitalWrite(STBY, HIGH); //disable standby
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, HIGH);
analogWrite(PWMA, 50);
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, HIGH);
analogWrite(PWMB, 50);
}
void you() //小车右转
{
digitalWrite(STBY, HIGH); //disable standby
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, HIGH);
analogWrite(PWMA, 100);
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, HIGH);
analogWrite(PWMB, 30);
}
void zuo() //小车左转
{
digitalWrite(STBY, HIGH); //disable standby
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, HIGH);
analogWrite(PWMA, 10);
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, HIGH);
analogWrite(PWMB, 50);
}
void yuanzuo() //小车原地左转
{
digitalWrite(STBY, HIGH); //disable standby
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, HIGH);
analogWrite(PWMA, 10);
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, HIGH);
analogWrite(PWMB, 50);
}
void stop(){
//enable standby
digitalWrite(STBY, LOW);
}