查看: 1409|回复: 2

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

[复制链接]
  • TA的每日心情
    慵懒
    前天 10:54
  • 签到天数: 186 天

    连续签到: 2 天

    [LV.7]常住居民III

    发表于 2024-3-17 14:38:39 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 stm1024 于 2024-3-17 15:41 编辑

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

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

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

    这种方式可以用于检测低电平类型的信号,虽然能起到一定的作用,但是肯定不能覆盖更多的情况,例如,如果按下时是高电平呢?
    可以使用如下方式初始化:
    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()
    复制代码
    2024-03-17_145743.jpg

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

    使用道具 举报

  • TA的每日心情
    开心
    2024-8-5 17:13
  • 签到天数: 333 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2024-3-18 09:14:30 | 显示全部楼层
    支持一下大佬
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    前天 10:54
  • 签到天数: 186 天

    连续签到: 2 天

    [LV.7]常住居民III

     楼主| 发表于 2024-3-18 11:15:31 | 显示全部楼层

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

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 07:26 , Processed in 0.127113 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.