脉冲宽度读数器每次打印相同的值

时间:2015-04-16 05:42:05

标签: python raspberry-pi

我正在将我的覆盆子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。在我断开引脚之前它也不会打印,虽然我还没弄清楚原因。

1 个答案:

答案 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)`

documentation on gpio input

另一方面,您将难以获得可靠的读数。 Jessie并不打算提供实时互动,而且经常需要休假来完成其他任务。