Im zweiten Teil der micro:bit Reihe geht es nun endlich los mit der Programmierung des BBC micro:bit. Der erste Online Editor mit dem ich die ersten Erfahrungen sammeln konnte war der Code Kingdoms JavaScript Editor.
Der Code Kingdoms JavaScript Editor nutzt ein JavaScript Subset, hat einen relativ kleinen Befehlsumfang, bietet aber eine einfache Möglichkeit zum Erstellen der ersten micro:bit Programme.
Einsteiger Beispiele
Zunächst einige Einsteiger Beispiele, die ich für jeden der hier vorgestellten Editoren zeigen werde.
Hallo Welt
Der Klassiker der Programmierung ist das Hallo Welt Programm. Damit wird gezeigt wie einfach es ist, einen beliebigen Text auszugeben.
[pe2-image src=“https://lh3.googleusercontent.com/-U3iXdy4H3ZY/WBEUtlj0hmI/AAAAAAAAPp0/bNwyrpMDFHY3otdM_4C4JKFKiiIGWB1SgCCo/s144-c-o/code-kingdom-hello.jpg“ href=“https://picasaweb.google.com/100614490999857774768/6345124112208691649#6345876123350763106″ caption=““ type=“image“ alt=“code-kingdom-hello.jpg“ ]
function onStart( ) { microbit.say("HALLO WELT!"); }
Die Funktion microbit.say zeigt den gewünschten Text auf der 5×5 LED Matrix an. Ist der Text größer als die Anzeige, wird automatisch gescrollt. Das ist das übliche Verhalten aller Editoren für den micro:bit.
Tastenabfrage
Das nächste Beispiel nutzt die beiden Tasten A und B um ein fröhliches (Taste A) bzw. trauriges (Taste B) Gesicht anzuzeigen. Das Programm besteht aus den Event Funktionen onPressA()
und onPressB()
, die automatisch aufgerufen werden, wenn eine der Tasten gedrückt wurde. Die Funktion microbit.draw()
gibt dann ein Bitmuster auf der LED Matrix aus.
Kleiner Tipp: Die Bit Muster lassen sich im grafischen Editor sehr viel leichter erstellen, als im Text Editor.
[pe2-image src=“https://lh3.googleusercontent.com/-XTNquJ51u30/WBEi7-jWVbI/AAAAAAAAPqA/Wy8T5TE3KqUAD-a8iFIpwtWMcB7pFmIPwCCo/s144-c-o/code-kingdom-happy-sad.jpg“ href=“https://picasaweb.google.com/100614490999857774768/6345124112208691649#6345891763740628402″ caption=““ type=“image“ alt=“code-kingdom-happy-sad.jpg“ ]
function onStart( ) { microbit.say("HAPPY / SAD"); } function onPressA( ) { microbit.draw(Pattern("01010.01010.00000.10001.01110")); } function onPressB( ) { microbit.draw(Pattern("01010.01010.00000.01110.10001")); }
Beschleunigungssensor
Beim nächsten Beispiel handelt es sich um einen elektronischen Würfel. Fast wie bei einem echten Würfel, wird der mcro:bit geschüttelt, bevor eine neue Zufallszahl ermittelt und angezeigt wird.
[pe2-image src=“https://lh3.googleusercontent.com/-ePiO385jTVI/WBEUtccUkWI/AAAAAAAAPp0/QrUBE4722WwgUY6EZUxKE8clQtG3LUEvwCCo/s144-c-o/code-kingdom-dice.jpg“ href=“https://picasaweb.google.com/100614490999857774768/6345124112208691649#6345876120903389538″ caption=““ type=“image“ alt=“code-kingdom-dice.jpg“ ]
function onStart( ) { microbit.say("SHAKE ME!"); } function onShake( ) { microbit.say(Random.number(1, 6)); }
Die Funktion random.number()
generiert eine Zufallszahl zwischen 1 und 6, wenn das micro:bit Board geschüttelt wird. Hierbei wird von der Event-gesteuerten Programmierung durch JavaScript Gebrauch gemacht. Die Funktion ist ein Event onShake()
wird automatisch aufgerufen, sobald der micro:bit geschüttelt wird. Die erzeugte Zahl wird dann auf der LED Matrix angezeigt. Ein elektronischer Würfel, der den Beschleunigungssensor auswertet. Genial einfach.
Fortgeschrittene Programme
Nun wird es etwas kniffliger. Hier sind ein paar fortgeschrittene Programm-Beispiele, die mit dem Code Kingdoms Editor erstellt wurden.
Wasserwaage
Eine elektronische Wasserwaage lässt sich mit Hilfe des Beschleunigungssensors des micro:bit natürlich auch recht einfach erstellen.
function onStart( ) { globals.actX = microbit.tiltX; globals.actY = microbit.tiltY; globals.oldX = globals.actX; globals.oldY = globals.actY; while (true) { globals.actX = microbit.tiltX; globals.actY = microbit.tiltY; microbit.on(globals.actX, globals.actY); if (( globals.oldX != globals.actX ) || ( globals.oldY != globals.actY )) { microbit.off(globals.oldX, globals.oldY); } globals.oldX = globals.actX; globals.oldY = globals.actY; wait(40); } }
Auch bei diesem Programm wird der Beschleunigungssensor benutzt, diesmal für eine Wasserwaage. Dazu wird die TiltX()
bzw. TiltY()
Funktion verwendet. Diese Funktionen geben als Rückgabewerte die Zahlen 0..4 zurück. Ein Wert von 2 für TiltX und TiltY bedeutet dabei, das das Board flach auf dem Tisch liegt. Das entspricht zufällig auch den Koordinaten für die mittlere LED der LED Matrix. Die Rückgabewerte der Tilt Funktionen lassen sich also 1:1 als Koordinaten der einzelnen LEDs der LED Matrix abbilden.
Zugegeben, die Genauigkeit lässt zu Wünschen übrig. Aber es geht auch eher darum den Beschleunigungssensor z.B. zur Spielesteuerung zu verwenden. Es gibt natürlich auch Funktionen die den genauen Wert der Beschleunigungssensor zurückgeben.
Kompass
Das letzte Programm ist eine Kompass Anzeige. Dazu wird der Kompass Sensor verwendet. Der Kompass muss vor der ersten Verwendung erst mal kalibriert werden. Das geschieht in der Funktion microbit.calibrateCompass()
. Beim ersten Start des Programmes erfolgt zunächst die Aufforderung einen Kreis zu zeichnen (Draw a circle). Dazu muss das Board in alle Richtungen gekippt werden, bis alle äußeren LEDs einen Kreis bilden. Damit ist die Kalibrierung abgeschlossen. In einer Enlosschleife wird dann der Kompasswert microbit.bearing
gelesen und durch 40 geteilt. Das Ergebnis der Division ist (gerundet) ein Wert zwischen 0..8 und wird mit einem Pfeil mit der Richtung zum magnetischen Nordpol angezeigt.
[pe2-image src=“https://lh3.googleusercontent.com/-pugBjDAjjc0/WBEStoXyTEI/AAAAAAAAPpg/uYsgLEUdIqwP-1Mp7ZXCySlsyH-qdj_DgCCo/s144-c-o/code-kingdom-compass.jpg“ href=“https://picasaweb.google.com/100614490999857774768/6345124112208691649#6345873925082336322″ caption=““ type=“image“ alt=“code-kingdom-compass.jpg“ ]
function onStart( ) { microbit.calibrateCompass(); while (true) { globals.myNumber = microbit.bearing / 40; if (globals.myNumber == 0) { microbit.draw(Pattern("00100.01110.10101.00100.00100")); } else if (globals.myNumber == 1) { microbit.draw(Pattern("01111.00011.00101.01001.10000")); } else if (globals.myNumber == 2) { microbit.draw(Pattern("00100.00010.11111.00010.00100")); } else if (globals.myNumber == 3) { microbit.draw(Pattern("10000.01001.00101.00011.01111")); } else if (globals.myNumber == 4) { microbit.draw(Pattern("00100.00100.10101.01110.00100")); } else if (globals.myNumber == 5) { microbit.draw(Pattern("00001.10010.10100.11000.11110")); } else if (globals.myNumber == 6) { microbit.draw(Pattern("00100.01000.11111.01000.00100")); } else if (globals.myNumber == 7) { microbit.draw(Pattern("11110.11000.10100.10010.00001")); } else if (globals.myNumber == 8) { microbit.draw(Pattern("00100.01110.10101.00100.00100")); } wait(100); } }
Fazit
Der Code Kingdoms JavaScript Editor biete einen guten Einstieg in die Programmierung des micro-:bit. Allerdings hat der Editor auch einige Macken, die mir so aufgefallen sind:
- Es fehlen Befehle zur Servo Ansteuerung
- Im Grafik Modus sind die verfügbaren Befehle umständlich über 3 Untermenüs verteilt, man muss ständig suchen
- PWM (Analog Out) und Analog In geht nur auf den Pins 0,1,2. es gibt aber viel mehr analoge IOs
- Es ist mir reproduzierbar gelungen, mit dem graphischen Editor Code zu erzeugen, der sich nicht übersetzen lässt
Trotz aller Mankos lassen sich damit schon recht eindrucksvolle Programme erstellen. Leider kann man mit einem bestehenden Programm nicht einfach den Editor wechseln. Obwohl man mit dem Microsoft PXT auch in JavaScript programmiert, sind die Dialekte nicht kompatibel zueinander.
Links
- Code Kingdoms Homepage
- Code Kingdoms JavaScript Editor
- Beispielcode auf Github
- Code Kingdoms micro:bit Cookbook
Die weiteren Teile der micro:bit Serie:
- Teil 1: Erste Eindrücke
- Teil 3: Programmierung mit Microsoft PXT
- Teil 4: Programmierung mit Microsoft Blocks und Touch Develop
- Teil 5: Programmierung mit MicroPython
- Programmierung mit mbed C/C++
- Erweiterungen für den micro:bit
- Bluetooth Anbindung
- Robotik Anwendungen