最近发现这几个小 Demo 还有人在下载,因此重新看了之前传的代码,发现各种注释和格式的不规范,不禁汗颜…… 想到下载这个项目的应该都是些初学者,为了不引人『误入歧途』,决定抽空把代码都规范一下。 需要注意的是,这几个项目的教学目标受众是只有微弱 C 基础的人。实际项目中,注释不应是代码的翻译。 希望大家学得开心!
- 使小车能够沿着黑色轨道的方向行进
- 小车前安装有左右两个红外光电对管,当对管遇到黑线时,光线被全部吸收,没有返回的光线,此时对管没有接收到返回的信息,输出高电平。反之,当对管遇到白线时,输出低电平。
- 两个光电对管输出可以组合成四种状态(00,01,10,11),根据不同的状态,给小车下达不同的指令
00 | 01 | 10 | 11 |
---|---|---|---|
前进 | 右转 | 左转 | 刹车 |
void loop()
{
// 数字读出 LOW 表明此传感器在白色区域,传感器指示灯亮;数字读出 HIGH 表明此传感器在黑色区域,传感器指示灭
SL = digitalRead(SensorLeft);
SR = digitalRead(SensorRight);
if (SL == LOW && SR == LOW)
// 调用前进函数
goStraight();
else if (SL == HIGH & SR == LOW)
// 左循迹红外传感器,检测到信号,车子向右偏离轨道,向左转
turnLeft();
else if (SR == HIGH & SL == LOW)
// 右循迹红外传感器,检测到信号,车子向左偏离轨道,向右转
turnRight();
else
// 都是黑色, 停止
brake();
}
- 写出四个电机控制函数控制前进,左转,右转和刹车。
- 电机输出可用
analogWrite
函数实现。 例如小车前进的代码控制如下,其它行进方式可类比写出
void goStraight()
{
// 右电机前进
analogWrite(Right_motor_go, 60); // PWM比例0~255调速,左右轮差异略增减
analogWrite(Right_motor_back, 0);
// 左电机前进
analogWrite(Left_motor_go, 60); // PWM比例0~255调速,左右轮差异略增减
analogWrite(Left_motor_back, 0);
}
- 红外光电对管的信号线引脚可连接到arduino主控板的任意数字输出引脚。
- 由于电机要用PWM波控制,所以要用能够输出PWM波的引脚(D3,D5,D6,D9,D10,D11)。
完整代码tracking.ino
可到项目中查看并下载