我正在将我的覆盆子pi连接到2.4ghz rc接收器,我正在尝试使用python来解释脉冲宽度信号。我正在使用输入引脚来读取没有输入的时间,然后是有输入的时间,然后减去两个。
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(13,GPIO.IN)
GPIO.setup(15,GPIO.OUT)
GPIO.output(15,GPIO.HIGH)
start = time.time()
stop = time.time()
x = 0
y = 0
while(x == 0):
if(GPIO.input(13) == 0):
start = time.time()
x = 1
while(y == 0):
if(GPIO.input(13) == 1):
stop = time.time()
y = 1
Width = stop-start
print(Width)
GPIO.cleanup()
我遇到的问题是,无论我使用多长时间制作脉冲宽度(通过手动连接和断开引脚13和15),它都会打印〜.006。在我断开引脚之前它也不会打印,虽然我还没弄清楚原因。
答案 0 :(得分:0)
Pin 13可能正在浮动。我建议你换掉......
GPIO.setup(13,GPIO.IN)
...与......
GPIO.setup(13,GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
以下是如何使用中断执行此操作的示例:
#!/usr/bin/env python3
# example of reading PWM with GPIO interrupts
# Warning: Linux isn't built for real-time applications.
# A Raspberry Pi with Jessie will not produce reliable results
# That said...
import RPi.GPIO as GPIO
import time
GPIOpin_IN = 13
GPIOpin3v3 = 1 # fixed at 3v3 volts
myStart = None
myStop = None
GPIO.setmode(GPIO.BOARD)
GPIO.setup(GPIOpin_IN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
def pinGoesUp(gpioIdentity):
myStart = time.time()
def pinGoesDown(gpioIdentity):
myStop = time.time()
GPIO.add_event_detect(GPIOpin_IN, GPIO.RISING, callback=pinGoesUp)
GPIO.add_event_detect(GPIOpin_IN, GPIO.FALLING, callback=pinGoesDown)
while True:
if myStop < myStart:
Width = stop-start
print(Width)`
另一方面,您将难以获得可靠的读数。 Jessie并不打算提供实时互动,而且经常需要休假来完成其他任务。