# Plotten von Geschwindigkeitsänderungen und Stop on Resistance

Hierbei geht es darum, die Geschwindigkeit von Motoren auszulesen und Veränderungen z.B. bei Blockaden zu erkennen.

```python
import hub
import motor
import device
import time

async def loop():
    motor.run(hub.port.A, 1000) #Geschwindigkeit des Motors auf 1000 stellen
    while not hub.button.pressed(hub.button.POWER):
        print(">", device.data(hub.port.A)[0], sep="") #Übertragung der Geschwindigkeit
        time.sleep(0.2) #Damit es möglichst live, ist. Wenn zu niedrig kommt die BT-Übertragung nicht hinterher
    while hub.button.pressed(hub.button.POWER):
        ...

```

Das ist ein einfach Aufbau, der die Geschwindigkeit des Motors ausließt. Die gemessene Geschwindigkeit ist immer 1/10 so groß, wie die eingestellte.

Damit kann man jetzt zum Beispiel für präzise Outputs ([Zum Artikel](https://bookstack.gsg-robots.de/books/experimente/chapter/prazise-ausgange "Präzise Ausgänge")) richtig nullen, ohne unterschiedlich am Ende zu stehen und zu stark zu verziehen.

```python
import hub
import motor
import device
import time

def until_stalled(speed, limfuck=0.8): #Funktion: speed: Geschwindigkeit vom Motor, limfuck: Prozent der Zielgeschwindigkeit, ab der gestoppt werden soll
    lim = abs(speed) / 10 * limfuck #limfuck * 10, weil die Geschwindigkeit nur 1/10 so groß ist
    motor.run(hub.port.A, speed)
    time.sleep(0.5) #Kann man noch besser machen, damit der Motor Zeit hat zu beschleunigen
    while not hub.button.pressed(hub.button.POWER):
        print(">", device.data(hub.port.A)[0], sep="") #Für BT-Übertragung
        
        sped = device.data(hub.port.A)[0] #gemessene Geschwindigkeit
        if lim > sped > -lim: #Überprüfun, ob die Geschwingigkeit zu niedrig ist
            break
        time.sleep(0.2) #Damit nicht zu viel via BT übertragen wird, sollte man aus dem Fenster schmeißen, wenn man keine BT-Übertragung macht
        
    
    motor.run(hub.port.A, 0) Motor wieder  ausschalten
    return

async def loop():
    while not hub.button.pressed(hub.button.POWER): #Unendlich vor und zurück
        until_stalled(500)
        until_stalled(-500)

    while hub.button.pressed(hub.button.POWER): #Debounce
        ...

```