Korzystając z tła pasków tęczy (Rainbow_bands), zaprogramuj robota, aby przemierzał linie, rysując okrąg nad linią, gdy po raz pierwszy napotka ciemnoniebieski pasek (trzeci pasek od lewej), a następnie kontynuuj do czarnej linii, na której punkt powinien się zatrzymać i wykonać pół obrotu w miejscu. Początek okręgu powinien leżeć na granicy pomiędzy zielonym (drugim) i ciemnoniebieskim (trzecim) pasmem.
Na przykład rysunek 1 pokazuje, co zrobił mój robot, kiedy zaprogramowałem go tak, aby obracał się, gdy napotka karmazynowy pasek (trzeci pasek od prawej).
Jeśli nie możesz zmusić robota do narysowania okręgu, twój robot powinien zamiast tego powiedzieć „skręć tutaj” w odpowiednim miejscu.
Twoja odpowiedź powinna zawierać magiczną blokadę użytą do skonfigurowania symulatora, twój komentowany program oraz zrzut ekranu symulatora po uruchomieniu programu.
Wskazówka: jeśli używasz pętli, upewnij się, że nie jest ona pusta, ale zawiera coś w sobie, nawet jeśli jest to tylko „fikcyjny” element time.sleep(0.1).
Odpowiedź:
Magiczna blokada:
# Rainbow bands
from ev3dev2.motor import LargeMotor, OUTPUT_A, OUTPUT_B, SpeedPercent, MoveTank
from ev3dev2.sensor import INPUT_1
from ev3dev2.sensor.lego import ColorSensor
from ev3dev2.led import Leds
# Connect two large motors to ports B and C
tank_drive = MoveTank(OUTPUT_A, OUTPUT_B)
# Connect a color sensor to port 1
color_sensor = ColorSensor(INPUT_1)
# Connect two leds to the ev3
leds = Leds()
# Program
while True:
# Check if the sensor detects a dark blue color
if color_sensor.color == ColorSensor.COLOR_BLUE:
tank_drive.on_for_degrees(SpeedPercent(20), SpeedPercent(20), 90) # Turn 90 degrees
tank_drive.on_for_degrees(SpeedPercent(50), SpeedPercent(50), 1000) # Drive for 1000 degrees
tank_drive.on_for_degrees(SpeedPercent(20), SpeedPercent(20), -90) # Turn -90 degrees
tank_drive.on_for_degrees(SpeedPercent(50), SpeedPercent(50), -1000) # Drive for -1000 degrees
leds.set_color("LEFT", "GREEN") # Turn on the left green led
leds.set_color("RIGHT", "RED") # Turn on the right red led
else:
tank_drive.on(SpeedPercent(20), SpeedPercent(20)) # Keep driving
time.sleep(0.1) # Add a small delay
Zrzut ekranu symulatora po uruchomieniu programu: