Braitenberg Lösung: Unterschied zwischen den Versionen

Aus microbit - Das Schulbuch
Zur Navigation springen Zur Suche springen
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?…“
 
Keine Bearbeitungszusammenfassung
Zeile 9: Zeile 9:


== Komplettlösungen ==
== Komplettlösungen ==
=== Lichtfolger ===
; Beim Starten des Programms, was müssen wir alles festlegen?
; Beim Starten des Programms, was müssen wir alles festlegen?
: Eine mögliche Lösung für den Start? <spoiler text="Lösung"><pre id="pre4">
: Eine mögliche Lösung für den Start? <spoiler text="Lösung"><pre id="pre4">
Zeile 30: Zeile 29:
</pre></spoiler>
</pre></spoiler>


=== Lichtfolger ===
; Wenn das Programm läuft, muss nur noch die Lichtstärke dauerhaft abgefragt, umgerechnet und an die Motoren ausgegeben werden.
; 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"><pre id="pre4">
: Das sieht im einfachsten Fall für einen Roboter der auf das Licht zuführt so aus: <spoiler text="Lösung"><pre id="pre4">
Zeile 44: Zeile 44:
})
})
</pre></spoiler>
</pre></spoiler>
=== Lichtflüchter ===
: Und für einen Roboter der vor dem Licht flüchtet so: <spoiler text="Lösung"><pre id="pre4">
: Und für einen Roboter der vor dem Licht flüchtet so: <spoiler text="Lösung"><pre id="pre4">
basic.forever(function () {
basic.forever(function () {

Version vom 3. Januar 2022, 16:52 Uhr

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

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>

Lichtfolger

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>

Lichtflüchter

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>