# Makecode Blöcke für Fischertechnik

**URL:** <https://forum.calliope.cc/t/makecode-bloecke-fuer-fischertechnik/1158>\
**Category:** Fragen zu MakeCode/PXT\
**Created:** [24. April 2019 um 12:00 UTC](https://forum.calliope.cc/t/makecode-bloecke-fuer-fischertechnik/1158 "2019-04-24T12:00:57Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![klmi](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.calliope.cc/klmi/32/763_2.png) [@klmi](https://forum.calliope.cc/u/klmi)\
**Post date:** [24. April 2019 um 12:00 UTC](https://forum.calliope.cc/t/makecode-bloecke-fuer-fischertechnik/1158/1 "2019-04-24T12:00:57Z")

</div>

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](https://github.com/MKleinSB/pxt-fischertechnik-calliope)

---

<div class="post-metadata">

**Author:** ![klmi](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.calliope.cc/klmi/32/763_2.png) [@klmi](https://forum.calliope.cc/u/klmi)\
**Post date:** [19. Juli 2019 um 19:50 UTC](https://forum.calliope.cc/t/makecode-bloecke-fuer-fischertechnik/1158/2 "2019-07-19T19:50:33Z")

</div>

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

 ![1](https://canada1.discourse-cdn.com/flex027/uploads/calliope/original/2X/d/d4d145793b1669c5a31eba6cc3f614cee62900f6.png)

---

<div class="post-metadata">

**Author:** ![Speerwerfer](https://avatars.discourse-cdn.com/v4/letter/s/ac91a4/32.png) [@Speerwerfer](https://forum.calliope.cc/u/Speerwerfer)\
**Post date:** [18. August 2019 um 15:31 UTC](https://forum.calliope.cc/t/makecode-bloecke-fuer-fischertechnik/1158/3 "2019-08-18T15:31:27Z")

</div>

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)

---

<div class="post-metadata">

**Author:** ![klmi](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.calliope.cc/klmi/32/763_2.png) [@klmi](https://forum.calliope.cc/u/klmi)\
**Post date:** [18. August 2019 um 16:27 UTC](https://forum.calliope.cc/t/makecode-bloecke-fuer-fischertechnik/1158/4 "2019-08-18T16:27:46Z")

</div>

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:

```auto
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:

```auto
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?

```auto
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:

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

```

##

---

<div class="post-metadata">

**Author:** ![klmi](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.calliope.cc/klmi/32/763_2.png) [@klmi](https://forum.calliope.cc/u/klmi)\
**Post date:** [18. August 2019 um 16:37 UTC](https://forum.calliope.cc/t/makecode-bloecke-fuer-fischertechnik/1158/5 "2019-08-18T16:37:23Z")

</div>

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)

---

<div class="post-metadata">

**Author:** ![Speerwerfer](https://avatars.discourse-cdn.com/v4/letter/s/ac91a4/32.png) [@Speerwerfer](https://forum.calliope.cc/u/Speerwerfer)\
**Post date:** [18. August 2019 um 20:17 UTC](https://forum.calliope.cc/t/makecode-bloecke-fuer-fischertechnik/1158/6 "2019-08-18T20:17:48Z")

</div>

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.
