树莓派c语言 边缘检测,边缘检测 - 树莓派的gpio有什么用_怎么用

本文介绍了如何在树莓派上使用GPIO库进行边缘检测,包括wait_for_edge()和add_event_detect()函数的使用,以及如何设置回调函数来检测引脚状态变化。同时,展示了通过PWM实现LED灯的呼吸灯效果,详细解释了相关代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

边缘检测

边缘是指信号状态的改变,从低到高(上升沿)或从高到低(下降沿)。通常情况下,我们更关心于输入状态的该边而不是输入信号的值。这种状态的该边被称为事件。

先介绍两个函数:

wait_for_edge() 函数。

wait_for_edge()被用于阻止程序的继续执行,直到检测到一个边沿。也就是说,上文中等待按钮按下的实例可以改写为:

channel = GPIO.wait_for_edge(channel, GPIO_RISING, TImeout=5000)

if channel is None:

print(‘TImeout occurred’)

else:

print(‘Edge detected on channel’, channel)

add_event_detect() 函数

该函数对一个引脚进行监听,一旦引脚输入状态发生了改变,调用event_detected()函数会返回true,如下代码:

GPIO.add_event_detect(channel, GPIO.RISING) # add rising edge detection on a channel

do_something()

// 下面的代码放在一个线程循环执行。

if GPIO.event_detected(channel):

print(‘Button pressed’)

上面的代码需要自己新建一个线程去循环检测event_detected()的值,还算是比较麻烦的。

不过可采用另一种办法轻松检测状态,这种方式是直接传入一个回调函数:

def my_callback(channel):

print(‘This is a edge event callback function!’)

print(‘Edge detected on channel %s’%channel)

print(‘This is run in a different thread to your main program’)

GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback)

如果你想设置多个回调函数,可以这样:

def my_callback_one(channel):

print(‘Callback one’)

def my_callback_two(channel):

print(‘Callback two’)

GPIO.add_event_detect(channel, GPIO.RISING)

GPIO.add_event_callback(channel, my_callback_one)

GPIO.add_event_callback(channel, my_callback_two)

注意:回调触发时,并不会同时执行回调函数,而是根据设置的顺序调用它们。

综合例子:点亮LED灯

好了,上面说明了一大堆函数库的用法,那么现在就应该来个简单的实验了。这个实验很简单,点亮一个LED灯。

编写代码之前,首先你需要将led灯的针脚通过杜邦线连接到树莓派的引脚上,比如你可以连接到11号引脚。

新建一个main.py文件,写入如下代码:

import RPi.GPIO as GPIO //引入函数库

import time

RPi.GPIO.setmode(GPIO.BOARD) //设置引脚编号规则

RPi.GPIO.setup(11, RPi.GPIO.OUT) //将11号引脚设置成输出模式

while True

GPIO.output(channel, 1) //将引脚的状态设置为高电平,此时LED亮了

time.sleep(1) //程序休眠1秒钟,让LED亮1秒

GPIO.output(channel, 0) //将引脚状态设置为低电平,此时LED灭了

time.sleep(1) //程序休眠1秒钟,让LED灭1秒

GPIO.cleanup() //程序的最后别忘记清除所有资源

保存,并退出文件。执行python3 main.py,即可观看效果。Ctrl+C可以关闭程序。

此外,不妨也试试其它的函数吧,增强印象。

使用PWM

这个python函数库还支持PWM模式的输出,我们可以利用PWM来制作呼吸灯效果。详情看代码:

import time

import RPi.GPIO as GPIO //引入库

GPIO.setmode(GPIO.BOARD) //设置编号方式

GPIO.setup(12, GPIO.OUT) //设置12号引脚为输出模式

p = GPIO.PWM(12, 50) //将12号引脚初始化为PWM实例 ,频率为50Hz

p.start(0) //开始脉宽调制,参数范围为: (0.0 《= dc 《= 100.0)

try:

while 1:

for dc in range(0, 101, 5):

p.ChangeDutyCycle(dc) //修改占空比 参数范围为: (0.0 《= dc 《= 100.0)

time.sleep(0.1)

for dc in range(100, -1, -5):

p.ChangeDutyCycle(dc)

time.sleep(0.1)

except KeyboardInterrupt:

pass

p.stop() //停止输出PWM波

GPIO.cleanup() //

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值