循迹小车一般分为两方面:一方面是简单的闭环赛道只有直道和弯道,另一方面是毕设类型的包括一些元素:90度弯道、十字道路、S形弯道等。
本篇博客试根据下图来进行书写的,如果大家有什么新的元素,也可以在下方评论,我进行更新。
作者:sumjess
注意本篇博客循迹模块使用了5个
一、简单的闭环赛道
随意画了一个
(1)逻辑部分:
所以程序的写法也很简单,就是检测到哪种情况对应着哪种反应。这一过程可以用switch也可以用if来实现这一过程。下文用if来演示。
(2)各程序片段
总的循环:
void loop(){
read_sensor_values(); //获取5个循迹模块的数值情况 calc_pid(); //pid计算出转向的pwm值 motor_control(); //电机转动}
第一部分:检测部分程序片段
void read_sensor_values(){
sensor[0] = digitalRead(leftA_track_PIN); sensor[1] = digitalRead(leftB_track_PIN); sensor[2] = digitalRead(middle_track_PIN); sensor[3] = digitalRead(righA_track_PIN); sensor[4] = digitalRead(righB_track_PIN); if ((sensor[0] == 0) && (sensor[1] == 0) && (sensor[2] == 0) && (sensor[3] == 0) && (sensor[4] == 1)) {
error = 2;// 0 0 0 0 1 } else if ((sensor[0] == 0) && (sensor[1] == 0) && (sensor[2] == 0) && (sensor[3] == 1) && (sensor[4] == 0)) {
error = 1;// 0 0 0 1 0 } else if ((sensor[0] == 0) && (sensor[1] == 0) && (sensor[2] == 1) && (sensor[3] == 0) && (sensor[4] == 0)) {
error = 0;// 0 0 1 0 0 } else if ((sensor[0] == 0) && (s