import machine
import time
import network

# WLAN-Informationen
SSID = 'FRITZ!Box 7530 MB-ex24'
PASSWORD = 'gx3systems9966'

# Pin-Definitionen für Ultraschall-Sensoren
TRIG1 = machine.Pin(5, machine.Pin.OUT)  # D1 = GPIO5
ECHO1 = machine.Pin(18, machine.Pin.IN)   # D2 = GPIO4
TRIG2 = machine.Pin(19, machine.Pin.OUT) # D6 = GPIO12
ECHO2 = machine.Pin(21, machine.Pin.IN)  # D5 = GPIO14

# Maximale Entfernung in cm
MAX_DISTANCE = 400

# Pin-Definitionen für den Stepper-Motor (A4988)
DIR = machine.Pin(13, machine.Pin.OUT)   # D7 = GPIO13 (Richtung)
STEP = machine.Pin(15, machine.Pin.OUT)  # D8 = GPIO15 (Schritt)

# Anzahl der Schritte für 180 Grad (bei 1.8° Schrittwinkel = 200 Schritte)
STEPS_PER_REV = 200
HALF_TURN = STEPS_PER_REV // 2  # 180 Grad = Hälfte der Schritte

# Funktion zur WLAN-Verbindung
def connect_to_wifi():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    
    if not wlan.isconnected():
        print('Verbinde mit dem WLAN...')
        wlan.connect(SSID, PASSWORD)
        while not wlan.isconnected():
            time.sleep(1)
    
    print('Mit dem WLAN verbunden!')
    print('Netzwerkinformationen:', wlan.ifconfig())

# Funktion zur Entfernungsmessung
def distance(trig, echo):
    trig.off()
    time.sleep_us(2)
    trig.on()
    time.sleep_us(10)
    trig.off()

    start_time = time.ticks_us()
    while echo.value() == 0:
        start_time = time.ticks_us()
    while echo.value() == 1:
        stop_time = time.ticks_us()

    time_elapsed = time.ticks_diff(stop_time, start_time)
    distance_cm = (time_elapsed * 0.0343) / 2
    
    return min(distance_cm, MAX_DISTANCE)

# Funktion zum Bewegen des StepperMotors
def move_motor(steps, direction):
    DIR.value(direction)  # Richtung festlegen: 1 vorwärts, 0 rückwärts
    for _ in range(steps):
        STEP.on()
        time.sleep(0.01)  # Schritt-Impuls (ca. 10 ms High)
        STEP.off()
        time.sleep(0.01)  # Wartezeit

# Hauptprogramm
try:
    connect_to_wifi()
    
    while True:
        # Hinbewegung: 180 Grad
        print("Bewege Motor: 180 Grad vorwärts")
        move_motor(HALF_TURN, 1)  # Vorwärts bewegen
        time.sleep(1)

        # Rückbewegung: 180 Grad
        print("Bewege Motor: 180 Grad rückwärts")
        move_motor(HALF_TURN, 0)  # Rückwärts bewegen
        time.sleep(1)

except KeyboardInterrupt:
    print("Programm beendet.")


















































#https://randomnerdtutorials.com/micropython-hc-sr04-ultrasonic-esp32-esp8266/
A4988