Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Keyestudio Max Board: Der Arduino-Klon mit dem gewissen Extra

Posted on 1. September 20246. Januar 2025 by Stefan Draeger

Das Keyestudio Max Board ist schon einige Zeit auf dem Markt erhältlich. In diesem Beitrag möchte ich dir diesen Mikrocontroller vorstellen und zeigen wie du das kleine Spiel „Fang den Regentropfen“ auf diesen programmierst.

Keyestudio Max Board: Der Arduino-Klon mit dem gewissen Extra
Dieses Video auf YouTube ansehen.

Der Preis mit knapp 25 € für diesen Mikrocontroller hat mich bisher eher abgeschreckt, da dieser zwar ein paar nette Features hat, aber wie ich finde dieses nun nichts Besonderes mehr sind. Auf aliexpress.com habe diesen jetzt für weit unter 20 € gefunden und das hat mich doch verleitet diesen zu kaufen.

Inhaltsverzeichnis

  • Features des Keyestudio Max Board
  • Pinout des Mikrocontrollers
    • Technische Daten des ATmega328P-PU
  • Einrichten des Keyestudio Max Board am PC
  • Programmierung in der Arduino IDE
    • Schritt 1 – importieren der benötigten Bibliotheken
    • Schritt 2 – erzeugen der Objektinstanzen und Felder
    • Schritt 3 – Funktion „setup“ Konfigurieren der Matrix, Taster & Buzzer
    • Schritt 4 – Funktion „loop“ Auswerten der Taster und Bewegen eines Regentropfens
    • Schritt 5 – Funktion „Bewegen der Leiste zum Fangen eines Regentropfens“
    • Schritt 6 – Funktion „Bewegen eines Regentropfens“
  • Schritt 7 – Anzeigen der gewonnenen Runden
  • Schritt 8 – Aktualisieren der LED Matrix

Features des Keyestudio Max Board

Der Mikrocontroller im Format des normalen Arduino UNO R3 verfügt über nachfolgende Features:

  • USB-Typ-C Buchse,
  • DC / Batterie Anschluss (PH2.0),
  • zwei Taster,
  • zwei RGB LEDs,
  • drei farbige SMD LEDs (gelb, grün, rot),
  • einen Piezo Buzzer,
  • ein Mikrofon,
  • einen Fotowiderstand
  • eine 8×16 rote LED Matrix

Pinout des Mikrocontrollers

Die vorhandenen Komponenten auf dem Board schränken jedoch die Verwendung der digitalen Pins ein. Daher werfen wir gleich mal einen Blick auf das Pinout, sodass wir die freien Pins im Blick haben.

KomponentePin
8×16 LED MatrixI2C, A4 & A5
MikrofonA7
FotowiderstandA6
Taster RECHTSD2
Taster LINKSD3
RGB LED LINKSD4
RGB LED RECHTSD9
SMD LED RotD8
SMD LED GrünD10
SMD LED GelbD13

Über den 4fach DIP Schalter kann man sich zumindest vier der belegten digitalen Pins wieder „freischalten“ und somit wie gewohnt über die Buchsenleisten abgreifen.

Pin
1D3
2D4
3A5
4A4

Technische Daten des ATmega328P-PU

Auf dem Mikrocontroller arbeitet ein ATmega328P-PU welcher nachfolgende technische Daten hat:

MikrocontrollerATmega328P-PU
Taktgeschwindigkeit16 MHz
Betriebsspannung5V
Eingangsspannung7 bis 12V DC
digitale Pins14, davon 6 als PWM
analoge Pins6
max. Stromaufnahme an den Pins20 mA
max. Stromaufnahme an 3.3V50 mA
Speicher32 kB
davon 0,5 kB für den Bootloader reserviert
2 kB SRAM
1 kB EEPROM
SchnittstellenUART, I2C, SPI
FeaturesLED_BUILTIN an D13

Einrichten des Keyestudio Max Board am PC

Bevor wir mit der Programmierung beginnen können, müssen wir zunächst (soweit noch nicht geschehen) den passenden USB-SERIAL Treiber installieren. Auf dem Board ist ein CP2102 Chip verbaut, in meinem Fall ist dieser nicht installiert (erkennbar am gelben Dreieck im Icon) und ich muss diesen manuell nachinstallieren.

Von der Seite https://www.pololu.com/docs/0J7/all#2 kannst du dir den passenden Treiber als ZIP-Datei für Windows herunterladen.

Programmierung in der Arduino IDE

Die Programmierung erfolgt, wie zu erwarten ist am einfachsten in der Arduino IDE. Auf der offiziellen Seite zu diesem Mikrocontroller beim Hersteller findest du viele Beispiele zu den Features. Nachfolgend möchte ich dir gerne zeigen, wie du das bereits für das Arduino Plug and Make Kit vorgestellte Spiel „Fang den Regentropfen“ programmierst.

Der Mikrocontroller bringt dazu zwei Taster, die 8×16 LED Matrix sowie den Piezo Buzzer, was dafür optimal ist. (Da alles am Mikrocontroller fest verbaut ist, entfällt hier ein Aufbau der Schaltung, was das ganze nochmal deutlich vereinfacht.)

Spiel – „Fang den Regentropfen“ am Keyestudio Max BoardHerunterladen

Schritt 1 – importieren der benötigten Bibliotheken

Zunächst importieren wir die benötigten Bibliotheken. Die Bibliothek für das Ansteuern der LED Matrix bekommen wir vom DropBox Repository von Keyestudio https://fs.keyestudio.com/KS0500 leider musst du dich zuvor dort anmelden, um an diese Ressourcen zu gelangen.

Die Bounce2 Bibliothek findest du bequem im internen Bibliotheksverwalter, wenn du nach „Bounce2“ suchst.

//Einbinden der benötigten Bibliotheken
//zum ansteuern der 8x16 LED Matrix
#include <Wire.h>
#include "Keyestudio_LEDBackpack.h"
#include "Keyestudio_GFX.h"
//zum entprellen der Taster
#include <Bounce2.h>

Schritt 2 – erzeugen der Objektinstanzen und Felder

Für das Spiel benötigen wir einpaar Objektinstanzen wie für die LED Matrix, die Taster etc.

Die Koordinaten des Regentropfens sowie der Leiste zum Fangen des selbigen lege ich als globale Variable an, somit muss ich diese nicht durch die Funktionen durchreichen.

//Objektinstanz von der Matrix erstellen
Keyestudio_8x16matrix matrix = Keyestudio_8x16matrix();

//die beiden Taster sind an 
//den digitalen Pins D3 & D2 angeschlossen
#define buttonLinksPin 3
#define buttonRechtsPin 2

//der Piezo Buzzer ist am digitalen Pin D9 angeschlossen
#define buzzer 9

//Objektinstanzen für das entprellen
//der Taster mit Bounce erstellen
Bounce btnLinks = Bounce();
Bounce btnRechts = Bounce();

//Koordinale für die Leiste zum fangen des Punktes
int16_t barXPos = 7;
int16_t barYPos = 0;

//Koordinate für den Regentropfen
int16_t rainDropXPos = 0;
int16_t rainDropYPos = 0;

//Geschwindigkeit des Spieles
//am Anfang legen wir diesen auf 400 fest
//dieses repräsentiert einen Wert in Millisekunden
long speed = 400;
//Zeitpunkt der letzten Ausführung des bewegens eines
//Regentropfens auf der LED Matrix
long lastAction = -1l;

int wonRounds = 0;

Schritt 3 – Funktion „setup“ Konfigurieren der Matrix, Taster & Buzzer

In der Funktion setup starten wir zunächst die Kommunikation mit der LED Matrix und anschließend konfigurieren wir die beiden Taster so das diese über Bounce2 entprellt werden.

//beginnen der Kommunikation mit der LED Matrix
//via I2C mit der Adresse 0x70
matrix.begin(0x70);

//Konfigurieren des entprellens der Taster
//verbinden des Pins des Tasters mit dem Objekt
btnLinks.attach(buttonLinksPin, INPUT);
btnLinks.interval(5);

btnRechts.attach(buttonRechtsPin, INPUT);
btnRechts.interval(5);

//Pin des Piezo Buzzers als Ausgang definieren
pinMode(buzzer, OUTPUT);

Damit das Spiel gleich startet, setzen wir den Regentropfen an eine Zufällige stelle und zeigen diesen an.

//eine Range für die Generierung einer Zufallszahl erstellen
randomSeed(analogRead(0));
//setzen der Koordinaten für einen Regentropfen
rainDropXPos = 7;
rainDropYPos = generateRandomNumber();
//aktualisieren der LED Matrix
updateMatrix();

Schritt 4 – Funktion „loop“ Auswerten der Taster und Bewegen eines Regentropfens

In der Funktion „loop“ aktualisieren wir die Taster und werden den jeweiligen Tastendruck aus.

//aktualisieren der Button Objekte
btnLinks.update();
btnRechts.update();

//Wenn der linke Taster losgelassen wurde, dann...
if (btnLinks.rose()) {
  //die Leiste nach links bewegen
  moveBar(-1);
  //aktualisieren der LED Matrix
  updateMatrix();
}

//Wenn der rechte Taster losgelassen wurde, dann...
if (btnRechts.rose()) {
  //die Leiste nach rechts bewegen
  moveBar(1);
  //aktualisieren der LED Matrix
  updateMatrix();
}

Am Ende prüfen wir ob die Zeit zwischen den Bewegungen des Regentropfens abgelaufen ist. Würden wir hier mit der Funktion delay arbeiten, so können man wärend der Pause keine der Tasten auswerten.

//ermitteln des Zeitpunktes für die nächste Ausführung
//der Bewegung des Regentropfens
long currentMillis = millis();
if (currentMillis > (lastAction + speed)) {
  lastAction = currentMillis;
  moveRainDrop();
  updateMatrix();
}

Schritt 5 – Funktion „Bewegen der Leiste zum Fangen eines Regentropfens“

Wenn eine der beiden Tasten betätigt wurde, dann wird die Funktion moveBar ausgeführt. Zunächst wird ein Ton ausgegeben so das eine akkustische Rückmeldung erfolgt.

//Funktion zum bewegen der Leiste zum fangen des Regentropfens
//als Parameter wird die Richtung übergeben,
//ein Positiver Wert gilt nach rechts und ein negativer nach links
void moveBar(int direction) {
  tone(buzzer, 300, 75);
  if (direction > 0) {
    if (barXPos < 15) {
      barXPos++;
    }
  } else {
    if (barXPos > 0) {
      barXPos--;
    }
  }
}

Schritt 6 – Funktion „Bewegen eines Regentropfens“

Der Regentropfen wird von oben nach unten bewegt wobei unten die Zeile mit dem Index 0 ist und oben 7. Wenn die Zeile des Regentropfens 0 ist dann wird geprüft ob die Leiste sich an der selben Stelle befindet.

Wenn diese Runde gewonnen ist dann wird die Geschwindigkeit erhöht und eine neue Runde gestartet und der Wert für wonRounds um eins erhöht. Wenn jedoch die Runde verloren ist, dann werden die gewonnenen Runden angezeigt.

//Funktion zum bewegen des Regentropfens UND auswerten 
//ob die Runde gewonnen oder verloren ist
void moveRainDrop() {
  rainDropXPos--;
  tone(buzzer, 600, 75);
  bool startNewGame = false;
  if (rainDropXPos == 0 && (barXPos == rainDropYPos)) {
    tone(buzzer, 800, 75);
    startNewGame = true;
    speed -= 25;
    wonRounds++;
  } else if (rainDropXPos == 0 && (barXPos != rainDropYPos)) {
    tone(buzzer, 250, 75);
    startNewGame = true;
    speed = 400;
    displayWonRounds();
    wonRounds = 0;
  }

  if (startNewGame) {
    rainDropXPos = 7;
    rainDropYPos = generateRandomNumber();
  }
}

Schritt 7 – Anzeigen der gewonnenen Runden

Zum schreiben der gewonnenen Runden auf der LED Matrix muss zuvor diese gedreht und der Cursor an eine Position gesetzt werden. Dieses müssen wir jedoch nachdem anzeigen wieder zurücksetzen da dieses globale Einstellungen sind!

//Anzeigen der gewonnenen Runden auf der LED Matrix
void displayWonRounds() {
  matrix.setTextSize(1);
  matrix.setTextWrap(false);
  matrix.setTextColor(LED_ON);
  //drehen der Ausrichtung der Matrix
  matrix.setRotation(1);
  matrix.clear();
  //setzen des Cursors an welchem der Text
  //geschrieben wird
  matrix.setCursor(6, 0);
  matrix.print(String(wonRounds));
  matrix.writeDisplay();
  delay(1000);
  //Zurücksetzen des Cursors & der Drehung der Matrix
  matrix.setCursor(0, 0);
  matrix.setRotation(0);
}

Schritt 8 – Aktualisieren der LED Matrix

Die Funktion zum anzeigen der LED Matrix ist recht easy denn hier müssen wir lediglich nur zwei Punkte anzeigen wo wir die Koordinaten kennen.

//Funktion zum zeichnen der Punke auf der LED Matrix
void updateMatrix() {
  matrix.clear();
  matrix.drawPixel(barYPos, barXPos, LED_ON);
  matrix.drawPixel(rainDropXPos, rainDropYPos, LED_ON);
  matrix.writeDisplay();
}

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}