基于RTOS的智能交通灯设计方法
if(FLAG1-flag1==1||FLAG2-flag2==1||FLAG3-flag3==1||FLAG4-flag4=1)//若某一车道有车通过
{
记录有车通过的车道;
os_send_signal(job3);//向流量统计与违章监测任务发出信号
}
FLAG1=flag1;FLAG2=flag2;FLAG3=flag3;FLAG4=flag4;//当前标识位成为前一标识位
各计数器恢复初值;
os_wait(100ms);
}
}
(3)流量统计与违章监测任务
在接收到任务2发来的信号后,根据其提供的车道记录及该车道的当前显示情况,实现流量统计或违章监测的功能。
voidjob3()_task_job3{
while(1){
os_wait(K_SIG,0,0);
if(1a||1b车道有车通过){
if(当前为红灯)启动数码相机抓拍,并读取实时时钟当前时间;
elseN1++;//在绿灯持续时间内对通过车辆计数
}
else若当前为红灯,启动数码相机抓拍,并读取时间。3c、4c违章监测
}
}
(4)显示任务
图2十字路口典型通行顺序示意图
在外接的LED上分别显示四个车道方向箭头和人行横道的红绿灯,以及1a-1b车道剩余时间。最初的窗口时间由上位机给定。该显示值每秒钟刷新一次。
Voidjob4()_task_job4{
t1=T1;//T1为上位机给定绿灯窗口时间
while(1){
各路口方向箭头、人行横道红绿灯显示及1a、1b车道剩余时间(t1)显示;
os_wait(1000ms);//1s刷新
t1--;
if(t1==0)
{os_create_task(job6);//若时间到,创建通信任务
os_delete_task(job4);}//删除显示任务
}
}
(5)看门狗复位任务
定期对看门狗进行复位,表明程序正常运行。
(6)通信任务
当时间到时,根据当前情况进行红绿灯显示切换若1a、1b当前为绿灯,则时间到后通知上位机,并将统计的车流量经串行口传送给上位机,由上位机触发下一组绿灯显示;右1a、1b当前为红灯,则时间到后等待上位机触发信号。这样由上位机统一调度,可以避免各下位机各自为政所造成的时间差。由于通信任务对时间特性的要求很高,所以应将通信任务设为高优先级。
Voidjob6()_task_job6_prority_1{
if(绿灯时间间到){
V1=N1*60/(2*T1);//N1表示1a、2b车道在T1时间内通过的车辆总和,V1为该绿灯周期内两个车道平均每分钟车流量
将V1值传送上位机;
N1清0;
1a、1b、3c、2p转红色显示;
}
if(红灯时间到){
os_wait(K_SIG,0,0);//等待上位机信号
根据上位机计算数据更新T1;
1a、1b、4c、2p转绿色显示;
}
os_create_task(job4);//创建显示任务
os_delete_task(job6);//删除自身
}
2.2上位机设计
上位机主要完成人机交互的功能。它外接一个字符型LCD显示器和键盘。LCD显示器在睡眠状态下显示各路口的当前绿灯窗口时间。当有键盘响应时,作相应的辅助显示。
本系统的键盘采用9按键输入。当主车道上有紧急车辆(如警车、消防车或急救车等 《基于RTOS的智能交通灯设计方法(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/172382.html
{
记录有车通过的车道;
os_send_signal(job3);//向流量统计与违章监测任务发出信号
}
FLAG1=flag1;FLAG2=flag2;FLAG3=flag3;FLAG4=flag4;//当前标识位成为前一标识位
各计数器恢复初值;
os_wait(100ms);
}
}
(3)流量统计与违章监测任务
在接收到任务2发来的信号后,根据其提供的车道记录及该车道的当前显示情况,实现流量统计或违章监测的功能。
voidjob3()_task_job3{
while(1){
os_wait(K_SIG,0,0);
if(1a||1b车道有车通过){
if(当前为红灯)启动数码相机抓拍,并读取实时时钟当前时间;
elseN1++;//在绿灯持续时间内对通过车辆计数
}
else若当前为红灯,启动数码相机抓拍,并读取时间。3c、4c违章监测
}
}
(4)显示任务
图2十字路口典型通行顺序示意图
在外接的LED上分别显示四个车道方向箭头和人行横道的红绿灯,以及1a-1b车道剩余时间。最初的窗口时间由上位机给定。该显示值每秒钟刷新一次。
Voidjob4()_task_job4{
t1=T1;//T1为上位机给定绿灯窗口时间
while(1){
各路口方向箭头、人行横道红绿灯显示及1a、1b车道剩余时间(t1)显示;
os_wait(1000ms);//1s刷新
t1--;
if(t1==0)
{os_create_task(job6);//若时间到,创建通信任务
os_delete_task(job4);}//删除显示任务
}
}
(5)看门狗复位任务
定期对看门狗进行复位,表明程序正常运行。
(6)通信任务
当时间到时,根据当前情况进行红绿灯显示切换若1a、1b当前为绿灯,则时间到后通知上位机,并将统计的车流量经串行口传送给上位机,由上位机触发下一组绿灯显示;右1a、1b当前为红灯,则时间到后等待上位机触发信号。这样由上位机统一调度,可以避免各下位机各自为政所造成的时间差。由于通信任务对时间特性的要求很高,所以应将通信任务设为高优先级。
Voidjob6()_task_job6_prority_1{
if(绿灯时间间到){
V1=N1*60/(2*T1);//N1表示1a、2b车道在T1时间内通过的车辆总和,V1为该绿灯周期内两个车道平均每分钟车流量
将V1值传送上位机;
N1清0;
1a、1b、3c、2p转红色显示;
}
if(红灯时间到){
os_wait(K_SIG,0,0);//等待上位机信号
根据上位机计算数据更新T1;
1a、1b、4c、2p转绿色显示;
}
os_create_task(job4);//创建显示任务
os_delete_task(job6);//删除自身
}
2.2上位机设计
上位机主要完成人机交互的功能。它外接一个字符型LCD显示器和键盘。LCD显示器在睡眠状态下显示各路口的当前绿灯窗口时间。当有键盘响应时,作相应的辅助显示。
本系统的键盘采用9按键输入。当主车道上有紧急车辆(如警车、消防车或急救车等 《基于RTOS的智能交通灯设计方法(第2页)》