Untitled

 avatar
unknown
python
5 months ago
3.0 kB
2
Indexable
import gpiod
import time

# Definicja czipu GPIO
chip = gpiod.Chip('gpiochip0')

# Definicje pinów dla silników (zgodnie z BCM)
motor1_pin1 = 12  # Pin GPIO dla pierwszego kierunku silnika 1
motor1_pin2 = 13  # Pin GPIO dla drugiego kierunku silnika 1
motor2_pin1 = 14  # Pin GPIO dla pierwszego kierunku silnika 2
motor2_pin2 = 15  # Pin GPIO dla drugiego kierunku silnika 2

# Inicjalizacja linii GPIO
motor1_line1 = chip.get_line(motor1_pin1)
motor1_line2 = chip.get_line(motor1_pin2)
motor2_line1 = chip.get_line(motor2_pin1)
motor2_line2 = chip.get_line(motor2_pin2)

# Konfiguracja linii jako wyjścia
motor1_line1.request(consumer="motor1_line1", type=gpiod.LINE_REQ_DIR_OUT)
motor1_line2.request(consumer="motor1_line2", type=gpiod.LINE_REQ_DIR_OUT)
motor2_line1.request(consumer="motor2_line1", type=gpiod.LINE_REQ_DIR_OUT)
motor2_line2.request(consumer="motor2_line2", type=gpiod.LINE_REQ_DIR_OUT)

# Funkcja do sterowania pierwszym silnikiem (silnik 1)
def control_motor1(direction):
    if direction == "forward":
        motor1_line1.set_value(1)
        motor1_line2.set_value(0)
    elif direction == "backward":
        motor1_line1.set_value(0)
        motor1_line2.set_value(1)

# Funkcja do sterowania drugim silnikiem (silnik 2)
def control_motor2(direction):
    if direction == "forward":
        motor2_line1.set_value(1)
        motor2_line2.set_value(0)
    elif direction == "backward":
        motor2_line1.set_value(0)
        motor2_line2.set_value(1)

# Funkcja zatrzymująca silniki (ustawia piny na 0)
def stop_motors():
    motor1_line1.set_value(0)
    motor1_line2.set_value(0)
    motor2_line1.set_value(0)
    motor2_line2.set_value(0)

# Funkcja testująca silniki
def test_motors():
    try:
        while True:
            # Silnik 1 do przodu, Silnik 2 do tyłu na 2 sekundy
            print("Silnik 1 do przodu, Silnik 2 do tyłu")
            control_motor1("forward")
            control_motor2("backward")
            time.sleep(2)

            # Zatrzymanie silników na 1 sekundę
            print("Zatrzymanie silników")
            stop_motors()
            time.sleep(1)

            # Silnik 1 do tyłu, Silnik 2 do przodu na 2 sekundy
            print("Silnik 1 do tyłu, Silnik 2 do przodu")
            control_motor1("backward")
            control_motor2("forward")
            time.sleep(2)

            # Zatrzymanie silników na 1 sekundę
            print("Zatrzymanie silników")
            stop_motors()
            time.sleep(1)

    except KeyboardInterrupt:
        print("Test przerwany przez użytkownika.")

    finally:
        print("Zatrzymywanie silników i czyszczenie zasobów...")
        stop_motors()  # Zatrzymanie silników
        motor1_line1.release()  # Zwolnienie zasobów GPIO
        motor1_line2.release()
        motor2_line1.release()
        motor2_line2.release()
        print("Silniki zatrzymane, zasoby zwolnione.")

# Wywołanie funkcji testującej
test_motors()
Editor is loading...
Leave a Comment