void Tracking(void) //白0 黑1 { static u8 t1 = 0; static u8 t2 = 0; if((left_led == 0)&&(right_led == 0)&&(zhong_led == 1)) //全是白线,或中间检测到黑线 { t1 = 0; t2 = 0; forward(); //调用前进函数 } if(t1==1) { if((left_led == 1)&&(right_led == 1)&&(zhong_led == 1)) //全是黑线 { right(); //调用小车右转函数 while(!zhong_led); delay_ms(20); forward(); } if((left_led == 0)&&(right_led == 0)&&(zhong_led == 0)) //全是白线 { right(); //调用小车右转函数 while(!zhong_led); delay_ms(20); forward(); } } if(t2==1) { if((left_led == 1)&&(right_led == 1)&&(zhong_led == 1)) //全是黑线 { left(); //调用小车左转函数 while(!zhong_led); delay_ms(20); forward(); } if((left_led == 0)&&(right_led == 0)&&(zhong_led == 0)) //全是白线 { left(); //调用小车左转函数 while(!zhong_led); delay_ms(20); forward(); } } if((left_led == 1)&&(right_led == 0)) //左边检测到黑线 { left(); //调用小车左转函数 delay_ms(120); while(!zhong_led); delay_ms(20); forward(); t1 = 1; } if((right_led == 1) && (left_led == 0)) //右边检测到黑线 { right(); //调用小车右转函数 delay_ms(120); while(!zhong_led); delay_ms(20); forward(); t2 = 1; } }
时间: 2024-04-03 21:37:15 浏览: 45
这是一个名为`Tracking`的函数,用于小车的自动跟踪。函数中首先定义了两个静态无符号8位整型变量`t1`和`t2`,用于标记是否需要进行左转或右转。接下来根据三个光电传感器的输出判断小车所处的状态,如果三个传感器都检测到白线或中间传感器检测到黑线,则调用`forward()`函数使小车前进。如果`t1`等于1,表示需要进行左转,此时如果三个传感器都检测到黑线,则调用`right()`函数使小车右转,直到中间传感器检测到黑线,然后延时20毫秒再调用`forward()`函数使小车前进。如果三个传感器都检测到白线,则也调用`right()`函数使小车右转,直到中间传感器检测到黑线,然后延时20毫秒再调用`forward()`函数使小车前进。`t2`的处理与`t1`类似,只是调用的是`left()`函数使小车左转。如果左侧传感器检测到黑线,则调用`left()`函数使小车左转,延时120毫秒等待小车完成转向,然后等待中间传感器检测到黑线,延时20毫秒后再调用`forward()`函数使小车前进,并将`t1`标记为1。如果右侧传感器检测到黑线,则调用`right()`函数使小车右转,延时120毫秒等待小车完成转向,然后等待中间传感器检测到黑线,延时20毫秒后再调用`forward()`函数使小车前进,并将`t2`标记为1。
阅读全文