如何保持用户输入的定时计数(来自按钮)?

时间:2016-02-21 17:03:04

标签: python raspberry-pi

我正在使用Raspberry Pi 2和面包板制作一个莫尔斯电码解释器。电路是一个简单的按钮,按下时会点亮LED。如何使用函数来计算按钮的按下时间?

1 个答案:

答案 0 :(得分:0)

你没有提供足够的电路细节来确定你的特定用例,所以我建议如下(我将以我的代码为基础):

  • 将LED(带串联电阻)连接到GPIO 12
  • 在GPIO 11和3.3V电压轨之间连接一个10k电阻(用作上拉电阻)
  • 连接GPIO 11和接地(0V)之间的按钮。

然后我会编写代码来监控引脚并将每次按下的时间记录到列表中。您可以按相同的顺序读出值,这样您就可以处理时间并从中解释代码。

import RPi.GPIO as GPIO
import time

# set up an empty list for the key presses
presses = []

# set up the GPIO pins to register the presses and control the LED
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)
GPIO.setup(11, GPIO.IN)

# turn LED off initially
GPIO.output(12, False)

while True:
    # wait for input to go 'low'
    input_value = GPIO.input(11)
    if not input_value:
        # log start time and light the LED
        start_time = time.time()
        GPIO.output(12, True)
        # wait for input to go high again
        while not input_value:
            input_value = GPIO.input(11)
        else:
            # log the time the button is un-pressed, and extinguish LED
            end_time = time.time()
            GPIO.output(12, False)
            # store the press times in the list, as a dictionary object
            presses.append({'start':start_time, 'end':end_time})

你将看到一个如下所示的列表:

  

[{start:123234234.34534,end:123234240.23482},{start:123234289.96841,end:123234333.12345}]

您在此处看到的数字以秒为单位(这是您的系统时间,自纪元以来以秒为单位)。

然后你可以使用for循环遍历列表中的每个项目,从开始时间减去每个结束时间,当然从上一个结束时减去下一个按下的开始,这样你就可以根据印刷机之间的间隙组装字符和单词。玩得开心: - )