View on GitHub

sylvester-mini

Ein MakeCode-Projekt

Calliope-Tischfeuerwerk

~avatar avatar @unplugged

Diesmal benötigst du einen Calliope mini und adressierbare RGB-LEDs.
Diese LEDs findest du entweder unter dem Namen Neopixel oder ws2812b. Ich empfehle einfach ein ws2812b RGB-LED-Band von 5m Länge (damit kannst du viel anfangen)!
Vorschau

~ @unplugged

Jetzt musst du noch die Kabel an den Calliope anschließen. Dazu kannst du die Kabelenden durch die goldenen Löcher stecken und um den Kreis wickeln.

bild Anschlüsse

Schritt 1

||basic: beim Start|| musst du dem Calliope sagen, wo du den LED-Streifen angeschlossen hast. Erstelle dazu eine Variable ||variables: strip||.Speichere dies, indem du den Block ||neopixel.strip:Neopixel an Pin P0 mit 24 Pixeln und Modus RGB|| in den Block ||variables: setze auf| schiebst. Hier stellst du ein, dass der Neopixel am Pin P1 angeschlossen ist und wie viele LEDs du für deinen Raketenstart benutzen willst.
Das hintere Feld mit dem RGB-Format ist erstmal uninteressant (du brauchst es nur, sollten bei deinen LEDs die Farben vertauscht sein, z.B. grün leuchten, aber rot programmiert sein). Ich habe für den Startbereich 6 LEDs benötigt.
Hinweis: Wenn die Töne stören, dann klickt auf der linken Seite unter dem Calliope auf den Lautsprecher, dann wird es stumm geschaltet.

let strip = neopixel.create(DigitalPin.P1, 6, NeoPixelMode.RGB)

Schritt 2

Für den Start müssen wir eine LED anschalten, die später (im nächsten Schritt) bis zum Ende des Streifens durchläuft. Das ganze sollte sich dauerhaft wiederholen.
Dazu habe ich die erste LED auf meinem Streifen Orange mit ||neopixel.strip:setze Farbe von NeoPixel 0 auf rot|| angeschalten.
Hinweis: Wenn du eine Veränderung am Neopixel anzeigen möchtest, brauchst du auch immer den Block ||neopixel.strip:anzeigen||.

let strip = neopixel.create(DigitalPin.P1, 6, NeoPixelMode.RGB)

basic.forever(function () {
    strip.setPixelColor(Index, neopixel.colors(NeoPixelColors.Orange))
    strip.show()
})

Schritt 3

Nun wollen wir die Rakete mal abheben lassen. Die LED muss sich also bewegen (auf dem Streifen verschieben). Um es bis zum Ende des Streifens zu schaffen, benöten wir 6 Runden.
Um das zu machen benötigen wir zuerste eine Schleife ||loops:index Schleife||. In dieses Schleife kommen die Blöcke ||basic:pausiere||, ||neopixel.strip:verschiebe|| und ||neopixel.strip:anzeigen||.
Außerdem müssen wir die LED auf dem Calliope noch einmal kurz an und wieder ausschalten in dem wir ||basic:setze RGB-LED-Farbe auf|| auf Orange und nach einer Pause wieder auf Schwarz stellen.

let strip = neopixel.create(DigitalPin.P1, 6, NeoPixelMode.RGB)

basic.forever(function () {
    strip.setPixelColor(Index, neopixel.colors(NeoPixelColors.Orange))
    strip.show()
    for (let index = 0; index < 6; index++) {
        basic.pause(200)
        strip.shift(1)
        strip.show()
    }
    basic.setLedColor(0xff8000)
    basic.pause(200)
    basic.setLedColor(0x000000)
})

Schritt 4

Abschließend müssen wir noch das Feuerwerk auf dem Display anzeigen. Dies geht ganz einfach, indem ihr es mit dem Block ||basic:zeige LEDs|| baut.
Außerdem kannst du die Explosion der Raktet noch mit einem Ton darstellen. Hierfür benötigst du den Block ||music:spiele Note Mittleres C für 1 Schlag||.
Nach Ende der Explosion solltest du alle LEDs auf dem Display ausschalten. Dies kannst du entweder mit einem leeren ||basic:zeige LEDs|| oder mit ||basic:Bildschirm löschen|| machen.
Wenn du verschiedene Bilder hintereinander setzt, entsteht eine Animation.

let strip = neopixel.create(DigitalPin.P1, 6, NeoPixelMode.RGB)

basic.forever(function () {
    strip.setPixelColor(Index, neopixel.colors(NeoPixelColors.Orange))
    strip.show()
    for (let index = 0; index < 6; index++) {
        basic.pause(200)
        strip.shift(1)
        strip.show()
    }
    basic.setLedColor(0xff8000)
    basic.pause(200)
    basic.setLedColor(0x000000)
    music.playTone(262, music.beat(BeatFraction.Quarter))
    basic.showLeds(`
        . . . . .
        . # . # .
        . . # . .
        . # . # .
        . . . . .
        `)
    basic.showLeds(`
        # . # . #
        . # . # .
        # . . . #
        . # . # .
        # . # . #
        `)
    basic.showLeds(`
        # . # . #
        . . . . .
        # . . . #
        . . . . .
        # . # . #
        `)
    basic.showLeds(`
        . . . . .
        . . . . .
        . . . . .
        . . . . .
        . . . . .
        `)
})