Arduino IDE und Calliope mini v3

Vielen ist nicht bekannt, dass man den Calliope mini auch mit der Arduino IDE programmieren kann. Die Konfiguration der Arduino IDE erfordert lediglich das Hinzufügen einer zusätzlichen Boardverwalter-URL https://sandeepmistry.github.io/arduino-nRF5/package_nRF5_boards_index.json in den Einstellungen. In der Boardverwaltung lässt sich dann (nach einem Neustart der Arduino IDE) der Calliope mini suchen und die dazu passende Erweiterung „Nordic Semiconducter nRF5 Boards“ installieren.

Mit dieser Änderung tauchen Calliope mini, Calliope mini v3, aber auch Micro:bit und Micro:bit v2 in der Liste der unterstützen Boards auf und lassen sich in der Arduino IDE programmieren. Für den Micro:bit gibt es zahlreiche Beispielprogramme in der ebenfalls installierbaren „Adafruit Microbit Library“ von https://github.com/adafruit/Adafruit_Microbit. Ich habe mich mit der Ansteuerung der 5x5-LED-Matrix beschäftigt. Dazu gibt es zum Ausprobieren ein Demoprogramm „Datei > Beispiele > Adafruid Microbit Library > matrixdemo.ino“. Da sich wohl die intern verwendeten Steuerleitungen bei den unterschiedichen Controllerversionen geändert haben, muss man das richtige Board auswählen , um nach dem Compilieren ein funktionierendes Programm zu bekommen.

Bei Micro:bit und Micro:bit v2 ist die Sache klar. Mit der richtigen Einstellung läuft das Programm auf der entsprechenden Platine. Ich muss für den Calliope mini v1 allerdings den Micro:bit auswählen und für den Calliope v3 den Micro:bit v2. Mit der Auswahl von Calliope mini und Calliope mini v3 funktioniert die Programmierung nicht. Ist da ein Fehler in der Konfiguration?

Beste Grüße
Ralf

// This is a demo of the matrix driver code
// works with Adafruit GFX commands - its just
// a really small screen!
// https://learn.adafruit.com/adafruit-gfx-graphics-library

#include <Adafruit_Microbit.h>

Adafruit_Microbit_Matrix microbit;

const uint8_t
  smile_bmp[] =
  { B00000,
    B01010,
    B00000,
    B10001,
    B01110, };
    
void setup() {  
  Serial.begin(9600);
  
  Serial.println("microbit matrix demo is ready!");

  microbit.begin();
}
    
void loop(){
  // Fill screen
  microbit.fillScreen(LED_ON);
  delay(1000);

  // draw a heart
  microbit.show(microbit.HEART);
  delay(1000);

  // draw a no cross
  microbit.show(microbit.NO);
  delay(1000);

  // draw a yes check
  microbit.show(microbit.YES);
  delay(1000);

  // draw a custom made bitmap face
  microbit.show(smile_bmp);
  delay(1000);
  
  microbit.clear();
  // Draw a line 'by hand'
  microbit.drawPixel(0, 0, LED_ON);
  microbit.drawPixel(1, 1, LED_ON);
  microbit.drawPixel(2, 2, LED_ON);
  microbit.drawPixel(3, 3, LED_ON);
  microbit.drawPixel(4, 4, LED_ON);
  // draw the 'opposite' line with drawline (easier!)
  microbit.drawLine(0, 4, 4, 0, LED_ON);

  delay(1000);

  // erase screen, draw a square
  microbit.clear();
  microbit.drawRect(0,0, 5, 5, LED_ON); // top left corner @ (0,0), 5 by 5 pixels size

  delay(1000);

  // erase screen, draw a circle
  microbit.clear();
  microbit.drawCircle(2,2, 2, LED_ON); // center on 2, 2, radius 2

  delay(1000);

  // erase screen, draw a filled triangle
  microbit.clear();
  microbit.fillTriangle(0,4, 2,0, 4,4, LED_ON); 

  delay(1000);

  // scroll some text the 'easy' way
  microbit.print("HELLO WORLD");

  // count up!
  for (int i=0; i<10; i++) {
    microbit.print(i);
    delay(500);
  }

  microbit.print(3.1415, 4);  // pi time, 4 digits of precision!!

}

Zweiter Versuch … ich steuere hier die LEDs einzeln an, ohne eine hardwarespezifische Bibliothek zu verwenden. Die Anregung habe ich dem Video https://youtu.be/r4HIC0QU6sg entnommen. Hier in diesem zweiten Versuch ist es übrigens egal, ob ich den Calliope mini v3 oder den Micro:bit v2 in der Arduino IDE ausgewählt habe.

Und weil ich die Steuerleitungen für die Spalten (COL) und die Zeilen (ROW) im Programm für den Micro:bit v2 bzw. Calliope miini v3 festgelegt habe, läuft das Programm nicht mit dem Micro:bit v1 bzw. Calliope mini v1.

Beste Grüße
Ralf

// Calliope mini v3
//
// Ansteuern der 5x5 LED Matrix
//

const int LED_COL[5] = {4,7,3,6,10};     // Calliope v3: col control
const int LED_ROW[5] = {21,22,23,24,25}; // Calliope v3: row control

void setup() {  
  Serial.begin(9600);
  Serial.println("Calliope mini v3 is ready!");

  // configure the io pins driving the build-in LEDs as output pins
  for (int i=0; i<5; i++){
    pinMode(LED_COL[i], OUTPUT);
    pinMode(LED_ROW[i], OUTPUT);
  } 
  // turn all LED_COL signals off (high)
  for (int c=0; c<5; c++){
    digitalWrite(LED_COL[c], HIGH);
  }
}

void blink(int c=0, int r=0, int d=100){
  char s[20];
  sprintf(s, "blink!  %d  %d", c, r);
  Serial.println(s);
  digitalWrite(LED_ROW[r], HIGH);
  digitalWrite(LED_COL[c], LOW);
  delay(d);
  digitalWrite(LED_COL[c], HIGH);
  digitalWrite(LED_ROW[r], LOW);
//  delay(d);
}

void loop(){
  // blink each LED ON for 100 ms
  for (int r=0; r<5; r++){
    for (int c=0; c<5; c++){
      blink(c, r);
    }
  }

  // blink each LED ON for 5 ms
  for (int c=0; c<5; c++){
    for (int r=0; r<5; r++){
      blink(c, r, 5);
    }
  }

}

Wunderbar! Ich habe es im dritten Anlauf selber gefunden.

Es gibt für die „Adafruit Microbit Library“ eine Anpassung „Adafruit Calliope“. Man muss die Anpassung nur in das Library-Verzeichnis der Arduino IDE nachladen. https://github.com/calliope-edu/Adafruit_Calliope . Nach dem Herunterladen in das Verzeichnis /home/ralf.krause/Arduino/libraries/ (und einem Neustart von Arduino IDE) gibt es tatsächlich eine funktionierende Demo … „Datei > Beispiele > Adafruit Calliope > matrixdemo.ino“.

Diese Demo läuft mit der jeweiligen Board-EInstellung auf dem Calliope mini v3 und dem Calliope v1. Wunderbar! Danke!

Beste Grüße
Ralf

1 „Gefällt mir“