alles funktioniert (nicht)

master
Ruben Seitz 2026-01-15 12:46:23 +01:00
parent ef4db27b62
commit b7d96846f0
1 changed files with 31 additions and 33 deletions

View File

@ -20,6 +20,11 @@ import time
# Productive Code ########################################################################### # Productive Code ###########################################################################
BLACK = 0
GREEN = 6
WHITE = 10
RED = 9
async def turn_right(angle=85): async def turn_right(angle=85):
mp.move_tank(mp.PAIR_1, 200, -200) mp.move_tank(mp.PAIR_1, 200, -200)
await runloop.sleep_ms(int(angle * 7))# 6 ms per degree → tune this! await runloop.sleep_ms(int(angle * 7))# 6 ms per degree → tune this!
@ -33,7 +38,7 @@ async def turn_left(angle=85):
# drive forward X centimeters # drive forward X centimeters
async def drive_cm(cm, speed=200): async def drive_cm(cm, speed=200):
# convert cm → ms (you must tune this constant!) # convert cm → ms (you must tune this constant!)
mp.move_tank(mp.PAIR_1, speed, speed) mp.move_tank(mp.PAIR_1, -speed, -speed)
await runloop.sleep_ms(cm * 70) await runloop.sleep_ms(cm * 70)
mp.stop(mp.PAIR_1) mp.stop(mp.PAIR_1)
@ -45,28 +50,30 @@ async def avoid_obstacle(speed=100):
await turn_right(85) await turn_right(85)
await drive_cm(15) await drive_cm(15)
await turn_left(85) await turn_left(85)
await drive_cm(30) await drive_cm(38)
await turn_left(85) await turn_left(85)
await drive_cm(15) while cs.reflection(port.C) > 25:
await turn_right(85) mp.move_tank(mp.PAIR_1, -speed, -speed)
old = 0 while cs.color(port.B) != BLACK:
mp.move_tank(mp.PAIR_1, 10, -110)
#await turn_right(85)
async def move_on_color(): async def move_on_color():
won = False won = False
old = time.ticks_ms()
speed = 100 speed = 100
saw_green_left = False saw_green_left = False
saw_green_right = False saw_green_right = False
last_seen_black = "" last_seen_black = ""
old = time.ticks_ms()
# print("initial old: " + str(old))
while not won: while not won:
# Farbcodes lesen # Farbcodes lesen
left_color = cs.color(port.B) left_color = cs.color(port.B)
right_color = cs.color(port.F) right_color = cs.color(port.F)
front_sens = cs.reflection(port.C) front_sens = cs.reflection(port.C)
gradient = ms.tilt_angles()[2] gradient = ms.tilt_angles()[2]
# Farbcodes # Farbcodes
BLACK = 0 BLACK = 0
@ -92,8 +99,7 @@ async def move_on_color():
elif ds_front < 75 and ds_front > -1: elif ds_front < 75 and ds_front > -1:
#await avoid_obstacle() await avoid_obstacle()
pass
# Linker Sensor sieht Grün → Linksabbiegen # Linker Sensor sieht Grün → Linksabbiegen
elif left_color == GREEN and right_color != GREEN: elif left_color == GREEN and right_color != GREEN:
@ -128,18 +134,18 @@ async def move_on_color():
mp.move_tank(mp.PAIR_1, speed, speed) mp.move_tank(mp.PAIR_1, speed, speed)
time.sleep_ms(300) time.sleep_ms(300)
# Schwar-Logik # Schwarz-Logik
elif front_sens > 25 and last_seen_black == "left": elif front_sens > 25 and last_seen_black == "left":
#time.sleep_ms(100) #time.sleep_ms(100)
while cs.reflection(port.C) > 25: while cs.reflection(port.C) > 25: # front_sensor
if cs.color(port.B) == BLACK and cs.color(port.F) == WHITE: if cs.color(port.B) == BLACK and cs.color(port.F) == WHITE: # left_color
last_seen_black = "left" last_seen_black = "left"
if cs.color(port.F) == BLACK and cs.color(port.B) == WHITE: if cs.color(port.F) == BLACK and cs.color(port.B) == WHITE: # right_color
last_seen_black = "right" last_seen_black = "right"
#mp.move_tank(mp.PAIR_1, speed, speed) #mp.move_tank(mp.PAIR_1, speed, speed)
#time.sleep_ms(1000) #time.sleep_ms(1000)
break break
mp.move_tank(mp.PAIR_1, -75, 50) mp.move_tank(mp.PAIR_1, -125, -20)
elif front_sens > 25 and last_seen_black == "right": elif front_sens > 25 and last_seen_black == "right":
@ -152,7 +158,7 @@ async def move_on_color():
#mp.move_tank(mp.PAIR_1, speed, speed) #mp.move_tank(mp.PAIR_1, speed, speed)
#time.sleep_ms(1000) #time.sleep_ms(1000)
break break
mp.move_tank(mp.PAIR_1, 50, -75) mp.move_tank(mp.PAIR_1, -20, -125)
elif right_color == BLACK or left_color == BLACK: elif right_color == BLACK or left_color == BLACK:
if right_color == BLACK and left_color == BLACK: if right_color == BLACK and left_color == BLACK:
@ -169,27 +175,19 @@ async def move_on_color():
elif right_color == BLACK and left_color == WHITE: elif right_color == BLACK and left_color == WHITE:
last_seen_black = "right" last_seen_black = "right"
# Beide Weiß → geradeaus (vermutlich neben der Linie) # Beide Weiß, Front Schwarz → geradeaus
elif left_color == WHITE and right_color == WHITE and front_sens < 25: elif cs.color(port.B) == WHITE and cs.color(port.F) == WHITE and front_sens < 25:
straight = True straight = True
mp.move_tank(mp.PAIR_1, speed, speed) mp.move_tank(mp.PAIR_1, speed, speed)
runloop.sleep_ms(50) runloop.sleep_ms(50)
if straight: # if time.ticks_diff(time.ticks_ms(), old) > 5000:
if time.ticks_diff(time.ticks_ms(), old) > 200: # print(time.ticks_diff(time.ticks_ms(), old))
old = time.ticks_ms() # straight = True
# if turn_way_if_lost_right:
# mp.move_tank(mp.PAIR_1, speed, 0) # Alles Weiß
# await runloop.sleep_ms(200) # elif cs.color(port.B) == WHITE and cs.color(port.F) == WHITE and front_sens > 25:
# turn_way_if_lost_right = not turn_way_if_lost_right
# else:
# mp.move_tank(mp.PAIR_1, 0, speed)
# await runloop.sleep_ms(200)
# turn_way_if_lost_right = not turn_way_if_lost_right
if front_sens > 25:
last_seen_black = ""
else:
old = time.ticks_ms()
async def main(): async def main():
mp.pair(mp.PAIR_1, port.A, port.E) mp.pair(mp.PAIR_1, port.A, port.E)