2回答

0收藏

[评测分享] 【树莓派5测评】 06.GPIO操作2

#板卡评测 #板卡评测 2336 人阅读 | 2 人回复 | 2024-03-17

本帖最后由 stm1024 于 2024-3-17 15:41 编辑

前面测试了GPIO作为输出,控制LED亮灭的操作,当然就会有输入的问题,其实和GPIO输出一样,同样用到了gpozero库,只是需要使用的是button类,下面是实现方法。在编辑器Geany中编写如下代码,然后保存为ioinput.py,然后运行:
  1. from gpiozero import Button
复制代码

用一根杜邦线连接,如下图(不用在意这个扩展板):

杜邦线的一端连接GPIO4号通道,然后另外一端,分别连接和断开GND,会显示不同的状态,如下图所示:

这种方式可以用于检测低电平类型的信号,虽然能起到一定的作用,但是肯定不能覆盖更多的情况,例如,如果按下时是高电平呢?
可以使用如下方式初始化:
  1. button = Button(4,pull_up=False)
复制代码
这时,如果杜邦线与3V3连接,则会显示pressed,否则显示Released。
另外一个问题是,这种方式还是使用的是轮询方式,实时性不好,可以使用wait_for_press()函数,阻塞进程:
  1. from gpiozero import Button
  2. from time import sleep
  3. button = Button(4,pull_up=False)
  4. x=0;
  5. while True:
  6.     button.wait_for_press()
  7.     x=x+1
  8.     print("button pressed! %d" % (x))
复制代码
这样的话,没有按下时,会阻塞,但是按下时,会飞速计数,这样也不好,如何实现类似中断的方式呢?再增加一个wait_for_release()方法:
  1. from gpiozero import Button
  2. from time import sleep
  3. button = Button(4,pull_up=False)

  4. x=0
  5. while True:
  6.     button.wait_for_press()
  7.     x=x+1
  8.     print("button pressed! %d" % (x))
  9.     button.wait_for_release()
复制代码

这样在按下并保持的时候,如果不松开,则会阻塞在wait_for_release()这里,只有真正释放按键以后,才可以继续下一轮循环。当然,如果要做的更好的话,可能还得加点延时消抖啥的。
分享到:
回复

使用道具 举报

回答|共 2 个

倒序浏览

沙发

xiaoshen-372360

发表于 2024-3-18 09:14:30 | 只看该作者

支持一下大佬
回复 支持 反对

使用道具 举报

板凳

stm1024

发表于 2024-3-18 11:15:31 | 只看该作者


感谢大佬的支持,共同学习进步
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

5300 积分
55 主题
+ 关注
热门推荐
关闭

站长推荐上一条 /3 下一条