Makecode Blöcke für Fischertechnik

Damit meine Schüler einfacher ihre Fischertechnikmaschinen programmieren können, habe ich ein Paket mit Blöcken für Fischertechnik zur Pinabfrage und zum kommentieren erstellt. Gehen natürlich auch ohne Fischertechnik mit normalen Schaltern.
Viel Spaß damit!
https://github.com/MKleinSB/pxt-fischertechnik-calliope

1 „Gefällt mir“

Für die Lichtschranke gibt es auch passende Blöcke mit Eventhandler
https://github.com/MKleinSB/pxt-ft-fototransistor-calliope

Hallo Michael,

nach längerer Pause bin ich mal wieder im Bereich des Calliope aktiv. Ich interessiere mich gerade für das erstellen eigener Blöcke und im speziellen für Events. Du hast ja in deinem Paket für die Fischertechnik Lichtschranke auch einen eventbasierten Block erstellt. Kannst du mir sagen, ob ich dazu irgendwo im Netz Infos finde? Ich bin nicht so Sattelfest in Javascript. Ich würde mir gerne ein wenig mehr Infoszum Thema anlesen.

Martin (von den Digitalen-Forschern)

Lieber Martin,
Schau dir meine Detei main.ts an, kopiere sie in Makecode und spiele damit herum.
Zusätzlich hilft Dir bestimmt dies hier weiter:

Eventhandler - wie sie funktionieren.

Ein Eventhandler („Ereignisbehandler“) ist Code, der einem bestimmten Ereignis zugeordnet ist, z. B. „Taste A wird gedrückt“.

Für die Erzeugung (oder Registrierung) der Assoziation zwischen einem Ereignis und einem Ereignisbehandler wird eine Funktion mit dem Namen „on“ aufgerufen

Nachdem ein Ereignisbehandler bei einem Ereignis registriert wurde, wird immer dann, wenn dieses Ereignis eintritt, der Ereignisbehandlercode ausgeführt.

Registrieren eines Eventhandlers

Funktionen mit dem Namen „on“ erstellen eine Zuordnung zwischen einem Ereignis und dem Code des Eventhandlers.

Zum Beispiel registriert der folgende Code den Eventhandler (der Code zwischen den Schlüsselwörtern do und end ) mit dem Ereignis eines Drucks auf die Taste A:

input.onButtonPressed(Button.A, () => {
    basic.showString("Hallo", 150)
})

Nachdem dieser Code ausgeführt wurde, wird zukünftig immer dann, wenn Taste A gedrückt wird, die Zeichenfolge „Hallo“ ausgegeben.

Eventhandler sind während der gesamten Programmausführung aktiv

Nachdem Sie einen Ereignishandler für ein Ereignis wie oben registriert haben, ist dieser Ereignishandler für die restliche Programmausführung aktiv.

Wenn die Zeichenfolge „Hallo“ beim jeweiligen Drücken der Taste A nicht mehr ausgegeben werden soll, dann muss folgender Code eingefügt werden:

input.onButtonPressed(Button.A, () => {
})

Der obige Code ist einen Ereignishandler, der jedoch nichts mit dem Ereignis beim Drücken von Taste A macht.

Pro Ereignis gibt es nur einen Eventhandler

Das obige Beispiel veranschaulicht auch, dass für jedes Ereignis nur ein Ereignishandler vorhanden ist. Was ist das Ergebnis des folgenden Codes?

input.onButtonPressed(Button.A, () => {
    basic.showString("Hallo", 150)
})
input.onButtonPressed(Button.A, () => {
    basic.showString("Ciao", 150)
})

Die Antwort ist, dass, wenn Button A gedrückt wird, die Zeichenfolge „Ciao“ ausgegeben wird. Wenn sowohl die Zeichenfolgen „Hallo“ als auch „Ciao“ ausgegeben werden sollen, muss der Code wie folgt geschrieben werden:

input.onButtonPressed(Button.A, () => {
    basic.showString("Hallo", 150)
    basic.showString("Ciao", 150)
})

Vielleicht noch kurz soviel:

  1. Du brauchst eine eigene EventID die du dir so wie ich generieren kannst.
  2. Du brauchst den Code der im Hintergrund mitläuft (control.inBackground) und irgendwas kontrolliert z.B. Zustand eines Pins abfrägt.
  3. Wenn sich der Zustand des Pins ändert soll der Event ausgelöst werden mit control.raiseEvent
  4. Damit der Code immer mitläuft steht er in einer Endlosschleife (while true)

Hallo Michael,

danke für die Erklärung … was Events sind, und wie diese funktionieren, ist mir klar. Bin ja Entwickler, aber hab eben nix mit Javascript/Typescript am Hut. Daher hat mich dein erster Post erstmal verwirrt, da er scheinbar nicht speziell für den Calliope gilt, sondern eher allgemeiner Art ist. Zumindest habe ich die Schlüsselwörter do und end noch nirgends gesehen.
Dein Nachtrag war dann schon hilfreicher … irgendwie werde ich mit der Syntax von Javascript nicht warm … ich werd mich jetzt noch einmal genauer damit beschäftigen.

1 „Gefällt mir“