Braitenberg Lösung
Grundsätzliche Überlegungen
Für dieses einführende Beispiel sind folgende Ideen wichtig:
- Was sind Ereignisse und welche gibt es beim micro:bit?
- Wie funktionieren Abfragen und wie können dort Vergleiche verwendet werden?
- ...
Tipps und Tricks
Komplettlösungen
Lichtfolger
- Beim Starten des Programms, was müssen wir alles festlegen?
- Eine mögliche Lösung für den Start? <spoiler text="Lösung">
let SpeedL = 0 let SpeedR = 0 let Go = false kitronik_motor_driver.motorOff(kitronik_motor_driver.Motors.Motor1) kitronik_motor_driver.motorOff(kitronik_motor_driver.Motors.Motor2) basic.showIcon(IconNames.Happy) </spoiler>
- Wie können wir nun das Starten und Stoppen des Roboters mit den Tasten A und B bewerkstelligen?
- Eigenlich muss ja nur die entsprechende Variable gesetzt werden ... <spoiler text="Lösung">
input.onButtonPressed(Button.A, function () { Go = true }) input.onButtonPressed(Button.B, function () { Go = false }) </spoiler>
- Wenn das Programm läuft, muss nur noch die Lichtstärke dauerhaft abgefragt, umgerechnet und an die Motoren ausgegeben werden.
- Das sieht im einfachsten Fall für einen Roboter der auf das Licht zuführt so aus: <spoiler text="Lösung">
basic.forever(function () { SpeedR = Math.min(pins.analogReadPin(AnalogPin.P1) / 10, 100) SpeedL = Math.min(pins.analogReadPin(AnalogPin.P2) / 10, 100) if (Go) { kitronik_motor_driver.motorOn(kitronik_motor_driver.Motors.Motor1, kitronik_motor_driver.MotorDirection.Reverse, SpeedR) kitronik_motor_driver.motorOn(kitronik_motor_driver.Motors.Motor2, kitronik_motor_driver.MotorDirection.Reverse, SpeedL) } else { kitronik_motor_driver.motorOff(kitronik_motor_driver.Motors.Motor1) kitronik_motor_driver.motorOff(kitronik_motor_driver.Motors.Motor2) } }) </spoiler>
- Und für einen Roboter der vor dem Licht flüchtet so: <spoiler text="Lösung">
basic.forever(function () {
SpeedL = Math.min(pins.analogReadPin(AnalogPin.P1) / 10, 100) SpeedR = Math.min(pins.analogReadPin(AnalogPin.P2) / 10, 100) if (Go) { kitronik_motor_driver.motorOn(kitronik_motor_driver.Motors.Motor1, kitronik_motor_driver.MotorDirection.Reverse, SpeedR) kitronik_motor_driver.motorOn(kitronik_motor_driver.Motors.Motor2, kitronik_motor_driver.MotorDirection.Reverse, SpeedL) } else { kitronik_motor_driver.motorOff(kitronik_motor_driver.Motors.Motor1) kitronik_motor_driver.motorOff(kitronik_motor_driver.Motors.Motor2) }
})
</spoiler>
- Vielleicht sollte bei dem Lichtflüchter dann auch ein anderes Symbol am Bildschirm ausgegeben werden, damit man die Modelle leichter unterscheiden kann, wie zB <spoiler text="Lösung">
let SpeedL = 0 let SpeedR = 0 let Go = false kitronik_motor_driver.motorOff(kitronik_motor_driver.Motors.Motor1) kitronik_motor_driver.motorOff(kitronik_motor_driver.Motors.Motor2) basic.showIcon(IconNames.Sad)
</spoiler>