# mit # kann man Kommentare schreiben #* so kann man Kommentare über mehrere Zeilen schreiben *# #* <constant value="0" name="NOCLAP"/> Diese Konstanten müssen Sie aus dem Code löschen und in dem Fenster <constant value="1" name="ONECLAP"/> oben rechts " Konstante" auf + klicken, dann den Namen (name=) und dann <constant value="2" name="TWOCLAP"/> bei Wert die Zahl von Value eingeben. <constant value="3" name="THREECLAP"/> Hier wird für jedes constant ein je eine Konstante eingetragen. <constant value="0" name="STOP"/> <constant value="1" name="RUN"/> <constant value="2" name="TURNLEFT"/> <constant value="3" name="TURNRIGHT"/> <constant value="80" name="TURN_SPEED"/> <constant value="80" name="FRONT_SPEED"/> *# var direction #Hier wird eine Variable direction deklaiert var time #Hier wird eine Variable time deklaiert var clap #Hier wird eine Variable clap deklaiert var claptime #Hier wird eine Variable claptime deklaiert var lastdirection #Hier wird eine Variable lastdirection deklaiert var micled =0 #Hier wird eine Variable micled mit dem Wert 0 deklaiert var tempmic #Hier wird eine Variable tempmic deklaiert var led_pulse #Hier wird eine Variable led_pulse deklaiert var temp #Hier wird eine Variable temp deklaiert var disco #Hier wird eine Variable disco deklaiert var leds_rainbow[160] #Hier wird eine Variable leds_rainbow mit einem Array deklaiert in diese 160 Elemente mit Werten reinpassen var i #Hier wird eine Variable i deklaiert var j #Hier wird eine Variable j deklaiert var led_i #Hier wird eine Variable led_i deklaiert var r #Hier wird eine Variable r deklaiert var g #Hier wird eine Variable g deklaiert var b #Hier wird eine Variable b deklaiert # um eine Variable zu deklaieren (= einen Namen etwas zuteilen) muss man vor den freiwählbaren Namen # "var" davor setzen. Man kann den Namen auch direkt ein Wert zuteilen ( var micled = 0 , da wird den Namen den # Wert 0 zugeteilt. Man kann auch sogenannte Arrys hizufügen (d.h. dass man dem Namen x viele Elemente hizufügen kann) mit # var "name" [x]. Array = ein Platzhalter für x viele Elemente. Elemente = ein Element ist sozusagen ein Wert. # Man kann ein einzelnes Element (Wert) von einem Array füllenmit: name[Element]= Wert. Z.B wenn ich das 5 Element von 100 Elementen # des Arrays var leds[100] (das ist die Deklartion von leds das heißt das Array leds kann 100 Elemente füllen) füllen will mit dem # Wert 6 : leds[4]=6.Das erste Element ist 0 (d.h. leds_rainbow[0] = das erste Element)!!!! Und wenn man ein einzelnes Element # aufrufen will: name[Element] . call math.fill(leds_rainbow,0) #call (aufrufen) math.fill(a,c) ist eine mathematiche Funktion,die die Konstante c (ein Wert, # hier: c = 0) in jedes Element (vom Array) a füll. D.h. das hier jedes Element mit 0 gefüllt wird. for j in 0:52 do #hier ist eine for-Schleife gegeben, wo die Werte 0-52 die noch auf die leds_rainbow[j] = j*2 #deklaierte Variable j gespeichert wird. end #in dem Array leds_rainbow sind ja x viele Elemente. Aber anstatt x habe ich j #gewählt. Bei leds_rainbow[j] sieht man das jedes Element aus leds_rainbow = j*2 ist. #d.h. das wenn das erste Element (leds_rainbow[0]) ist, ist j auch 1, d.h. das erste Element #mit 1*2 (2) gefüllt wird usw. Hier gehen die Zahlen pro Element um j*2 bis zum 52 Element, das mit #104 gefüllt wird for j in 53:105 do #hier ist es das gleiche bloß das die Elemente 53-105 mit einer bisschen komplexeren Rechnung leds_rainbow[j] = 53*2 - (j - 53) * 2 #gefüllt werden. Hier gehen die Werte der Elemente ab Element 53 (=106)nach unten end # bis Element 105 (=2). mic.threshold =250 #Mit mic.threshold legt man fest ab welcher Value (bei mic = Lautstärke) das Microfon ein Ergebnis senden soll #Ereignisse sind sozusagen Infosendungen das zb das Mikro ein #Ergebnis gesendet hat dass ein Ton mit Value 250 entdeckt hat. timer.period[0]=10 #timer.period[0oder1]=x legt fest wann der Timer (so was wie ein "Wecker") ein Ereignis senden soll. timer.period[1]=15 #Es gibt 2 timer ( 1oder2 ) die nach x Millisekunden ein Ereinis senden (also bei Timern den "Kingelton" #abspielt um dann etwas zu machen zb "aufstehen" oder halt das sich der Thymio bewegt). motor.left.target =0 #motor links wird auf Geschwindigkeit 0 gesetzt. motor.right.target =0 #motor rechts wird auf Geschwindigkeit 0 gesetzt. sub rainbow #mit sub <freiwählbarer name> können sie ein Unterprogramm definieren. #jedes mal wenn sie im Hauptprogramm callsub name aufrufen läuft das Unterprogramm ab led_i = (led_i + 2) % 160 #Jedes Mal, wenn rainbow genannt wird,wird led_i erhöht, bis 160 % das bedeutet: Modulo , es ist #was Sie als Rest erhalte, wenn sie durch 160 dividiert wird. r = (led_i) % 160 #r,g.b sind Variablen die mit led_i berechnet werden. Dies ist eigentlich nur da das r = leds_rainbow[r] / 4 # die led Farben sehr gemixt werden. g = (led_i+ 53) % 160 g = leds_rainbow[g] / 4 b = (led_i + 106) % 160 b = leds_rainbow[b] / 4 call leds.top(r,g,b) #hier werden die Werte aus r,g,b in die Klammer von led.top/bottom eingesetzt. call leds.bottom.left(b,r,g) #Aus 3 Werten die man dort eigibt werden die leds (top= leds oben auf dem Thymio call leds.bottom.right(g,b,r) #bottom.right/left= leds unten rechts/links) eine entsprechende Farbe geleuchtet. onevent timer0 #timer 0 wird jede 1/100 sekunde aufgerufen, weil timer.period[0]=10 ist if time<200 then #wenn die oben difinierte Variable time kleiner als 200 ist dann time=time+1 # rechnet man time +1 end if time>100 then #wenn time > 100 dann clap = NOCLAP #ist die Variable die Konstante NOCLAP call leds.circle(0,0,0, 0, 0, 0,0, 0) #und macht den Led Kreis aus end if time == 5 then #nach 0,05 Sekunden sehen wir , wenn es oneclap ist und nehmen die # entsprechenden Entscheidungen if direction == RUN and clap==ONECLAP then #wenn Variable direction == Konstante Run und calp == ONEClAP ist dann direction = TURNRIGHT # Variable direction = TURNRIGHT motor.left.target = TURN_SPEED #motor links fährt Wert von TURN_SPEED motor.right.target = -TURN_SPEED #motor rechts fährt -Wert von TURN_SPEED elseif direction == TURNRIGHT and clap==ONECLAP then #ansonsten wenn direction == TURNRIGHT und calp == ONEClAP ist dann direction = RUN #direction= RUN motor.left.target = FRONT_SPEED #motor links fährt Wert von FRONT_SPEED motor.right.target = FRONT_SPEED #motor rechts fährt Wert von FRONT_SPEED end end if time == 60 then #nach 0,6 Sekunden sollten wir TWOCLAP oder nichts haben haben, und wenn ja, #nehmen wir die entsprechenden Entscheidungen if direction == STOP and clap==TWOCLAP then direction = RUN motor.left.target = FRONT_SPEED motor.right.target = FRONT_SPEED elseif clap==TWOCLAP then direction = STOP motor.left.target = 0 motor.right.target = 0 end end if time == 80 then #nach 0,8 Sekunden sollten wir drei Klatschen oder nichts haben, und wenn ja nehmen wir die # entsprechenden Entscheidungen if clap==THREECLAP then disco=RUN direction = RUN motor.left.target = TURN_SPEED motor.right.target =0 end end onevent mic #Dies ist jedes Mal der Fall, wenn es ein Geräusch höher als die mic.threshold = 250 gibt if clap==NOCLAP then #Das bedeutet, dass wenn das Mikrofon einen Ton registriert und die Variable " clap " auf NOCLAP gesetzt time = 0 # ist, fangen wir an zu zählen time = 0 clap = ONECLAP call leds.circle(32,0,0, 0, 0, 0,0, 0) elseif clap==ONECLAP and 5 < time and time < 60 then clap = TWOCLAP call leds.circle(32,32,0, 0, 0, 0,0, 32) claptime = time + 2 elseif clap==TWOCLAP and claptime < time and time < 80 then clap = THREECLAP call leds.circle(32,32,32, 0, 0, 0,32, 32) led_pulse=0 call sound.system(7) end onevent prox #Hier wird programmiert wenn der Thymio kein Boden erkennt soll er Motoren und Leds ausschalten if prox.ground.delta[0]<130 or prox.ground.delta[1]<130 then motor.left.target=0 motor.right.target=0 call leds.bottom.left(32,0,0) call leds.bottom.right(32,0,0) elseif disco==STOP then call leds.bottom.left(0,0,0) call leds.bottom.right(0,0,0) end onevent timer1 #Hier wird programmiert das das unterprogramm bei threeclap angehen soll usw. if disco==RUN then callsub rainbow led_pulse = led_pulse + 1 if led_pulse == 128 then disco=STOP led_pulse=0 call leds.bottom.left(0,0,0) call leds.bottom.right(0,0,0) end else led_pulse = led_pulse + 1 if led_pulse > 0 then call leds.top(0, 0, led_pulse) if led_pulse > 40 then led_pulse = -128 end else temp=-led_pulse/4 call leds.top(0, 0, temp) end end