树莓派 3 GUI 界面按钮和 LED 灯



我有一个任务,包括对我的树莓派进行编程,让 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()

任何帮助不胜感激!

在第一个文件中,您在行else:中有不同的缩进,因此它可以更改所有内容,按钮的工作方式可能不同。

您定义函数LedON两次,因此第二个定义替换第一个定义。您必须使用不同的名称 - 即def ledRedONdef ledGreenON。然后你必须在command=使用这些不同的名称

最新更新