嵌入式人工智能(6-树莓派4B按键输入控制LED)

1、按键

按键的原理都是一样,通过按键开关的按下导通,抬起断开的情况,GPIO引脚来检测其是否有电流流入。GPIO有input()方法,对于GPIO引脚检测电流,不能让其引脚悬空,否则引脚会受周边环境电磁干扰产生微弱电流,导致GPIO输入时高时低,,当程序不断检测其输入变化时,会发现按键不断地断开闭合,因此解决这个问题,需要采用上拉或下拉电阻将其电平钳位住。

2、上拉电阻

如果是采用上拉电阻,则按键按下,引脚会检测到一个下降沿。如果是采用下拉电阻,则按键按下,引脚会检测到一个上升沿。具体采用上拉还是下拉电阻根据实际情况而定。

3、实验接线图

我这边有独立按键与流水灯模块,采用的是上拉电阻方式,因此不需要自己连接电阻,没有的同学根据上图来接,电阻470欧即可。实现功能,GPIO11接LED,GPIO13和15分别接2个按键Key1和Key2。要求,按下按键一,LED点亮,按下按键二LED熄灭。

4、实验一代码

import RPi.GPIO as GPIO
import time# 指定编号规则为BOARD
GPIO.setmode(GPIO.BOARD)# 设置物理引脚11负责输出电压
GPIO.setup(11, GPIO.OUT)# 关闭警告
GPIO.setwarnings(False)# 设置输入引脚
channel1 = 13
channel2 = 15# 设置GPIO输入模式, 使用GPIO内置的上拉电阻, 即开关断开情况下输入为HIGH
GPIO.setup(channel1, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(channel2, GPIO.IN, pull_up_down=GPIO.PUD_UP)try:GPIO.output(11, GPIO.HIGH) while True:# 如果检测到电平FALLING, 说明开关闭合if GPIO.input(channel1)==GPIO.LOW:GPIO.output(11, GPIO.LOW)if GPIO.input(channel2)==GPIO.LOW:GPIO.output(11, GPIO.HIGH)  # 10毫秒的检测间隔time.sleep(0.01)except Exception as e:print(e)# 清理占用的GPIO资源
GPIO.cleanup()

5、实验二代码

接线和实验一一样,要求按键1按下LED亮,松开LED灭。按键2按下,释放资源,退出程序。这样 如果要中止程序运行,就不用按键盘crtl+ C来中止了。

import RPi.GPIO as GPIO
import time# 指定编号规则为BOARD
GPIO.setmode(GPIO.BOARD)# 设置物理引脚11负责输出电压
GPIO.setup(11, GPIO.OUT)# 关闭警告
GPIO.setwarnings(False)# 设置输入引脚
channel1 = 13
channel2 = 15# 设置GPIO输入模式, 使用GPIO内置的上拉电阻, 即开关断开情况下输入为HIGH
GPIO.setup(channel1, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(channel2, GPIO.IN, pull_up_down=GPIO.PUD_UP)try:GPIO.output(11, GPIO.HIGH) while True:       # 如果检测到电平FALLING, 说明开关闭合if GPIO.input(channel1)==GPIO.LOW:GPIO.output(11, GPIO.LOW)else:GPIO.output(11, GPIO.HIGH)  if GPIO.input(channel2)==GPIO.LOW:GPIO.cleanup()exit()# 10毫秒的检测间隔time.sleep(0.01)# if Led_Flag==True:#     GPIO.output(11, GPIO.LOW)# else:#     GPIO.output(11, GPIO.HIGH)    except Exception as e:print(e)# 清理占用的GPIO资源
GPIO.cleanup()

如果想要按下1亮,再按下1灭,那么需要定义个变量,来改变此变量的值,从而控制LED灯,这里就不再赘述了,不过采用这种轮询的方式检测,会有一些小问题,后续进行改进。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/872205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot之健康监控(Actuator)

1,基本介绍 Spring Actuator 是 Spring Boot 提供的一个扩展模块,用于监控和管理应用程序的生产环境。它通过 HTTP 端点暴露了大量的监控和管理功能,使得开发者可以在运行时查看应用程序的运行状况、配置信息、性能指标等。 主要功能&#…

探索未来视界:LC201小尺寸红外热成像机芯引领行业新变革

在当今科技飞速发展的时代,红外热成像技术正以前所未有的方式革新着诸多行业,而灵卡技术推出的LC201小尺寸红外热成像机芯,正是这一变革的先锋。专为体积和功耗敏感领域设计,LC201以超紧凑的22x22mm尺寸、轻量化设计,及…

什么是边缘计算技术和边缘计算平台?

随着物联网、5G技术和人工智能的不断发展,数据的规模和种类也在快速增加。在这种背景下,传统的云计算模式面临着一些问题,例如延迟高、网络拥塞等,这些问题限制了数据的处理速度和效率,降低了用户的使用体验。为了解决…

【前端】Web控件与数据感应之模板循环输出

在Web开发中,模板循环输出是一种常见且非常有用的技术,它允许开发者根据后端传递的数据集合动态生成HTML内容。这一过程通常通过前端模板引擎或JavaScript库来实现,如Handlebars、Mustache、EJS(在Node.js环境下)以及现…

非对称加解密和签名

非对称加解密特点 一对密钥,公钥和私钥。私钥自己持有,公钥公开给通信的对方。 如果公钥用作加密,那么私钥用作解密。 如果私钥用做加密,那么公钥用作解密。 如果数据量少可用非对称加密算法直接加密。 如果数据量大,…

【Python爬虫教程】第7篇-requests模块的cookies保存和使用

文章目录 为什么要保存cookiesrequests.utils工具类保存cookies到本地文件从本地文件解析cookies使用使用实践 为什么要保存cookies 保存cookies是避免每次都登录获取权限,一遍权限是有过期时间的,不需要每次重复登录,可以将cookies保存起来…

sqlalchemy.orm中validates对两个字段进行联合校验

版本 sqlalchemy1.4.37 需求说明 有个场景,需要在orm中对两个字段进行联合校验,当 col1 xxx’时,对 col2的长度进行检查,超过限制(500)时,进行截断。 网上找了很久,没找到类似的…

MySQL事务隔离级别+共享锁,排他锁,乐观锁,悲观锁

在操作数据库的时候,可能会由于并发问题而引起的数据的不一致性(数据冲突)。 MySQL事务隔离级别 一个事务的执行,本质上就是一条工作线程在执行,当出现多个事务同时执行时,这种情况则被称之为并发事务&am…

AB 罗克韦尔 1796-AFRAME控制器 处理器 模块

AB 罗克韦尔 1796-AFRAME 控制器专为各种工业自动化应用而设计,包括制造,过程控制等。它具有强大的处理器,以及广泛的连接选项,包括以太网,USB和串行端口 AB 罗克韦尔 1796-AFRAME控制器是一款紧凑而功能强大的控制器…

AI算法16-贝叶斯线性回归算法Bayesian Linear Regression | BLR

贝叶斯线性回归算法简介 频率主义线性回归概述 线性回归的频率主义观点可能你已经学过了:该模型假定因变量(y)是权重乘以一组自变量(x)的线性组合。完整的公式还包含一个误差项以解释随机采样噪声。如有两个自变量时…

企业和个人在网络安全方面需承担哪些责任?

企业在网络安全方面的责任 企业在网络安全方面承担着重要的责任,主要包括建立健全网络安全管理体系、制定网络安全政策和规范、加强员工的网络安全意识培训、提高网络安全防护能力等。企业还需要采取有效的技术措施来保护用户数据的安全,如使用加密技术…

华为昇思MindSpore 25天学习打卡-0711

在深入学习和实现深度学习算法时,理解其背后的原理和机制至关重要。通过使用纯Python实现一个简单的神经网络,我们可以更好地理解这些基本概念,而无需依赖诸如PyTorch或TensorFlow等高级深度学习框架。以下是我在编写和研究以上代码时的一些学…

excel系列(二) - 利用 easypoi 快速实现 excel 文件导入导出

一、介绍 在上篇文章中,我们介绍了 apache poi 工具实现 excel 文件的导入导出。 本篇我们继续深入介绍另一款优秀的 excel 工具库:easypoi。 二、easypoi 以前的以前,有个大佬程序员,跳到一家公司之后就和业务人员聊上了&…

springboot项目,指定某些接口不被拦截方法

1、监听器(Interceptor)拦截处理 在 Spring Boot应用中,如果你希望某些请求地址不被监听器(Interceptor)拦截处理,可以通过配置拦截器的路径来实现。拦截器通常用于在请求前后进行处理,比如权限…

Parallels Desktop 19 for Mac(PD19虚拟机)详细图文安装教程分享

Parallels Desktop 19是一款功能丰富、性能强大且易于使用的虚拟机软件,它可以让您在Mac上同时运行多个操作系统,为您提供更大的灵活性和兼容性。 Parallels Desktop 19 for Mac(PD19虚拟机)下载安装包 Parallels Desktop 19 for Mac(PD19虚拟机)详细图…

kubernetes v1.29.6集群部署

文章目录 1、配置hostname2、安装k8s的Runtime2.1、安装Docker2.2 安装cri-dockerd 3、安装k8s3.1、安装k8s组件3.2、初始化k8s3.2.1、拉取k8s相关镜像3.2.2、集群初始化 3.3、安装网络组件calico3.3.1、在线安装calico3.3.2、离线安装calico 3.4、节点加入 4、部署应用4.1、命…

linux端口,进程管理,主机状态监控

linux端口,进程管理,主机状态监控 一、端口 1、什么是端口?2、端口的划分2、查看端口占用 二、进程 1、什么是进程2、查看进程信息2、关闭进程 三、主机状态监控 1、查看资源占用2、磁盘信息监控3、查看网络情况 四、命令总结 一、端口 1、什么是端口…

电力调度台如何助力电力指挥中心更智慧

在现代电力系统的复杂运行环境中,电力调度台正逐渐成为电力指挥中心实现智慧化管理的关键力量。 电力调度台具备强大的信息集成与处理能力。它能够将来自不同监测系统、传感器和数据源的海量数据汇聚一处,包括电力设备的实时运行状态、电力负荷的动态变化…

springmvc-09

如果想在拦截的方法里面得到从前台传入的参数,怎么得到 在Spring MVC中,可以通过在拦截器中使用HttpServletRequest对象来获取前台传入的参数。通过HttpServletRequest对象,你可以使用getParameter方法获取前台传入的参数值。 以下是一个示例&#xff1…

C++客户端Qt开发——常用控件(输入类控件)

4.输入类控件 ①Line Edit 单行输入框 属性 说明 text 输入框中的文本 input 输入内容格式约束 maxLength 最大长度 frame 是否添加边框 echoMode 显示方式 QLineEdit::Normal:这是默认值,文本框会显示输入的文本。 QLineEdit::Password&…