import RPi.GPIO as GPIO import time import tkinter as tk from tkinter import ttk # Ustawienie trybu numeracji pinów GPIO GPIO.setmode(GPIO.BCM) # Definicja pinów sterownika L298N enA = 2 # Pin PWM dla silnika A in1 = 3 # Pin kierunku 1 dla silnika A in2 = 4 # Pin kierunku 2 dla silnika A enB = 17 # Pin PWM dla silnika B in3 = 27 # Pin kierunku 1 dla silnika B in4 = 22 # Pin kierunku 2 dla silnika B # Konfiguracja pinów jako wyjścia GPIO.setup(enA, GPIO.OUT) GPIO.setup(in1, GPIO.OUT) GPIO.setup(in2, GPIO.OUT) GPIO.setup(enB, GPIO.OUT) GPIO.setup(in3, GPIO.OUT) GPIO.setup(in4, GPIO.OUT) # Konfiguracja PWM (częstotliwość 100 Hz) pwmA = GPIO.PWM(enA, 100) pwmB = GPIO.PWM(enB, 100) # Uruchomienie PWM z początkową wartością 0% pwmA.start(0) pwmB.start(0) def forward(speed): """Funkcja do jazdy do przodu.""" GPIO.output(in1, GPIO.HIGH) GPIO.output(in2, GPIO.LOW) GPIO.output(in3, GPIO.HIGH) GPIO.output(in4, GPIO.LOW) pwmA.ChangeDutyCycle(speed) pwmB.ChangeDutyCycle(speed) def backward(speed): """Funkcja do jazdy do tyłu.""" GPIO.output(in1, GPIO.LOW) GPIO.output(in2, GPIO.HIGH) GPIO.output(in3, GPIO.LOW) GPIO.output(in4, GPIO.HIGH) pwmA.ChangeDutyCycle(speed) pwmB.ChangeDutyCycle(speed) def stop(): """Funkcja do zatrzymania silników.""" GPIO.output(in1, GPIO.LOW) GPIO.output(in2, GPIO.LOW) GPIO.output(in3, GPIO.LOW) GPIO.output(in4, GPIO.LOW) pwmA.ChangeDutyCycle(0) pwmB.ChangeDutyCycle(0) def on_forward(): speed = speed_slider.get() forward(speed) def on_backward(): speed = speed_slider.get() backward(speed) def on_stop(): stop() # Tworzenie GUI za pomocą Tkinter root = tk.Tk() root.title("Sterowanie Silnikami") # Suwak do ustawiania prędkości speed_label = tk.Label(root, text="Prędkość:") speed_label.pack() speed_slider = ttk.Scale(root, from_=0, to=100, orient="horizontal", length=300) speed_slider.set(50) # Domyślna prędkość 50% speed_slider.pack() # Przyciski do sterowania forward_button = tk.Button(root, text="Do przodu", command=on_forward) forward_button.pack(pady=10) backward_button = tk.Button(root, text="Do tyłu", command=on_backward) backward_button.pack(pady=10) stop_button = tk.Button(root, text="Stop", command=on_stop) stop_button.pack(pady=10) # Obsługa zamknięcia programu def on_close(): stop() GPIO.cleanup() root.destroy() root.protocol("WM_DELETE_WINDOW", on_close) # Uruchomienie głównej pętli GUI root.mainloop()