同一输入在不同代码上的工作方式不同

时间:2019-08-18 19:51:49

标签: python input raspberry-pi raspberry-pi3 gpio

对于相同的输入,我有2个不同的代码。最基本的一个(knoptest.py(翻译为buttontest.py))可以按预期工作。当我按下按钮时,终端会写“ aan”(翻译为“ on”),直到我放手。但是,在我比较困难的代码(discodouch.py​​(转换为discoshower))中,终端多次写入“ uit”(关闭),大约在1至20倍之间。之后,它会“打开”一次并停留在该位置,即使我没有按下按钮也是如此。

我尝试在硬件方面修复它,但没有任何结果。我还尝试将行从测试文件复制到真实文件,以检查拼写/其他书写错误

knoptest.py:

import time
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)

GPIO.setup(38, GPIO.IN)
GPIO.setup(16, GPIO.OUT)

tijd = 0
GPIO.output(16, 0)

while True:
    GPIO.output(16, 0)
    tijd = 0
    print('uit')
    if GPIO.input(38) == 1:
        GPIO.output(16, 1)
        print('aan')
        while tijd <= 2:
            time.sleep(60)
            tijd = tijd + 1
            print('1 minuuten voorbij')

discodouch.py​​:

document.getElementById('editeur').contentWindow.document.execCommand('insertHTML', false, '<br />');

编译或运行时无错误消息。但是,当我按下按钮时,代码应该跳到“打开状态”。不是在随机的1到20个周期之后。

1 个答案:

答案 0 :(得分:0)

TL; DR

我无法在笔记本电脑上运行您的代码(需要RasPi),但这听起来像是您遇到了一种称为按钮弹跳的现象。当前,您的代码无法解决此问题。

结束TL; DR

基本上,您期望的按钮是理想的按钮。理想按钮仅在您按下按钮时按下一次。一个逼真的按钮(您拥有的按钮)会在弹起状态下逐渐“弹跳”,然后逐渐下降。在Arduino stack exchange上有更多关于此主题的讨论,对该主题进行了更详细的说明。

基本上,您需要对按钮进行反跳操作,以使其看起来像是理想的按钮。您需要使用专门解决此问题的IC,某些软件逻辑,或者在信号输入的串联中使用一个简单的(微型)电容器**,以正确读取按钮的值。

解决此问题的方法有很多,我对您的代码并没有太在意,但我知道,肯定有%100,在可靠地编写程序之前,您需要注意按钮的反跳处理使用按钮,而我在您的代码中看不到。我应该提到,只有在您关心灵敏度和定时的情况下,反跳才很重要,但是我不知道其他方面的应用要求会推荐您。

基本上,在不知道硬件配置的情况下,那是我(或任何人)可以给您的最好的结果。

(如果此答案有帮助,请单击该绿色的复选标记:)

**电容器会自动增加延迟,但会在选择极性之前阻止一堆同时高和低的读数。我建议您连接一个示波器,并亲自了解按钮的输出如何反应。