[评测分享]
【树莓派5测评】 06.GPIO操作2
#板卡评测
 
2336 人阅读
|
2 人回复
|
2024-03-17 
 
 
 
 
TA的每日心情  | 慵懒 2025-8-6 21:07 | 
|---|
 
  签到天数: 313 天 连续签到: 1 天 [LV.8]以坛为家I 
状元 
 
 
	- 积分
 - 5300
 
 
 
 
 | 
 
 
 本帖最后由 stm1024 于 2024-3-17 15:41 编辑  
 
前面测试了GPIO作为输出,控制LED亮灭的操作,当然就会有输入的问题,其实和GPIO输出一样,同样用到了gpozero库,只是需要使用的是button类,下面是实现方法。在编辑器Geany中编写如下代码,然后保存为ioinput.py,然后运行: 
- from gpiozero import Button
 
  复制代码 
用一根杜邦线连接,如下图(不用在意这个扩展板): 
 
杜邦线的一端连接GPIO4号通道,然后另外一端,分别连接和断开GND,会显示不同的状态,如下图所示: 
 
这种方式可以用于检测低电平类型的信号,虽然能起到一定的作用,但是肯定不能覆盖更多的情况,例如,如果按下时是高电平呢? 
可以使用如下方式初始化: 
- button = Button(4,pull_up=False)
 
  复制代码 这时,如果杜邦线与3V3连接,则会显示pressed,否则显示Released。 
另外一个问题是,这种方式还是使用的是轮询方式,实时性不好,可以使用wait_for_press()函数,阻塞进程: 
- from gpiozero import Button
 
 - from time import sleep
 
 - button = Button(4,pull_up=False)
 
 - x=0;
 
 - while True:
 
 -     button.wait_for_press()
 
 -     x=x+1
 
 -     print("button pressed! %d" % (x))
 
 
  复制代码 这样的话,没有按下时,会阻塞,但是按下时,会飞速计数,这样也不好,如何实现类似中断的方式呢?再增加一个wait_for_release()方法: 
- from gpiozero import Button
 
 - from time import sleep
 
 - button = Button(4,pull_up=False)
 
  
- x=0
 
 - while True:
 
 -     button.wait_for_press()
 
 -     x=x+1
 
 -     print("button pressed! %d" % (x))
 
 -     button.wait_for_release()
 
  复制代码 
这样在按下并保持的时候,如果不松开,则会阻塞在wait_for_release()这里,只有真正释放按键以后,才可以继续下一轮循环。当然,如果要做的更好的话,可能还得加点延时消抖啥的。 
 |   
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
TA的每日心情  | 开心 2025-9-22 14:13 | 
|---|
 
  签到天数: 335 天 连续签到: 1 天 [LV.8]以坛为家I 
状元 
 
 
	- 积分
 - 8299
 
 
  
 
 | 
沙发
 
 
xiaoshen-372360 
 
发表于 2024-3-18 09:14:30
|
只看该作者
 
 
 
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
TA的每日心情  | 慵懒 2025-8-6 21:07 | 
|---|
 
  签到天数: 313 天 连续签到: 1 天 [LV.8]以坛为家I 
状元 
 
 
	- 积分
 - 5300
 
 
 
 
 | 
板凳
 
 
stm1024 
 
发表于 2024-3-18 11:15:31
|
只看该作者
 
 
 
 
 
 
 
感谢大佬的支持,共同学习进步  |  
     
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 |