import RPi.GPIO as GPIO
import time
# --- Настройка GPIO ---
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
# Пины для каждого колеса (пара: вперёд/назад)
# Левая сторона
LF = (9, 11) # Left Front
LR = (25, 8) # Left Rear
# Правая сторона
RF = (26, 19) # Right Front
RR = (20, 16) # Right Rear
# Все пины — выходы
all_pins = LF + LR + RF + RR
GPIO.setup(all_pins, GPIO.OUT)
def set_wheel(pins, direction):
"""
Управление одним колесом.
pins: кортеж из двух пинов (forward_pin, backward_pin)
direction: 1 — вперёд, -1 — назад, 0 — стоп
"""
fwd, bwd = pins
if direction > 0:
GPIO.output(fwd, GPIO.HIGH)
GPIO.output(bwd, GPIO.LOW)
elif direction < 0:
GPIO.output(fwd, GPIO.LOW)
GPIO.output(bwd, GPIO.HIGH)
else:
GPIO.output(fwd, GPIO.LOW)
GPIO.output(bwd, GPIO.LOW)
def stop_all():
"""Остановить все колёса."""
for pins in (LF, LR, RF, RR):
set_wheel(pins, 0)
def forward():
"""Движение вперёд — все колёса вперёд."""
set_wheel(LF, 1)
set_wheel(LR, 1)
set_wheel(RF, 1)
set_wheel(RR, 1)
def backward():
"""Движение назад — все колёса назад."""
set_wheel(LF, -1)
set_wheel(LR, -1)
set_wheel(RF, -1)
set_wheel(RR, -1)
def turn_left():
"""Поворот налево — левые колёса назад, правые вперёд."""
set_wheel(LF, -1)
set_wheel(LR, -1)
set_wheel(RF, 1)
set_wheel(RR, 1)
def turn_right():
"""Поворот направо — левые колёса вперёд, правые назад."""
set_wheel(LF, 1)
set_wheel(LR, 1)
set_wheel(RF, -1)
set_wheel(RR, -1)
# --- Тестовая программа ---
if __name__ == "__main__":
try:
print("Тест 4 колёс. Ctrl+C для выхода.")
print("Вперёд")
forward()
time.sleep(2)
stop_all()
time.sleep(1)
print("Назад")
backward()
time.sleep(2)
stop_all()
time.sleep(1)
print("Поворот налево")
turn_left()
time.sleep(1.5)
stop_all()
time.sleep(1)
print("Поворот направо")
turn_right()
time.sleep(1.5)
stop_all()
time.sleep(1)
print("Тест завершён.")
except KeyboardInterrupt:
print("\nОстановка по Ctrl+C.")
finally:
stop_all()
GPIO.cleanup()
print("GPIO очищены.")