使用MicroPython制作红绿灯模拟器

2023-11-14

我们将使用行人步行按钮实现交通信号灯。 该项目与LED配合使用,这使我们能够在代码执行时看到其状态。 对于交通信号灯(也称为刹车灯),我们将使用红色,黄色和绿色的LED来匹配交通信号灯上的相同颜色的灯。 我们还将使用红色和黄色的LED来表示“请勿行走”(红色)和“行走”(黄色)指示灯。

我们将使用按钮(也称为瞬时按钮),因为它仅在按下时才触发(打开)。 释放后,它不再被触发(关闭)。 触发是用于描述按钮状态的词,其中“触发”表示从按钮的一侧到另一侧的连接已连接(打开)。 保持触发(锁定)的按钮称为闩锁按钮,通常必须再次按下该按钮才能将其关闭。

我们将首先打开绿色交通信号灯LED和红色步行LED信号,以模拟交通信号灯和步行信号。 这是我们将要使用的正常状态。 当按下按钮时,交通信号灯将变成黄色几秒钟,然后变成红色。 几秒钟后,步行信号将变为黄色,几秒钟后将开始闪烁。 再过几秒钟后,步行信号将循环回到红色,交通信号灯变为绿色。

为了使事情变得更加有趣,我们还将看到如何修改该项目,以便使用从网页模拟的按钮。 我们将看到如何通过网络远程控制硬件和代码。 如果使用的Pyboard或其他不具有任何联网功能的MicroPython板,则将需要一个网络模块。 在我们开发项目时,我们将重新修改Pyboard的网络。

零件需求

设置硬件

尽管有很多电线需要使用WiPy进行连接,而对于Pyboard则需要更多,但我们将使用的组件很容易插入面包板上。

使用WiPy的接线图

使用Pyboard的接线图

代码编写

现在该为我们的项目编写代码了。我们将分两部分编写代码。 在第一部分中,我们将看到如何编写代码来模拟人行横道按钮和交通信号灯。 在第二部分中,我们将放弃使用硬件按钮,而是使用Web浏览器来远程控制按钮动作。

正如您将看到的,第2部分将重用第一部分中的大多数代码,但使用HTML服务器代码会更加复杂。 让我们从项目的第一部分开始。

第1部分:交通信号灯模拟器–使用按钮

该项目的第1部分的代码将需要监视按钮,并在按下按钮时如上所述循环照明。 我们还需要代码来初始化将LED设置为初始熄灭的LED。 我们可以编写用于监视按钮和循环LED的函数。 我们将使用中断将按钮的函数绑定到硬件,以便避免使用轮询循环。

导入

设置

该项目的设置代码将需要初始化按钮和LED实例,然后关闭所有LED(以防万一),并打开绿色的停车灯LED和红色的步行信号LED。 下面显示了设置和初始化的代码。

函数

该项目的这一部分需要两个函数。 首先,我们需要一个循环灯光的函数。 其次,我们需要一个监视按钮按下的功能。 让我们看一下循环灯的函数。

我们将自行车灯函数命名为cycle_lights()。 回想一下,我们需要控制灯光如何改变状态。 如前所述,我们以特定的周期进行此操作。 概括地说,当我们要模拟按下步行请求按钮时更改红绿灯时调用此函数。 因此,将从按钮的代码中调用此函数。

下面显示了cycle_lights()按钮的代码。 如您所见,代码非常简单。 唯一棘手的部分可能是用于使黄色步行LED闪烁的循环。

我们将按钮函数命名为button_pressed()。 此函数用作按钮按下中断的回调。 从技术上讲,我们告诉MicroPython将这种方法与pin中断相关联,但稍后我们会看到。 但是,此函数还有另一个元素需要说明。

当我们使用按钮之类的组件并且用户(您)按下按钮时,按钮中的触点不会立即从关闭状态变为打开状态。 在很小的时期内,读取的值不稳定。 因此,我们不能简单地说“引脚何时变高”,因为在引脚上读取的值可能会迅速从低变高(或从高变低)。 这称为弹跳。 我们可以使用代码(以及其他技术)人为地克服这种情况-称为去反弹。

在这种情况下,我们可以检查随时间变化的引脚(按钮)的值,并且仅当该值在此期间保持稳定时,才“触发”按钮按下。下面给出了用于去反弹的代码。 注意,在循环中,我们等待值50毫秒。 如果触发器足够长,我们调用cycle_lights()函数。

最后,当板子检测到中断时,我们需要设置按钮以调用button_pressed()函数。 下面在WiPy上设置回调函数。

第1部分完整代码

测试项目的这一部分需要将源代码文件复制到板上,然后执行它。 由于代码是在没有run()函数的情况下编写的,因此只需导入即可运行代码。 板上电前,请务必检查所有连接。 回想一下,一旦连接到开发板,我们将用于导入和运行代码的命令如下所示。

导入后,代码将运行,您可以按按钮查看灯光在各个阶段中的循环。 如果看不到任何指示灯亮(绿色刹车灯和红色步行信号应亮起),请检查设置和初始化代码。 如果按下按钮时灯不亮,请检查按钮的代码以确保正确无误。 如果它们没有按顺序点亮,则可能是插针接线错误。 遇到问题时,请务必检查所有接线,在断开或重新连接任何电线或组件之前,请务必先关闭电路板的电源。

第2部分:使用HTML远程控制

该部分的代码将使用第一部分中的所有代码,但我们不需要按钮的代码。 相反,我们将使用Socket类创建一个侦听器,以侦听来自Web浏览器的连接。 该代码将向客户端发送一个基于HTML的简短响应(一个简单的网页),该响应包含一个包含两个按钮的表单:一个按钮用于漫游请求,另一个按钮用于关闭服务器代码。 侦听器将在端口80上侦听。

导入

设置

无线网络设置

HTML响应字符串

函数

run()函数

第2部分完整代码(WiPy&Pyboard)

控制Web界面

详情参阅 - 亚图跨际

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用MicroPython制作红绿灯模拟器 的相关文章

  • Jetpack Compose多平台用于Android和IOS

    JetBrains和外部开源贡献者已经努力工作了几年时间来开发Compose Multiplatform 并最近发布了适用于iOS的Alpha版本 自然地 我们对其功能进行了测试 并决定通过使用该框架在iOS上运行我们的Dribbble复制
  • Matlab中求数据概率分布的方法

    一 问题描述 对已有的一些列数据进行分析 想得到该数据的分布和统计特性 如概率密度函数 概率分布 累计概率密度等等 例如 已有一段时间的声音测量数据 求该数据的分布特性 并给出噪声的95 置信区间统计参数以表征该声音监测数据的总体水平 二
  • HTTP响应的结构是怎么样的?

    HTTP响应由三部分组成 状态行 响应头 响应正文 状态行 包括协议版本的Version 状态码 Status Code 回应短语 响应头 包括搭建服务器的软件 发送响应的时间 回应数据的格式等信息 响应正文 就是响应的具体数据 HTTP请

随机推荐

  • PROJ.4学习——初识PROJ

    PROJ 4介绍 初始认识 前言 PROJ是一个通用的坐标转换软件 它将地理空间坐标从一个坐标系转换为另一个坐标系 这包括地图投影和大地坐标变换 PROJ包含命令行应用程序 可以方便地从文本文件或直接从用户输入转换坐标 除了命令行实用程序之
  • eclipse安装教程(2021最新版)超级易懂到吐血

    第一步 下载JDK 下载地址 http www oracle com technetwork java javase downloads index html 第二步 根据自己电脑的系统 选择相应的版本x64代表64位 x86代表32位 点
  • 螺杆真空泵安装流程图_螺杆式真空泵基本知识送给刚入行的新朋友

    螺杆式真空泵是容积式真空泵中的新兴成员 出现于上世纪90年代前后 发展较晚 但作为一种理想干泵 螺杆式真空泵在面世后获得了快速发展 现在就跟小编去了解一下它的基本知识吧 一 螺杆式真空泵特点 螺杆式真空泵脱胎于螺杆式压缩机与螺杆液体输送泵
  • 精英反向与二次插值改进的黏菌算法-附代码

    精英反向与二次插值改进的黏菌算法 文章目录 精英反向与二次插值改进的黏菌算法 1 黏菌算法 2 改进黏菌算法 2 1 精英反向学习机制 2 2 二次插值方法 3 实验结果 4 参考文献 5 Matlab代码 6 python代码 摘要 针对
  • 关于集合Collection

    集合框架 概念 1 Collection是所有集合的顶级接口 2 集合和数组一样 可以保存一组元素 并且提供了操作元素的相关方法 使用更方便 3 Collection 下面有多种实现类 因此我们有更多的数据结构可以选择 Collection
  • 蓝桥杯2020年第十一届省赛真题-子串分值

    题目 题目链接 题解 思维 考虑每个字符对最终答案的贡献 每个字符的贡献为其左侧连续与之不相同的字符个数 1乘以其右侧与之不相同的字符个数 1 样例 ababc 第一个字符a的贡献 0 1 1 1 2 a ab 第二个字符b的贡献 1 1
  • Java使用poi-tl1.9.1生成Word文档的几个小技巧

    目录 前言 一 poi tl简介 1 什么是poi tl 2 常见的word生成对比 3 poi tl功能点 二 poi tl文档生成 1 模板准备 2 目标参数填充 3 生成效果 三 可能会遇到的问题 1 混合图表生成报错 2 图表参数设
  • Linux /etc/resolv.conf DNS服务器IP地址修改被覆盖问题

    为了临时修改DNS服务器IP地址 可能会选择手动修改 etc resolv conf 文件 而在重启Network Manager服务后 sudo systemctl restart NetworkManager resolv conf 文
  • mvc三层架构(用户信息管理系统)

    mvc三层架构 实战项目 用户信息管理系统 一 三层架构 View 层 用于接收用户提交请求的代码 Service 层 系统的业务逻辑主要在这里完成 Dao 层 直接操作数据库的代码 二 三层架构图 三 用户信息管理系统 利用MVC三层架构
  • 金蝶K3客户端:组件KdSvrMgr无法正常工作 排查分析步骤

    远程组件配置工具无法测试通过 并出错 对于以上错误 在其他的地方还会表现为 拒绝的权限 这样子的信息 其实问题实质是一样的 分析如下 1 远程中间层机器和本机网络不通 可以使用ping命令确认是否网络通畅 如果网络通了还是问题依旧 进入分析
  • LeetCode 448. Find All Numbers Disappeared in an Array

    原题网址 https leetcode com problems find all numbers disappeared in an array Given an array of integers where 1 a i n n siz
  • 多项式与快速傅里叶变换(FFT)

    上次算导老师讲分治高精度乘法 n 1 8左右的复杂度 并且说acm里就有这个 然后我小声bb说acm里高精度快速乘是nlogn的 然后一阵虚因为自己不会FFT 今天算法课又提到了并且我和同学吹牛快速傅里叶变换只要nlogn巴拉巴拉 然后又一
  • 使用kubebuilder结合code-generator开发k8s controller(1)

    为了开了controller 先后分析和尝试了几周 现把步骤和踩的坑记录分享一下 使用kubebuilder结合code generator开发k8s controller 1 使用kubebuilder结合code generator开发
  • 查看matlab中函数源代码的方法

    有几种方法可以实现查看matlab里自带函数的源代码 在命令窗口中输入 1 type 函数名 如 type rgb2gray 或者 type rgb2gray m 即可在命令窗口中显示此函数的源代码 2 open 函数名 如 open rg
  • 数据结构与算法--用c语言建立顺序表以及其相关操作

    一 线性表的介绍 线性表分为顺序表和单链表 线性表是数据结构最基础的结构之一 他们与栈 队列 串和数组都属于线性结构 由n个 n gt 0 个数据特性相同的元素构成的有限序列称为线性表 n称为线性表的长度 n 0时称为空表 对于非空的线性表
  • (UE4 4.20 ) UE4的Actor生命周期(1) 之 SpawnActor , SpawnActorDeferred 产生 Actor 和 AActor 初始化的执行流程

    在https docs unrealengine com en us Programming UnrealArchitecture Actors ActorLifecycle 官方的编程文档中 UE4官方给出了有关Actor生命周期的宝贵资
  • 如何用Python写一个爬虫

    在当今的互联网时代 网络爬虫已经成为了一种非常重要的技术手段 通过爬虫 我们可以快速地获取大量的数据并进行分析 这对于很多行业都非常有帮助 在本篇文章中 我们将详细介绍如何用Python写一个爬虫 1 爬虫的基本原理 在开始编写爬虫之前 我
  • C++类属(泛型)——模板详解

    第八章 类属 泛型 模板 1 概述 在程序设计中经常会用到这样的一些程序实体 这些程序实体的实现和所完成的基本功能相同 不同的地方仅在于它们所涉及的数据类型不同 对于这些函数或类 如果能分别只用一个函数和一个类来描述它们 将会大大简化程序设
  • 设置openEuler(欧拉系统)安装源

    在安装openEuler时 完整的 ISO映像 使用的是ISO的源一般不用设置安装源 安装netinst版需要连网下载文件 所以需要设置安装源 下面将按照提示一步步配置 先设置网络连网 然后点完成 选择硬盘 默认自动分区 添加安装源 官方列
  • 使用MicroPython制作红绿灯模拟器

    我们将使用行人步行按钮实现交通信号灯 该项目与LED配合使用 这使我们能够在代码执行时看到其状态 对于交通信号灯 也称为刹车灯 我们将使用红色 黄色和绿色的LED来匹配交通信号灯上的相同颜色的灯 我们还将使用红色和黄色的LED来表示 请勿行