关于Arduino红外寻迹代码和红外避障代码两个单独的代码如何合在一起运行?
求帮忙,马上答辩了。
避障:
//***********************定义电机腳位*************************
int MotorLeft1 = 11;
int MotorLeft2 = 6;
int MotorRight1 = 3;
int MotorRight2 = 5;
int counter = 0;
const int barrier_left = A5; //左红外避障
const int barrier_right = A0; //右红外避障
//********************************************************************(SETUP)
void setup()
{
Serial.begin(9600);
pinMode(MotorRight1, OUTPUT); //
pinMode(MotorRight2, OUTPUT); //
pinMode(MotorLeft1, OUTPUT); //
pinMode(MotorLeft2, OUTPUT); //
pinMode(barrier_left, INPUT);
pinMode(barrier_right, INPUT);
Serial.println("-----------------");
}
//******************************************************************(Void)
void advance(int a) // 前进
{
Serial.println("advance");
digitalWrite(MotorRight1, LOW);
digitalWrite(MotorRight2, HIGH);
digitalWrite(MotorLeft1, LOW);
digitalWrite(MotorLeft2, HIGH);
delay(a * 100);
}
void right(int b) //右转 单轮
{
Serial.println("right");
digitalWrite(MotorLeft1, LOW);
digitalWrite(MotorLeft2, HIGH);
digitalWrite(MotorRight1, LOW);
digitalWrite(MotorRight2, LOW);
delay(b * 100);
}
void left(int c) //左转 轮
{
Serial.println("left");
digitalWrite(MotorRight1, LOW);
digitalWrite(MotorRight2, HIGH);
digitalWrite(MotorLeft1, LOW);
digitalWrite(MotorLeft2, LOW);
delay(c * 100);
}
void turnR(int d) //右转 双轮
{
Serial.println("turnR");
digitalWrite(MotorRight1, HIGH);
digitalWrite(MotorRight2, LOW);
digitalWrite(MotorLeft1, LOW);
digitalWrite(MotorLeft2, HIGH);
delay(d * 100);
}
void turnL(int e) //左转 双轮
{
Serial.println("turnL");
digitalWrite(MotorRight1, LOW);
digitalWrite(MotorRight2, HIGH);
digitalWrite(MotorLeft1, HIGH);
digitalWrite(MotorLeft2, LOW);
delay(e * 100);
}
void stopp(int f) //停止
{
Serial.println("stopp");
digitalWrite(MotorRight1, LOW);
digitalWrite(MotorRight2, LOW);
digitalWrite(MotorLeft1, LOW);
digitalWrite(MotorLeft2, LOW);
delay(f * 100);
}
void back(int g) //后退
{
Serial.println("back");
digitalWrite(MotorRight1, HIGH);
digitalWrite(MotorRight2, LOW);
digitalWrite(MotorLeft1, HIGH);
digitalWrite(MotorLeft2, LOW);;
delay(g * 100);
}
//******************************************************************************(LOOP)
void loop()
{
if ((digitalRead(barrier_left)==LOW) && (digitalRead(barrier_right)==LOW))
{
back(5);//后退
}
else if (digitalRead(barrier_left)==LOW)
{
right(6); // 右转;
}
else if (digitalRead(barrier_right)==LOW)
{
left(6); // 左转;
}
else
advance(0);//前进
}
寻迹:
//***********************定义电机腳位*************************
int MotorLeft1 = 11;
int MotorLeft2 = 6;
int MotorRight1 = 3;
int MotorRight2 = 5;
int counter = 0;
//*************************定义寻线模块脚位************************************
const int SensorLeft = 8; //左传感器
const int SensorMiddle = 7 ; //中传感器
const int SensorRight = 4; //右传感器
int SL; //左传感器状态
int SM; //中传感器状态
int SR; //右传感器状态
//********************************************************************(SETUP)
void setup()
{
Serial.begin(9600);
pinMode(MotorRight1, OUTPUT); //
pinMode(MotorRight2, OUTPUT); //
pinMode(MotorLeft1, OUTPUT); //
pinMode(MotorLeft2, OUTPUT); //
pinMode(SensorLeft, INPUT); //
pinMode(SensorMiddle, INPUT);//
pinMode(SensorRight, INPUT); //
Serial.println("-----------------");
}
//******************************************************************(Void)
void advance(int a) // 前进
{
Serial.println("advance");
digitalWrite(MotorRight1, LOW);
digitalWrite(MotorRight2, HIGH);
digitalWrite(MotorLeft1, LOW);
digitalWrite(MotorLeft2, HIGH);
delay(a * 100);
}
void right(int b) //右转 单轮
{
Serial.println("right");
digitalWrite(MotorLeft1, LOW);
digitalWrite(MotorLeft2, HIGH);
digitalWrite(MotorRight1, LOW);
digitalWrite(MotorRight2, LOW);
delay(b * 100);
}
void left(int c) //左转 轮
{
Serial.println("left");
digitalWrite(MotorRight1, LOW);
digitalWrite(MotorRight2, HIGH);
digitalWrite(MotorLeft1, LOW);
digitalWrite(MotorLeft2, LOW);
delay(c * 100);
}
void turnR(int d) //右转 双轮
{
Serial.println("turnR");
digitalWrite(MotorRight1, HIGH);
digitalWrite(MotorRight2, LOW);
digitalWrite(MotorLeft1, LOW);
digitalWrite(MotorLeft2, HIGH);
delay(d * 100);
}
void turnL(int e) //左转 双轮
{
Serial.println("turnL");
digitalWrite(MotorRight1, LOW);
digitalWrite(MotorRight2, HIGH);
digitalWrite(MotorLeft1, HIGH);
digitalWrite(MotorLeft2, LOW);
delay(e * 100);
}
void stopp(int f) //停止
{
Serial.println("stopp");
digitalWrite(MotorRight1, LOW);
digitalWrite(MotorRight2, LOW);
digitalWrite(MotorLeft1, LOW);
digitalWrite(MotorLeft2, LOW);
delay(f * 100);
}
void back(int g) //后退
{
Serial.println("back");
digitalWrite(MotorRight1, HIGH);
digitalWrite(MotorRight2, LOW);
digitalWrite(MotorLeft1, HIGH);
digitalWrite(MotorLeft2, LOW);;
delay(g * 100);
}
//******************************************************************************(LOOP)
void loop()
{
SL = digitalRead(SensorLeft);
SM = digitalRead(SensorMiddle);
SR = digitalRead(SensorRight);
{
SL = digitalRead(SensorLeft);
SM = digitalRead(SensorMiddle);
SR = digitalRead(SensorRight);
Serial.print(SL);
Serial.print("-");
Serial.print(SM);
Serial.print("-");
Serial.println(SR);
if (SM == HIGH)//中间传感器检测到黑线 黑线为1 白为0
{
if (SL == LOW & SR == HIGH) //左白右黑, 向右转弯
{
Serial.println("BL");
analogWrite(MotorRight1, 0); //右转
analogWrite(MotorRight2, 80);
digitalWrite(MotorLeft1, LOW);
digitalWrite(MotorLeft2, HIGH);
}
else if ( SL == HIGH & SR == LOW) // 左黑右白, 向左转弯
{
Serial.println("BR");
digitalWrite(MotorRight1, LOW);
digitalWrite(MotorRight2, HIGH);
analogWrite(MotorLeft1, 0);
analogWrite(MotorLeft2, 80);
}
else // 两侧为白色,前进
{
Serial.println("Bw");
digitalWrite(MotorRight1, LOW);
digitalWrite(MotorRight2, HIGH);
digitalWrite(MotorLeft1, LOW);
digitalWrite(MotorLeft2, HIGH);
/*
analogWrite(MotorLeft1,0);
analogWrite(MotorLeft2,150);
analogWrite(MotorRight1,0);
analogWrite(MotorRight2,150);
*/
}
}
else // 中间传感器在白色区域
{
if (SL == LOW & SR == HIGH ) // 左白右黑, 快速右转
{
Serial.println("WL");
digitalWrite(MotorRight1, LOW);
digitalWrite(MotorRight2, LOW);
digitalWrite(MotorLeft1, LOW);
digitalWrite(MotorLeft2, HIGH);
}
else if ( SL == HIGH & SR == LOW ) // 左黑右白, 快速左转
{
Serial.println("WR");
digitalWrite(MotorRight1, LOW);
digitalWrite(MotorRight2, HIGH);
digitalWrite(MotorLeft1, LOW);
digitalWrite(MotorLeft2, LOW);
}
else // 都是白色, 保护不变
{
Serial.println("ww");
/*
analogWrite(MotorLeft1,255);
analogWrite(MotorLeft2,125);
analogWrite(MotorRight1,255);
analogWrite(MotorRight2,125);
*/
}
}
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话:E18-D80NK 红外避障传感器的检测距离可以通过调节传感器上的旋钮来设置。具体步骤如下:
将传感器连接到电源和微控制器。
打开串口监视器或其他调试工具,以便在微控制器上查看传感器输出的距离值。
将物体放置在传感器前面,然后轻轻旋转传感器上的旋钮,直到距离值达到所需的范围。
如果需要更精确的距离测量,可以使用示波器或逻辑分析仪来观察传感器输出的脉冲信号,并进一步调节旋钮以优化检测距离。