top of page

Der Thymio ist Aufmerksam

Koppieren Sie den Folgenden Text in Aseba ein und lesen sie es sorgfälltig durch:

# 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

 

bottom of page