Einfacher Scorezähler mit einem Arduino Nano und einer WS2812 16x16 matrix

Hallo,

ich habe einen einfachen Code geschrieben mit dem ich über drei Taster rauf/runter/reset nen Zähler
steuern kann. Den Zähler kann ich mir bereits über das Terminal anschauen und möchte diesen Wert
(int buttonPushCounter1) nun auf eine WS2812 16x16 Matrix weiterleiten.

Optimal wäre es später auch noch die Größe der Matrix auf z.B 32x32 pixel usw.
bzw. die Möglichkeit zu haben Font und Größe vom Text anpassen zu können.

Welche Library wäre da die optimalste?

Ich habe bereits Versuche mit Adafruit NeoMatrix und FastLed gemacht, allerdings bisher ohne Erfolg.

Vielen Dank für euren Support.

EDIT: PROBLEM GELÖST!

Setze Deinen Code bitte direkt ins Forum. Benutze dazu Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Edit: Schau mal hier rein.

Danke für den Tipp! :smiley:

Leider habe ich Probleme die Library fehlerfrei in meine IDE einzubinden bzw. selbst der
Beispiel-Code funktioniert nicht.
Ich nutze die 1.8.0 bzw. 1.8.8 auf meinem Mac und dazu Adafruit Neomatrix Ver. 1.1.2.
Als Hardware nutze ich einen Asia Arduino Nano mit einem ATmega328P (Old Bootloader).

Als Fehlermeldung bekomme ich

Arduino: 1.8.8 (Mac OS X), Board: "Arduino Nano, ATmega328P (Old Bootloader)"

In file included from /Users/xxx/Documents/Arduino/libraries/Adafruit_NeoMatrix/examples/matrixtest/matrixtest.pde:5:0:
/Users/xxx/Documents/Arduino/libraries/Adafruit_NeoMatrix/Adafruit_NeoMatrix.h:72:5: error: 'neoPixelType' has not been declared
neoPixelType ledType = NEO_GRB + NEO_KHZ800);

Allerdings benutze ich auch kein original Adafruit Neopixel Produkt sondern eine einfache Matrix
mit 16x16 WS2812 LEDs.

Die Ausgabe mit der Adafruit_NeoPixel Library läuft allerdings ohne Probleme.

Hier der Code

// Adafruit_NeoMatrix example for single NeoPixel Shield.
// Scrolls 'Howdy' across the matrix in a portrait (vertical) orientation.

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#ifndef PSTR
 #define PSTR // Make Arduino Due happy
#endif

#define PIN 8

// MATRIX DECLARATION:
// Parameter 1 = width of NeoPixel matrix
// Parameter 2 = height of matrix
// Parameter 3 = pin number (most are valid)
// Parameter 4 = matrix layout flags, add together as needed:
//   NEO_MATRIX_TOP, NEO_MATRIX_BOTTOM, NEO_MATRIX_LEFT, NEO_MATRIX_RIGHT:
//     Position of the FIRST LED in the matrix; pick two, e.g.
//     NEO_MATRIX_TOP + NEO_MATRIX_LEFT for the top-left corner.
//   NEO_MATRIX_ROWS, NEO_MATRIX_COLUMNS: LEDs are arranged in horizontal
//     rows or in vertical columns, respectively; pick one or the other.
//   NEO_MATRIX_PROGRESSIVE, NEO_MATRIX_ZIGZAG: all rows/columns proceed
//     in the same order, or alternate lines reverse direction; pick one.
//   See example below for these values in action.
// Parameter 5 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)


// Example for NeoPixel Shield.  In this application we'd like to use it
// as a 5x8 tall matrix, with the USB port positioned at the top of the
// Arduino.  When held that way, the first pixel is at the top right, and
// lines are arranged in columns, progressive order.  The shield uses
// 800 KHz (v2) pixels that expect GRB color data.
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(16, 16, PIN,
  NEO_MATRIX_TOP     + NEO_MATRIX_RIGHT +
  NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,
  NEO_GRB            + NEO_KHZ800);

const uint16_t colors[] = {
  matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(0, 0, 255) };

void setup() {
  matrix.begin();
  matrix.setTextWrap(false);
  matrix.setBrightness(40);
  matrix.setTextColor(colors[0]);
}

int x    = matrix.width();
int pass = 0;

void loop() {
  matrix.fillScreen(0);
  matrix.setCursor(x, 0);
  matrix.print(F("Howdy"));
  if(--x < -36) {
    x = matrix.width();
    if(++pass >= 3) pass = 0;
    matrix.setTextColor(colors[pass]);
  }
  matrix.show();
  delay(100);
}

Hi

Das Hoch/Runter Zählen hat mit Deinem Problem derzeit Nicht zu tun, oder?
Dann wirf Das bitte soweit raus, daß nur noch ein Problem über bleibt.
Zur Anzeige sollte dafür auch eine feste Zahl taugen.

  • der Sketch wird für uns übersichtlicher
  • wenn die Ausgabe einer festen Zahl klappt, sollte der Counter auch ausgegeben werden können
  • Du bekommst ein Snipped, Den Du allgemein benutzen kannst - akut in Deinem Counter.

Es wird über die NoePixelMatrix gehen, dort kannst Du die Größe der Matrix angeben und, wie die Pixel einzeln verkettet sind.
Wenn dort nur komplette Reihen möglich sind, muß man ggf. noch eine Hilfsfunktion erstennen, Die den Kram auf Deine Anordnung umrechnet.
Die 16x16-er Matrixen werden ja selber bereits in Linien oder Zick-Zack aufgebaut sein.
Da Du davon dann 4 Stück in 2x2 aneinander legst, werden die LEDs 'schon ganz gut durcheinander' angesteuert werden müssen.

Da Lady Ada diese Matrixen auch anbietet, bin ich aber guter Hoffnung, daß Da eine 'Lösung von der Stange' vorhanden sein wird - vll. auch nur per Hilfs-Funktion, aber immerhin.

MfG