Untitled
unknown
python
a year ago
3.3 kB
8
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