# Einfaches Schrittmotorsteuerungsprojekt für MICROBIT - von JONATHAN DAVIES - microbit.iwasp.eu
# Copyright 2017 iwasp.eu

from microbit import *
import random

port = [pin0, pin1, pin8, pin2]  # Liste der zu verwendenden GPIO-Pins

t = 2  # Pausenzeit (Mikrosekunden) zwischen Motorschritten - kleiner Wert t, schnellere Motordrehung

# Zufallsbereich für die Anzahl der Motorschrittzyklen
rangeStart = 10
rangeEnd = 300


while (True):  # unendliche Hauptschleife

    cycle = random.randrange(rangeStart, rangeEnd)  # Zufallszahl der auszuführenden Motorschrittzyklen erzeugen

    while (cycle > 0):  # Motorsequenz im Uhrzeigersinn - 4-Schritt-Zyklus

        # Pins in korrektem Muster für jeden Schritt einschalten
        # Zyklusmuster im Uhrzeigersinn - 1000,0100,0010,0001

        port[0].write_digital(1)
        port[1].write_digital(0)
        port[2].write_digital(0)
        port[3].write_digital(0)

        sleep(t)  # Pause zwischen den Schritten

        port[0].write_digital(0)
        port[1].write_digital(1)
        port[2].write_digital(0)
        port[3].write_digital(0)

        sleep(t)

        port[0].write_digital(0)
        port[1].write_digital(0)
        port[2].write_digital(1)
        port[3].write_digital(0)

        sleep(t)

        port[0].write_digital(0)
        port[1].write_digital(0)
        port[2].write_digital(0)
        port[3].write_digital(1)

        sleep(t)

        cycle = cycle-1

        # wenn Null Zyklen erreicht sind, starten Sie die Sequenz gegen den Uhrzeigersinn

        Cycle = random.randrange(rangeStart, rangeEnd)

    while (cycle > 0):  # Motorsequenz im Gegenuhrzeigersinn - 4-Schritt-Zyklus

        # Zyklusmuster gegen den Uhrzeigersinn - 0001,0010,0100,1000

        port[0].write_digital(0)
        port[1].write_digital(0)
        port[2].write_digital(0)
        port[3].write_digital(1)

        sleep(t)  # Pause zwischen den Schritten

        port[0].write_digital(0)
        port[1].write_digital(0)
        port[2].write_digital(1)
        port[3].write_digital(0)

        sleep(t)

        port[0].write_digital(0)
        port[1].write_digital(1)
        port[2].write_digital(0)
        port[3].write_digital(0)

        sleep(t)

        port[0].write_digital(1)
        port[1].write_digital(0)
        port[2].write_digital(0)
        port[3].write_digital(0)

        sleep(t)

        cycle = cycle-1

# Hauptschleifenende