Braitenberg Lösung

Aus microbit - Das Schulbuch
Version vom 3. Januar 2022, 16:51 Uhr von Harald.burgsteiner (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „== Grundsätzliche Überlegungen == Für dieses einführende Beispiel sind folgende Ideen wichtig: * Was sind Ereignisse und welche gibt es beim micro:bit?…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

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>