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? 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)
- 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 ... Lösung
input.onButtonPressed(Button.A, function () {
Go = true
})
input.onButtonPressed(Button.B, function () {
Go = false
})
- 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: 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)
}
})
- Und für einen Roboter der vor dem Licht flüchtet so: 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)
}
})
- Vielleicht sollte bei dem Lichtflüchter dann auch ein anderes Symbol am Bildschirm ausgegeben werden, damit man die Modelle leichter unterscheiden kann, wie zB 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)