257 lines
7.8 KiB
Python
257 lines
7.8 KiB
Python
# LEGO type:standard slot:5 autostart
|
|
|
|
import os, sys
|
|
|
|
from spike import PrimeHub, LightMatrix, Button, StatusLight, ForceSensor, MotionSensor, Speaker, ColorSensor, App, DistanceSensor, Motor, MotorPair
|
|
from spike.control import wait_for_seconds, wait_until, Timer
|
|
from hub import battery
|
|
from math import *
|
|
|
|
############## Allgemein: Prüfe Batteriezustand ###############################
|
|
if battery.voltage() < 8000: #set threshold for battery level
|
|
print("Spannung der Batterie zu niedrig: " + str(battery.voltage()) + " \n"
|
|
+ "--------------------------------------- \n "
|
|
+ "#### UNBEDINGT ROBOTER AUFLADEN !!! #### \n"
|
|
+ "---------------------------------------- \n")
|
|
else:
|
|
print("Spannung der Batterie " + str(battery.voltage()) + "\n")
|
|
################################################################################
|
|
|
|
############################## NICHT ÄNDERN ###############################
|
|
def importFile(slotid=0, precompiled=False, module_name='importFile'):
|
|
print("##### START # IMPORTING CODE FROM SLOT "+str(slotid)+" ##############")
|
|
import os, sys
|
|
suffix = ".py"
|
|
if precompiled:
|
|
suffix = ".mpy"
|
|
with open("/projects/.slots","rt") as f:
|
|
slots = eval(str(f.read()))
|
|
#print(slots)
|
|
#print(os.listdir("/projects/"+str(slots[slotid]["id"])))
|
|
with open("/projects/"+str(slots[slotid]["id"])+"/__init__"+suffix,"rb") as f:
|
|
#print("trying to read import program")
|
|
program = f.read()
|
|
#print(program)
|
|
try:
|
|
os.remove("/"+module_name+suffix)
|
|
except:
|
|
pass
|
|
with open("/"+module_name+suffix,"w+") as f:
|
|
#print("trying to write import program")
|
|
f.write(program)
|
|
if (module_name in sys.modules):
|
|
del sys.modules[module_name]
|
|
#exec("from " + module_name + " import *")
|
|
print("##### END # IMPORTING CODE FROM SLOT "+str(slotid)+" ##############")
|
|
#####################################################################################
|
|
|
|
|
|
################ Importiere Code aus andere Dateien #################################
|
|
|
|
# Importiere Code aus der Datei "iqrobot.py"
|
|
# Dateiname und Modulname sollten gleich sein, dann kann man Code Completion nutzen
|
|
importFile(slotid=6, precompiled=True, module_name="iqrobot")
|
|
import iqrobot as iq
|
|
|
|
################### Hauptcode ####################################
|
|
'''
|
|
Code zum Lösen einer Aufgabe, kann oben importierten Code nutzen
|
|
Es können auch pro Aufgabe eigene Funktionen geschrieben werden
|
|
Wichtig ist, dass die PORTS der Sensoren überall gleich sind
|
|
und auch `hub` als Instanz von PrimeHub
|
|
dh auch an die Funktionen im importierten Code übergeben werde
|
|
'''
|
|
|
|
# Initialisieren des Hubs, der Aktoren und Sensoren
|
|
hub = PrimeHub()
|
|
|
|
# Initialisiere Robot Klasse mit unseren Funktionen
|
|
iqRobot: iq.IQRobot = iq.IQRobot(hub)
|
|
|
|
# Führe Funktionen aus unser Robot Klasse aus:
|
|
iqRobot.show('HAPPY')
|
|
|
|
def huenchenaufgabe():
|
|
iqRobot.fahre_gerade_aus(40,60)
|
|
iqRobot.drehe(-40)
|
|
iqRobot.fahre_gerade_aus(20,60)
|
|
iqRobot.drehe(-20)
|
|
iqRobot.fahre_gerade_aus(55,60)
|
|
iqRobot.heber(10,30)
|
|
|
|
# def hologram_alt():
|
|
# iqRobot.fahre_gerade_aus(cm=75,speed=80)
|
|
# iqRobot.drehe(45)
|
|
# iqRobot.fahre_gerade_aus(cm=14,speed=70)
|
|
# iqRobot.fahre_gerade_aus(cm=-13,speed=50)
|
|
# iqRobot.drehe(-45)
|
|
# iqRobot.fahre_gerade_aus(cm=-75,speed=50)
|
|
|
|
def druckmaschine():
|
|
iqRobot.fahre_gerade_aus(19,50)
|
|
iqRobot.drehe(-45)
|
|
iqRobot.fahre_gerade_aus(25,50)
|
|
iqRobot.fahre_gerade_aus(-15,50)
|
|
|
|
def hologram():
|
|
iqRobot.drehe(45)
|
|
iqRobot.fahre_gerade_aus(37.5,50) # HIER V
|
|
iqRobot.fahre_bis_abstand(28,30,True)
|
|
print(iqRobot.abstandsSensor.get_distance_cm())
|
|
iqRobot.drehe(45)
|
|
iqRobot.antrieb.move_tank(15,left_speed=50,right_speed=50)
|
|
#iqRobot.fahre_gerade_aus(15,30)
|
|
iqRobot.fahre_gerade_aus(-15,50)
|
|
|
|
def augmented_reality():
|
|
iqRobot.drehe(-135)
|
|
iqRobot.fahre_gerade_aus(38.5,40) # HIER V
|
|
iqRobot.drehe(90)
|
|
iqRobot.fahre_gerade_aus(15.5,30)
|
|
iqRobot.schaufel(-2200)
|
|
iqRobot.fahre_gerade_aus(-7,25) # HIER V
|
|
iqRobot.drehe(85)
|
|
iqRobot.fahre_gerade_aus(20,50)
|
|
#iqRobot.drehe(-90)
|
|
#iqRobot.fahre_gerade_aus(5,20)
|
|
|
|
# def backHome():
|
|
# iqRobot.fahre_gerade_aus(-5, 30)
|
|
# iqRobot.drehe(138)
|
|
# iqRobot.fahre_gerade_aus_alt(80, 100)
|
|
|
|
def immersiv_experiene():
|
|
iqRobot.fahre_gerade_aus(-62, 50)
|
|
iqRobot.schaufel(2200)
|
|
iqRobot.drehe(-30)
|
|
iqRobot.fahre_gerade_aus_alt(-2, 10)
|
|
iqRobot.drehe(-60)
|
|
iqRobot.fahre_bis_abstand(8, 20, True)
|
|
iqRobot.schaufel(-4000, 50)
|
|
#iqRobot.bewegungsSensor.reset_yaw_angle()
|
|
#iqRobot.drehe(90, True)
|
|
#iqRobot.drehe(90)
|
|
#iqRobot.fahre_gerade_aus(40, 70)
|
|
#iqRobot.fahre_bis_abstand(94, 50, True)
|
|
|
|
def druckmaschine_2():
|
|
iqRobot.fahre_gerade_aus(-11, 30)
|
|
iqRobot.drehe(49)
|
|
iqRobot.schaufel(500)
|
|
iqRobot.fahre_gerade_aus_alt(6, 30)
|
|
iqRobot.schaufel(300)
|
|
iqRobot.fahre_gerade_aus_alt(5, 30)
|
|
iqRobot.schaufel(200)
|
|
|
|
# def huenchenaufgabe_neu():
|
|
# iqRobot.fahre_gerade_aus(70, 50)
|
|
# iqRobot.drehe(-90)
|
|
# iqRobot.fahre_gerade_aus(35, 30)
|
|
# iqRobot.drehe(35)
|
|
# iqRobot.fahre_gerade_aus(30, 30)
|
|
# #iqRobot.fahre_gerade_aus(-30, 30)
|
|
# #iqRobot.drehe(-35)
|
|
# #iqRobot.fahre_gerade_aus(-35, 30)
|
|
# #iqRobot.drehe(90)
|
|
# #iqRobot.fahre_gerade_aus(-70, 50)
|
|
|
|
def huenchenaufgabe_neu_besser():
|
|
iqRobot.fahre_gerade_aus(51, 50)
|
|
iqRobot.drehe(-55)
|
|
iqRobot.fahre_gerade_aus(78, 70)
|
|
# iqRobot.heber(100, 500)
|
|
|
|
def turm(startGrad):
|
|
#iqRobot.fahre_gerade_aus_alt(-3, 100)
|
|
iqRobot.antrieb.move_tank(-9, "cm", 30, 30)
|
|
iqRobot.heber(50, 500) # NEU!
|
|
iqRobot.drehe(15)
|
|
#iqRobot.fahre_gerade_aus_alt(3, 100)
|
|
iqRobot.antrieb.move_tank(5, "cm", 30, 30)
|
|
iqRobot.drehe(90)
|
|
# iqRobot.heber(-100, 500)
|
|
iqRobot.antrieb.move_tank(3, "cm", 30, 30)
|
|
#iqRobot.drehe(36)
|
|
print(startGrad)
|
|
#wait_for_seconds(5)
|
|
#iqRobot.drehe_bis_winkel(startGrad+88)
|
|
#wait_for_seconds(2)
|
|
##iqRobot.drehe_bis_winkel(startGrad+88)
|
|
#wait_for_seconds(2)
|
|
#iqRobot.fahre_gerade_aus_alt(15, 50)
|
|
iqRobot.drehe(41)
|
|
iqRobot.antrieb.move_tank(15.25, "cm", 50, 50)
|
|
# wait_for_seconds(2)
|
|
#iqRobot.drehe_bis_winkel(startGrad+90)
|
|
#iqRobot.fahre_bis_abstand(5, 50, False)
|
|
iqRobot.heber(275, 500)
|
|
|
|
def boot():
|
|
iqRobot.fahre_gerade_aus(50, 70)
|
|
iqRobot.drehe(90)
|
|
iqRobot.fahre_gerade_aus(10, 40)
|
|
iqRobot.drehe(-90)
|
|
iqRobot.fahre_gerade_aus(110, 90)
|
|
|
|
def toHome1():
|
|
iqRobot.fahre_gerade_aus(-5, 30)
|
|
iqRobot.drehe(-20)
|
|
iqRobot.fahre_gerade_aus(30, 70)
|
|
iqRobot.drehe(40)
|
|
#iqRobot.fahre_gerade_aus_alt(25, 50)
|
|
iqRobot.antrieb.start_tank(40, 40)
|
|
iqRobot.wait_for_any_press()
|
|
iqRobot.antrieb.stop()
|
|
|
|
####################################################
|
|
|
|
# Teil 1
|
|
iqRobot.wait_for_any_press()
|
|
iqRobot.write_light_matrix("1")
|
|
druckmaschine()
|
|
iqRobot.write_light_matrix("2")
|
|
hologram()
|
|
iqRobot.write_light_matrix("3")
|
|
augmented_reality()
|
|
iqRobot.write_light_matrix("4")
|
|
druckmaschine_2()
|
|
toHome1()
|
|
wait_for_seconds(3)
|
|
|
|
# # Teil 2
|
|
iqRobot.wait_for_any_press()
|
|
boot()
|
|
|
|
# Teil 3
|
|
iqRobot.wait_for_any_press()
|
|
grad_am_start = iqRobot.get_grad()
|
|
print(grad_am_start)
|
|
iqRobot.write_light_matrix("5")
|
|
huenchenaufgabe_neu_besser()
|
|
iqRobot.write_light_matrix("6")
|
|
turm(grad_am_start)
|
|
|
|
|
|
# # Roboter-Design
|
|
|
|
# wait_for_seconds(2)
|
|
# iqRobot.wait_for_any_press()
|
|
# iqRobot.fahre_gerade_aus(40, 35)
|
|
# iqRobot.wait_for_any_press()
|
|
# iqRobot.fahre_gerade_aus(40, 35)
|
|
|
|
|
|
|
|
|
|
|
|
# iqRobot.wait_for_any_press()
|
|
# grad_am_start = iqRobot.get_grad()
|
|
# print("WARTEN 2")
|
|
# wait_for_seconds(3)
|
|
# iqRobot.drehe_bis_winkel(grad_am_start+90)
|
|
|
|
# # while True:
|
|
# print(iqRobot.abstandsSensor.get_distance_cm())
|
|
# #print(iqRobot.farbSensor.get_reflected_light())
|
|
# #print(str(iqRobot.farbSensor.get_blue())+" "+str(iqRobot.farbSensor.get_green())+" "+str(iqRobot.farbSensor.get_red()))
|
|
# wait_for_seconds(0.5)
|