Raspberry Pi 3 GUI界面按钮和LED灯

问题描述 投票:0回答:1

我的任务包括对Raspberry Pi进行编程,以使2个LED灯通过面包板上的单独按钮打开。然后,我将创建一种远程激活这些灯的方法。

我在第一个文件中遇到的第一个问题是Button1确实打开了绿灯,但它没有一直亮着。 Button2确实打开了红灯,并且一直亮着(我使用了相同的代码,所以有点困惑)。我需要两个灯都保持亮起,直到再次按下各个按钮。

我有第二个问题,我使用Tkinter创建了一个GUI,红色按钮和绿色按钮都亮起绿色。我收到一个错误代码,上面写着:'int'对象不支持项目分配按钮2。我需要GUI上的红色按钮分别对应于红色LED和绿色。

这里是两个文件的代码。我希望有人的眼睛比新手的眼睛更好,可以发现我可能出了问题的地方?在此先感谢:

import RPi.GPIO as GPIO
from time import sleep
GPIO.setwarnings(False)

button1=16
button2=12
LED1=22
LED2=18

GPIO.setmode(GPIO.BOARD)
GPIO.setup(button1,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(button2,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(LED1,GPIO.OUT)
GPIO.setup(LED2,GPIO.OUT)

BS1=False
BS2=False
while(1):
    if GPIO.input(button1)==0:
        print("holiday light 1 activated")
        if BS1==False:
            GPIO.output(LED1,True)
            BS1=True
            sleep(.5)
    else:
            GPIO.output(LED1,False)
            BS1=False
            sleep(.5)
    if GPIO.input(button2)==0:
        print("holiday light 2 activated")
        if BS2==False:
            GPIO.output(LED2,True)
            BS2=True
            sleep(.5)
        else:
            GPIO.output(LED2,False)
            BS2=False
            sleep(.5)

第二文件:

import tkFont
import Tkinter as tk

import RPi.GPIO as GPIO
GPIO.setwarnings(False)

LED1=22
LED2=18

GPIO.setmode(GPIO.BOARD)
GPIO.setup(LED1,GPIO.OUT)
GPIO.setup(LED2,GPIO.OUT)
GPIO.output(LED1,GPIO.LOW)
GPIO.output(LED2,GPIO.LOW)

win = tk.Tk()

myFont = tkFont.Font(family = 'Courier', size = 18, weight = 'bold')



def ledON():
   print("holiday button 1")
   if GPIO.input(18) :
    GPIO.output(18,GPIO.LOW)
    LED1["Ornament"] = "Lights On"

   else:
        GPIO.output(18,GPIO.HIGH)
        LED1["Ornament"] = "Lights Off"


def ledON():
   print("holiday button 2")
   if GPIO.input(22) :
        GPIO.output(22,GPIO.LOW)
        LED2["Ornament"] = "Lights On"

   else:
        GPIO.output(22,GPIO.HIGH)
        LED2["Ornament"] = "Lights Off"

def exitProgram():
    print("Exit Button pressed")
    GPIO.cleanup()
    win.quit()


win.title("Remote Controlled Ornament")
win.geometry('640x480')
win.configure(background='Green')

Button = tk.Button(win, text = 'button press')


exitButton = tk.Button(win, text = "Exit", fg="Blue", font = myFont, command = exitProgram, height =2 , width =20)
exitButton.pack()

ledButton1 = tk.Button(win, text = "Red Light", fg="Firebrick3", font = myFont, command = ledON, height = 2, width =14 )
ledButton2 = tk.Button(win, text = "Green Light", fg="Green", font = myFont, command = ledON, height = 2, width =14 )
ledButton1.pack()
ledButton2.pack()



win.mainloop()

感谢您的任何帮助!

python tkinter raspberry-pi led
1个回答
0
投票

在第一个文件中,else:行具有不同的缩进,因此它可以更改所有内容,并且按钮可能不同。

您两次定义了函数LedON,因此第二个定义将替换第一个定义。您必须使用其他名称-即def ledRedONdef ledGreenON。然后,您必须在command=

中使用这些不同的名称
© www.soinside.com 2019 - 2024. All rights reserved.