C语言,51单片机,使用12个红外传感器,循迹小车,每次实现过Y形路口时左转。L298N。两马达。 将12个红外传感器的输出值按顺序存储在一个数组中。实现前进,左右转弯。
时间: 2024-04-30 11:22:18 浏览: 60
基于51单片机红外小车控制C程序.pdf
以下是一个简单的C语言代码,用于控制循迹小车通过Y形路口并左转。该代码使用12个红外传感器检测路面上的黑线,以确定小车的位置。当小车到达Y形路口时,它将根据传感器的读数确定它应该向左转或继续前进。
代码中使用了L298N电机驱动器控制两个电机的转动方向和速度。该代码还包含一个循环,以不断读取传感器的值并根据需要调整小车的方向。
```c
#include <reg51.h>
sbit IN1=P1^0; //电机控制引脚
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;
sbit IR1=P2^0; //红外传感器引脚
sbit IR2=P2^1;
sbit IR3=P2^2;
sbit IR4=P2^3;
sbit IR5=P2^4;
sbit IR6=P2^5;
sbit IR7=P2^6;
sbit IR8=P2^7;
sbit IR9=P3^0;
sbit IR10=P3^1;
sbit IR11=P3^2;
sbit IR12=P3^3;
unsigned char IR[12]; //存储传感器读数的数组
void delay(unsigned int i); //延时函数
void main()
{
while(1)
{
IR[0]=IR1; //读取红外传感器的值
IR[1]=IR2;
IR[2]=IR3;
IR[3]=IR4;
IR[4]=IR5;
IR[5]=IR6;
IR[6]=IR7;
IR[7]=IR8;
IR[8]=IR9;
IR[9]=IR10;
IR[10]=IR11;
IR[11]=IR12;
if(IR[0]==0 && IR[1]==0 && IR[2]==1 && IR[3]==1 && IR[4]==1 && IR[5]==0 && IR[6]==0 && IR[7]==1 && IR[8]==1 && IR[9]==1 && IR[10]==0 && IR[11]==0) //检测到Y形路口
{
IN1=0; //左转
IN2=1;
IN3=0;
IN4=1;
delay(1000); //延时1秒
}
else if(IR[0]==0 && IR[1]==0 && IR[2]==0 && IR[3]==0 && IR[4]==0 && IR[5]==0 && IR[6]==0 && IR[7]==0 && IR[8]==0 && IR[9]==0 && IR[10]==0 && IR[11]==0) //检测到十字路口
{
IN1=1; //停车
IN2=1;
IN3=1;
IN4=1;
delay(1000); //延时1秒
}
else if(IR[5]==0 || IR[6]==0) //检测到左转弯
{
IN1=0; //左转
IN2=1;
IN3=1;
IN4=0;
}
else if(IR[2]==0 || IR[3]==0) //检测到右转弯
{
IN1=1; //右转
IN2=0;
IN3=0;
IN4=1;
}
else //前进
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
}
}
void delay(unsigned int i) //简单的延时函数
{
unsigned int j,k;
for(j=0;j<i;j++)
{
for(k=0;k<125;k++);
}
}
```
阅读全文