[评测分享]
【树莓派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
|
只看该作者
感谢大佬的支持,共同学习进步 |
|
|
|
|
|
|
|
|