# LEGO type:standard slot:5 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)