Project: 我正在创建一个灯开关面板来控制我的LIFX WiFi灯 . 我有3个按钮连接到GPIO引脚6,20和22,当按下按钮时我正在使用GPIO.add_event_detect进行捕获 .

Problem: 我的问题是,如果我按下一个按钮,有时它会触发一个或多个其他通道 . 例如,按下按钮通道6也将触发20和/或22.奇怪的是,它在80%的时间内完全正常工作,所以我真的不打算在这种情况下开启和关闭大约2周 .

What I've Tried: 最初我制作了一个小型的原型板,我将其焊接到一个40针的头部,我认为有可能有一根电线正在穿过导致这个幻象按钮按下 . 然后我在亚马逊上买了一块20美元的电路板,每个GPIO引脚都有螺丝端子......同样的问题 . 我尝试将我正在使用的GPIO引脚切换到板上,以防万一它们正在穿越 .

我已经尝试更新GPIO库,但我有最新版本 .

我尝试过不同的按钮,看看它们是否有问题 .

我已经检查过按下一个按钮并不会使其他按钮摆动到足以触发它们 .

我已经尝试使用GPIO.input(通道)来查看按钮是否在buttonPressed回调中被按下但是多次没有按下按钮没有按下按钮(即使是我实际按下的按钮) .

我已经尝试删除LIFX lan库和我启动的TCP服务器的其他代码 .

按钮被拧成一块木头,它们之间有几英寸,所以我知道电线没有穿过那里 .

接下来我将尝试换到另一个PI,但我把所有东西拧进一个柜子里很难到达 .

Setup: Raspberry Pi 2 B Python 2.7
enter image description here

Code: 我省略了不相关的代码,以便于阅读

import os
import sys
from time import sleep
import time
import random
import threading
import json
import itertools, glob
from socket import error as SocketError
from TcpClient import *
from lifxlan import BLUE, CYAN, GREEN, LifxLAN, ORANGE, PINK, PURPLE, RED, YELLOW
from itertools import cycle
import RPi.GPIO as GPIO

BUTTON_1 = 6
BUTTON_2 = 20
BUTTON_3 = 22

# Setup Network
HOST = ''
PORT = 9998

GPIO.setmode(GPIO.BCM)
GPIO.setup(BUTTON_1, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(BUTTON_2, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(BUTTON_3, GPIO.IN, pull_up_down=GPIO.PUD_UP)

lifx = None
currentScene = None

def stopScene():
    ...

def setScene(lan, scene):
    ...

def lightsOn(lan):
    ...

def lightsOff(lan):
    ...

class Message(object):
    ...

class Client(threading.Thread):
    ...

class Server(object):
    ...

def buttonPressed(channel):
    global lifx
    global currentScene
    global BUTTON_1
    global BUTTON_2

    print("Button Pressed: " + str(channel));

lifx = LifxLAN(None)
print("Discovering Lights...")
numLights = len(lifx.get_lights())
print("Lights discovered: " + str(numLights))

GPIO.add_event_detect(BUTTON_1, GPIO.RISING, callback=buttonPressed, bouncetime=1000)
GPIO.add_event_detect(BUTTON_2, GPIO.RISING, callback=buttonPressed, bouncetime=1000)
GPIO.add_event_detect(BUTTON_3, GPIO.RISING, callback=buttonPressed, bouncetime=1000)

server = Server(HOST, PORT)
server.start(10)

Example Output: 仅按下按钮6(图中的左按钮)

Discovering Lights...
Lights discovered: 2
[SERVER] Starting...
[SERVER] Listening
Button Pressed: 6
Button Pressed: 20

Example Output: 再次按下按钮6

Discovering Lights...
Lights discovered: 0
[SERVER] Starting...
[SERVER] Listening
Event: 22
Event: 20
Event: 6