работаю над этим уже пару дней, создание автоматизированного попса может сокрушить ... итак .... соленоид (использующий реле просто для простоты), включается при запуске, остается включенным, но я могу использовать свой Кнопка «Стоп», чтобы остановить его, и моя кнопка «Старт», чтобы запустить его снова. я не могу понять, как включить мои операторы «if» и строку «range (2)» в мою кнопку «start», так что, скажем, я запускаю его 100 раз и хочу «остановить» его в любой момент времени ..... затем как только я выхожу из своего окна (виджета), мой оператор «IF» выполняет все остальное, мой код корректен без каких-либо ошибок, только проблемы с позиционированием… возможно, спасибо за всю помощь и информацию, это очень ценится!
import RPi.GPIO as GPIO
import time
from tkinter import *
import tkinter.font as font
root = Tk()
root.geometry('500x500') #size of window
class CanSmasher:
def __init__(self, master):
frame = Frame(master)
frame.pack()
myFont = font.Font(size=20) #define Font
self.printButton = Button(frame, text="Start", bg="green", fg="black", command = lambda: solenoid_off(21),width=20, height=5)
self.printButton['font'] = myFont
self.printButton.pack()
self.quitButton = Button(frame, text ="Stop", bg="red", fg="black", command = lambda: solenoid_on(21), width=20, height=5)
self.quitButton['font'] = myFont
self.quitButton.pack()
channel = 21
# GPIO setup
GPIO.setmode(GPIO.BCM)
GPIO.setup(channel, GPIO.OUT)
def solenoid_on(pin):
GPIO.output(pin, GPIO.HIGH) # Turn solenoid on
def solenoid_off(pin):
GPIO.output(pin, GPIO.LOW) # Turn solenoid off
c=CanSmasher(root)
root.mainloop()
if __name__ == '__main__':
try:
for i in range(2): # Number of times ran is writen in ==> [range(put run times here)]
solenoid_on(channel)
time.sleep(1) # Sets lag time
solenoid_off(channel)
time.sleep(1) # Sets run time
print("Cans Crushed", i+1)
GPIO.cleanup()
except KeyboardInterrupt:
GPIO.cleanup()