from hub import button, port, motion_sensor as ms import motor import motor_pair as mp import color_sensor as cs import color import sys import runloop import time # Notes ############################################################################### # Wippe Notizen def flipflop(state, r, s): """ Logik implementiert in Rampen Logik. Bleibe stehen, wenn der Rollwinkel sich um mehr als 10 (?) ändert. RS-Flipflop-Logik: Set (= tue nichts), wenn der Winkel sich ändert; Reset (= bleibe stehen), solange sich der Rollwinkel ändert, danach fahre normal weiter """ return False if r else (True if s else state) # Obstacle Notizen """ - Sensor ~12cm über dem Boden einbauen; insg. 3 Abstandssensoren benötigt (oder 2 mit aufwändigerer Logik und drehendem Sensor) 1. Wenn vorderer Sensor bestimmten Abstand feststellt, stoppen, zurückfahren bis ein Abstand d feststeht 2. Drehen, bis ein Seitensensor Abstand d oder kleiner feststellt. Kleinsten Abstand bestimmen: 2.1 Bei Drehung niedrigsten Wert des Sensors merken 2.2 Wenn Abstand größer wird, zurückdrehen, bis kleinster Wert wieder erreicht ist 3. Losfahren und in entsprechende Richtung drehen, wenn Abstand kleiner/größer wird 4. Abbrechen, wenn Farbsensoren Schwarz erkennen """ # Ziellinie Notizen # Wenn beide Sensoren Farbe rot feststellen, stoppe die Motoren, beende das Programm # Implementation of Basic operations and misc. ############################################## # await mp.move_for_degrees(mp.PAIR_1, 360, 45, velocity=280) # motor.run_for_degrees(portNum, 200, 300) # await runloop.sleep_ms(2000) # mp.move_tank(mp.PAIR_1, 280, -280) # await runloop.sleep_ms(2000) # WANTED_COLOR = color.BLACK # Productive Code ################################################################# async def move_on_color(): start_time = time.time() print(ms.tilt_angles()) while True: roll_value = ms.tilt_angles()[2] # Change to switch case if cs.reflection(port.C) < 60: mp.move_tank(mp.PAIR_1, -100, 100) elif cs.reflection(port.E) < 60: mp.move_tank(mp.PAIR_1, 100, -100) elif roll_value < -150: # uphill function mp.move(mp.PAIR_1, 0, velocity=450) else: mp.move(mp.PAIR_1, 0, velocity=200) # Geradeaus # linkskurve # rechtskurve # Kreuzung (grüner Punkt) # wenn grün, dann biege um 90 Grad in die richtung ab (wenn vor schwarzer linie) # Sackgasse (= zwei grüne Punkte) # -> Drehung 180 Grad # Bergauf # Bergab # Speedbumper (Schräge Bumper) async def main(): mp.pair(mp.PAIR_1, port.A, port.D) await move_on_color() sys.exit() runloop.run(main())