Raspberry pi RPi引脚被静电绊倒?

Raspberry pi RPi引脚被静电绊倒?,raspberry-pi,external,hardware,Raspberry Pi,External,Hardware,我正在编写一个程序,它将运行一个计时器,直到用户将一根电线插入两个端口并按下一个大的红色按钮。在家里,我的程序运行得很好,但是当许多人在同一个房间里时,他们可以通过触摸端口来停止计时器。这有点问题,我不知道如何应对 简而言之,我的GPIO引脚设置如下: def pressBigButton(pin): self.paused = 1 self.label.configure(fg='#FFFFFF')self.switchPin = 4 GPIO.setup(s

我正在编写一个程序,它将运行一个计时器,直到用户将一根电线插入两个端口并按下一个大的红色按钮。在家里,我的程序运行得很好,但是当许多人在同一个房间里时,他们可以通过触摸端口来停止计时器。这有点问题,我不知道如何应对

简而言之,我的GPIO引脚设置如下:

def pressBigButton(pin):
        self.paused = 1
        self.label.configure(fg='#FFFFFF')self.switchPin = 4

GPIO.setup(self.switchPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(self.switchPin,GPIO.FALLING)
GPIO.add_event_callback(self.switchPin,pressBigButton)
据我所知,这应该设置引脚高电压,并应下降时,用户按下按钮。我的希望是,这将消除静电导致电压峰值的可能性,使计时器过早跳闸。此外,我将端子连接到GND引脚,但这似乎没有帮助

我可能有些符号弄错了。抱歉

如果你需要完整的代码,我这里有

import Tkinter as tk
from Tkinter import *
import RPi.GPIO as GPIO
import math
import time

class ExampleApp(tk.Tk):
    def __init__(self):        
        tk.Tk.__init__(self)

        # make it cover the entire screen
        w, h = self.winfo_screenwidth(), self.winfo_screenheight()
        self.attributes("-fullscreen", True)
        self.geometry("%dx%d+0+0" % (w, h))

        self.label = tk.Label(self, text="", width=9, height=3, font=("Courier Bold", 160), fg='brown', bg='black')
        self.label.pack()
        self.startTime=time.time()
        print "startTime", time.time()
        #self.total can be changed to alter the timer's length, but it should never be changed in runtime
        #Default = 3600
        self.total = 3600
        self.remaining = self.total
        #timerMode 1 = standard clock, 2 = percentage
        self.timerMode = 2
        self.paused = 1

        def pressSpace(event):
            if(self.paused == 0 and self.remaining > 0):
                self.paused = 1
                self.label.configure(fg='#FFFFFF')
            else:
                self.paused = 0
                self.label.configure(fg='#0000FF')
                self.mainLoop()

        def pressEsc(event):
            if(self.paused == 1):
                self.destroy()

        def pressBigButton(pin):
            self.paused = 1
            self.label.configure(fg='#FFFFFF')

        #bind spacebar to pause the timer
        self.bind("<space>", pressSpace)

        #bind Esc to kill the process
        self.bind("<Escape>", pressEsc)

        #initialize GPIO pin
        self.switchPin = 4
        GPIO.setup(self.switchPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
        GPIO.add_event_detect(self.switchPin,GPIO.FALLING)
        GPIO.add_event_callback(self.switchPin,pressBigButton)
        self.pinStatus = GPIO.input(self.switchPin)

        self.setTime() #sets the initial clock before unpausing
        self.mainLoop()

    def mainLoop(self):        

        if self.remaining <= 0:
            #Time has expired. Players lose
            self.paused = 1
            self.label.configure(text="TIME!", font=("Courier Bold", 160), fg='#000000', bg='#FF0000')
        else:
            #There is still time on the clock. Check if player has flipped the switch to stop the timer
            if not(GPIO.input(self.switchPin)):
                self.paused = 1
                self.label.configure(fg='white')

            strTimer = self.setTime()
            self.label.configure(text= strTimer)
            if(self.paused == 0): #Check if the timer is toggled to pause
                self.remaining = self.remaining - 1
                self.after(1000, self.mainLoop)
                #time.sleep(1.0 - ((time.time() - self.startTime) % 1.0))
                self.setColor()

    def setColor(self):
        fremaining = (1.0*self.remaining)
        blueDown = self.twoDigitHex(255*(fremaining/self.total))
        redUp = self.twoDigitHex(255-(255*(fremaining/self.total)))
        color = "#" + redUp + "00" + blueDown
        self.label.configure(fg=color)

    def twoDigitHex(self, number):
        return '%02x' % number

    def setTime(self):
        if(self.timerMode == 1):
            #STANDARD CLOCK
            #creates a readout of constant length regardless of significant digits
            h = str(math.trunc(self.remaining/3600))
            remainder = (math.trunc(self.remaining % 3600))
            m = str(remainder / 60)
            s = str(remainder % 60)

            time = []
            index = 0
            time.append(h)
            time.append(m)
            time.append(s)
            for i in time:
                if (len(i)==1):#If a number is 1 digit, make it 2 digits
                    time[index] = ('0' + i)
                index += 1
            if(time[0] == '01'):
                return ('1:' + time[1] + ':' + time[2])
            elif(time[0] == '00' and time[1] != '00'):
                return (time[1] + ':' + time[2])
            elif(time[0]== '00' and time[1]== '00'):
                return (time[2])
            else:
                return (time[0] + ':' + time[1] + ':' + time[2])

        elif(self.timerMode == 2):
            #PERCENT CLOCK
            percent = (100*(self.remaining / (self.total*(1.0))))
            return(str('%.1f%%' % percent))

if __name__ == "__main__":
    GPIO.setmode(GPIO.BCM)
    app = ExampleApp()
    app.mainloop()
    GPIO.cleanup()
将Tkinter作为tk导入
从Tkinter进口*
将RPi.GPIO导入为GPIO
输入数学
导入时间
类示例应用程序(tk.tk):
定义初始化(自):
tk.tk.\uuuuu初始化(self)
#让它覆盖整个屏幕
w、 h=self.winfo_屏幕宽度(),self.winfo_屏幕高度()
self.attributes(“-fullscreen”,True)
自几何体(“%dx%d+0+0”%(w,h))
self.label=tk.label(self,text=,width=9,height=3,font=(“Courier Bold”,160),fg='brown',bg='black')
self.label.pack()
self.startTime=time.time()
打印“开始时间”,time.time()
#self.total可以更改以更改计时器的长度,但决不能在运行时更改
#默认值=3600
self.total=3600
self.remaining=self.total
#timerMode 1=标准时钟,2=百分比
self.timerMode=2
self.paused=1
def压力空间(事件):
如果(self.paused==0且self.remaining>0):
self.paused=1
self.label.configure(fg='#FFFFFF')
其他:
self.paused=0
self.label.configure(fg='#0000FF')
self.mainLoop()
def pressEsc(事件):
如果(self.paused==1):
自我毁灭
def PRESSBIG按钮(pin):
self.paused=1
self.label.configure(fg='#FFFFFF')
#绑定空格键以暂停计时器
self.bind(“,按空格)
#绑定Esc以终止进程
self.bind(“”,按Esc)
#初始化GPIO引脚
self.switchPin=4
GPIO.setup(self.switchPin,GPIO.IN,pull\u up\u down=GPIO.PUD\u up)
GPIO.add\u event\u detect(自开关引脚、GPIO.FALLING)
GPIO.add\u事件\u回调(self.switchPin,按BigButton)
self.pinStatus=GPIO.input(self.switchPin)
self.setTime()#在取消暂停前设置初始时钟
self.mainLoop()
def主回路(自):

如果self.remaining我不确定我是否完全理解您的问题,但是如果您可以更改引脚排列和电阻器的位置,您可以将其用作下拉,您需要更改代码以检测上升沿。 所以你必须改变这个:

GPIO.setup(self.switchPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(self.switchPin,GPIO.FALLING)
对此

GPIO.setup(self.switchPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.add_event_detect(self.switchPin,GPIO.RISING)
在电路中,您需要将端子
A
连接到
3.3V
引脚,而不是
GND
引脚,然后拆下10k电阻器。如果您仍然得到错误的结果,您可以尝试将10k电阻器连接到
GND
,在这种情况下,将输入引脚连接到引脚
4

我没有足够的代表发布图片,但以下是链接: (忽略连接器上针脚1和针脚2的标签,它只是我能很快找到的唯一一个)
希望这有帮助

我不确定是否完全理解您的问题,但如果您可以更改引脚排列和电阻器的位置,您可以将其用作下拉,您需要更改代码以检测上升沿。 所以你必须改变这个:

GPIO.setup(self.switchPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(self.switchPin,GPIO.FALLING)
对此

GPIO.setup(self.switchPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.add_event_detect(self.switchPin,GPIO.RISING)
在电路中,您需要将端子
A
连接到
3.3V
引脚,而不是
GND
引脚,然后拆下10k电阻器。如果您仍然得到错误的结果,您可以尝试将10k电阻器连接到
GND
,在这种情况下,将输入引脚连接到引脚
4

我没有足够的代表发布图片,但以下是链接: (忽略连接器上针脚1和针脚2的标签,它只是我能很快找到的唯一一个) 希望这有帮助