基于STEP Pico的嵌入式系统学习平台设计交通灯控制器
利用STEp Pico的嵌入式系统 学习平台完成项目,我选择完成的是交通信号灯控制器的制作,仿真马路上的交通灯的工作状态切换
标签
嵌入式系统
测试
2023寒假在家练
iiqz
更新2023-03-29
北京理工大学
503

制作一个交通灯控制器

1.项目需求

仿真马路上的交通灯的工作状态切换,利用板上的红、黄、绿三种颜色的LED显示道路状态的切换,并具备正常的逻辑,行人按键时,具有优先功能。

利用板上的3个不同颜色的LED模拟交通灯,程序会轮流切换三个灯的状态,并根据按键的输入(中断或查询机制)调整交通灯的切换。

2.完成的功能及达到的性能

正常情况下,绿灯亮5秒,然后转为黄灯警示2秒后,再次转为红灯,亮5秒后转为绿灯(行人视角),此时行人可以通行,在按下按钮k1后,如果此时是红灯,则立马转为黄灯警示车辆,之后转为绿灯,使行人正常通行。

如图所示

Fr9hpTNeZGiZ-BgC9JcixGqZuvWZ

FnqCKbB8_qnfsl83PeetXosPWSy8

Fgue3IizMC-ehJNg810nuKzrMHXa

3.实现思路

首先考虑红绿灯变化的逻辑, 再考虑要添加的功能,然后加入任务给的要求,最后再根据板的功能加以实现。正常情况下红绿灯交替显示,所以得先考虑如何编写代码使板上的灯分别亮出红、绿、黄三种颜色,这部分在教学视频里有具体教过,可以利用for循环依次使板上的12盏灯在短时间内亮起,再添加灯的颜色,然后加入各自工作的时间以及运行逻辑,这样就解决了红绿灯正常情况下的工作状态,再就是任务要求中行人按键优先功能的实现,且必须使用中断实现,这部分可以通过引入button以及定义一个中断k1,当中断按钮按下时,可以判断是否为红灯,如果是,则打断循环,立即执行变黄灯的操作,转而变为绿灯使行人通行,从而实现了正常的交通灯切换以及行人按键优先功能。

4.实现过程

Fq2uVt9ecT-NkqkSQOd1O6inihGq

配置好环境后,首先将软件初始化,再导入button,board等模块,用def定义以及for循环编写三种颜色交通灯,使之按要求在板上点亮,按照正常逻辑编写正常情况下红绿灯的切换,再然后考虑任务要求,使用中断完成行人按键按键优先功能,定义一个k1_callback,设置中断,当按下k1按钮时,实现中断,将中断加在合适的位置上,即但红灯亮起时,行人按下按钮,红灯立马转为黄灯警示过往车辆,随后转为绿灯,行人正常通行。

 

5.主要代码

import time
import ws2812b
from button import button
from machine import Pin
from board import pin_cfg

def k1_callback(pin):
    yellow_light()    
k1=button(pin_cfg.k1,k1_callback,trigger=Pin.IRQ_FALLING)

def red_light():
    for i in range(1,13):
        ws2812b.on(i,"#ff0000")
def yellow_light():
    for i in range(1,13):
        ws2812b.on(i,"#ffff00")
def green_light():
    for i in range(1,13):
        ws2812b.on(i,"#00ff00")

while True:
        red_light()
        time.sleep(7)
        green_light()
        time.sleep(7)
        yellow_light()
        time.sleep(2)

5.遇到的主要难题以及解决办法

环境配置:最开始时,自己摸索着做,弄了半天没弄好,后来经过观看教程以及询问同学,一步步按照指示操作,完成了环境的配置。

编程语言:由于没学过python,担心看不懂代码也不会自己运用到自己的任务中去,后来证明我的担心是多余的,课程中老师讲解的非常详细,甚至每个语句中的每个函数的用法都讲的清清楚楚,并且使用具体案例进行分析,带领我们一步步完成示例中代码的实现,过程中我也逐渐熟悉了一些常用的函数的使用,并且能够跟随老师简单的实现一些功能。在后续的实操环节,我利用已学的知识编出了大体的框架,一些具体的不清楚的函数经过查询资料,反复观看课程,询问同学等方法得以学会,最终利用这门语言完成了任务要求。

调试过程:在调试过程中也遇到了些微的不顺,同样是由于对编程语言的不熟悉造成的,最最重要的,我不能随心所欲的编出我想实现的功能,例如,在观看教学视频后,我想实现视频中交通灯为红色时(车视角,此时行人通行),但行人按下按钮时,红灯延长5秒,使行人更容易通过,且在其他时候按下无效,多次按时,也仅实现一次,再加上绿灯时行人按下另一个按钮,绿灯变为黄灯,警示车辆,随后变为红灯,使行人通行,我尝试利用所学知识将他们加在一起,但产生了紊乱,甚至交通灯也无法正常运行了,经过长时间的调试也无法解决问题后我自知能力有限,换成了更简单的逻辑方法,最终只实现一个功能,在红灯时(行人视角),按键按下变黄灯再变绿灯供行人通行。

6.未来的建议计划

通过这次寒假在家练学习平台的实践活动,我学到了很多东西,同时也总结了很多经验教训。首先就是自身基础的不足,无法利用已学知识快速接纳新知识以及学以致用的能力,这也降低了我整体任务的效率,在此次学习活动过程中,它还锻炼了我的动手能力和独立思考能力,在跟随老师学习的过程中,检测了板子的各种功能,同时也学到了很多知识,遇到阻碍时,通过观看教程,独立思考以及询问的方式解决问题。在未来的学习生活中,我要提高自己的做事效率,首先得打好基础,有良好的理论知识作为保障,遇到一项全新的任务时,也应规划好每一阶段的任务,逼迫自己去学习并吃透那些知识,不懂的地方先思考,实在不懂则去询问,根据任务需求完成每一步,最后,在任务圆满完成后,进行整体的总结回顾,最好写成一遍总结,反思从此次任务学到的东西,任务中遇到的困难以及怎样解决的,此次任务中有没有创新的地方以及能否将此次任务的所学所得用于之后的学习生活中。

附件下载
traffic light.py
团队介绍
张苏 北京理工大学
团队成员
张苏
北京理工大学的大四本科生
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号