Untitled
unknown
python
5 months ago
3.3 kB
3
Indexable
import serial import time import keyboard # Konfiguracja portu szeregowego SERIAL_PORT = '/dev/ttyACM0' # Sprawdź port Arduino za pomocą `ls /dev/tty*` BAUD_RATE = 115200 # Prędkość transmisji szeregowej # Inicjalizacja połączenia szeregowego z Arduino arduino = serial.Serial(SERIAL_PORT, BAUD_RATE, timeout=1) time.sleep(2) # Czekaj na inicjalizację Arduino # Prędkość początkowa i zakres current_speed1 = 0 current_speed2 = 0 TARGET_SPEED_STEP = 10 # Krok zmiany prędkości MAX_SPEED = 255 # Maksymalna prędkość def send_motor_commands(speed1, speed2): """ Wyślij komendy do Arduino przez port szeregowy. - speed1, speed2: -255 do 255 (prędkości silników, znak określa kierunek) """ try: message = f"{speed1},{speed2}\n" arduino.write(message.encode()) print(f"Wysłano dane: {message.strip()}") except Exception as e: print(f"Błąd komunikacji: {e}") def gradually_change_speed(target_speed1, target_speed2): """ Stopniowo zmieniaj prędkość do zadanej wartości. - target_speed1, target_speed2: docelowe prędkości dla silników. """ global current_speed1, current_speed2 # Zmieniaj prędkość silnika 1 if current_speed1 < target_speed1: current_speed1 = min(current_speed1 + TARGET_SPEED_STEP, target_speed1) elif current_speed1 > target_speed1: current_speed1 = max(current_speed1 - TARGET_SPEED_STEP, target_speed1) # Zmieniaj prędkość silnika 2 if current_speed2 < target_speed2: current_speed2 = min(current_speed2 + TARGET_SPEED_STEP, target_speed2) elif current_speed2 > target_speed2: current_speed2 = max(current_speed2 - TARGET_SPEED_STEP, target_speed2) send_motor_commands(current_speed1, current_speed2) def stop_motors(): """Zatrzymaj oba silniki.""" global current_speed1, current_speed2 current_speed1 = 0 current_speed2 = 0 send_motor_commands(0, 0) if __name__ == "__main__": try: print("Sterowanie robotem za pomocą strzałek:") print("↑: Do przodu, ↓: Do tyłu, ←: W lewo, →: W prawo, Spacja: Stop") while True: if keyboard.is_pressed('up'): # Strzałka w górę gradually_change_speed(MAX_SPEED, MAX_SPEED) elif keyboard.is_pressed('down'): # Strzałka w dół gradually_change_speed(-MAX_SPEED, -MAX_SPEED) elif keyboard.is_pressed('left'): # Strzałka w lewo gradually_change_speed(-MAX_SPEED, MAX_SPEED) elif keyboard.is_pressed('right'): # Strzałka w prawo gradually_change_speed(MAX_SPEED, -MAX_SPEED) elif keyboard.is_pressed('space'): # Spacja - zatrzymanie stop_motors() else: # Jeśli żaden klawisz nie jest naciśnięty, stopniowo zmniejsz prędkość gradually_change_speed(0, 0) time.sleep(0.05) # Krótkie opóźnienie dla płynniejszej zmiany except KeyboardInterrupt: # Obsługa przerwania programu (Ctrl+C) print("\nZatrzymywanie silników i wyłączanie programu...") stop_motors()
Editor is loading...
Leave a Comment