Forum: Compiler & IDEs Arduino Text programmieren


von Christian (Gast)


Lesenswert?

Hallo, wie programmiere ich einen zweizeiligen Text für eine 16x16 
Matrix in der Arduino IDE? Ich habe bisher nur einen "Scrolling Text" 
hinbekommen aber nur im oberen Bereich der Matrix. Außerdem hätte ich 
gerne gewusst wie man den Text in die Mitte bekommt, also die Position 
verändert. Danke

: Gesperrt durch Moderator
von 100Ω W. (tr0ll) Benutzerseite


Lesenswert?

Welche 16x16-Matrix? Es gibt ja nur eine am Markt.
SCNR

PS: Meine Glaskugel wird gerade kalibriert.

: Bearbeitet durch User
von Christian (Gast)


Lesenswert?

100Ω W. schrieb:
> Welche 16x16-Matrix? Es gibt ja nur eine am Markt.
> SCNR
>
> PS: Meine Glaskugel wird gerade kalibriert.

Diese Neomatrix mit den WS2812b LED´s drauf.

von 100Ω W. (tr0ll) Benutzerseite


Lesenswert?

Christian schrieb:
> Diese Neomatrix mit den WS2812b LED´s drauf.

Welche ist diese Neomatrix?
Kannst du hier den Code reinstellen, den Verwendest?

Troll?

von Christian (Gast)


Lesenswert?

100Ω W. schrieb:
> Christian schrieb:
>> Diese Neomatrix mit den WS2812b LED´s drauf.
>
> Welche ist diese Neomatrix?
> Kannst du hier den Code reinstellen, den Verwendest?
>
> Troll?

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>

// DATA PIN
// If you want to use a different data pin on your microcontroller 
CHANGE THIS!
#define DATA_PIN 6

#define arr_len( x )  ( sizeof( x ) / sizeof( *x ) )

// Matrix setup params
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(48, 16, DATA_PIN,
NEO_MATRIX_TOP    + NEO_MATRIX_LEFT +
NEO_MATRIX_COLUMNS +NEO_MATRIX_ZIGZAG,
NEO_GRB            + NEO_KHZ800);


// Edit this
// The important stuff, your message and colors

char* Text[]= {" "," "};
const uint16_t colors[] = {
  matrix.Color(0, 128, 0), matrix.Color(100, 255, 0), matrix.Color(255, 
255, 0),matrix.Color(0, 0, 255), matrix.Color(128, 0, 0), 
matrix.Color(255, 69, 0), matrix.Color(0, 255, 0)};
int brightness = 15;
// End Edit

int numMode = arr_len(Text)-1;
int numColor = arr_len(colors)-1;
int pixelPerChar = 4;
int maxDisplacement;
int mode = 0;

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

int y = matrix.height();
int x = matrix.width();
int pass = 0;
int line_pass = 0;

void loop() {

  // if mode greater than numMode reset
  if (mode > numMode) { mode = 0; }

  matrix.fillScreen(0);
  matrix.setCursor(x, 0);
  scroll(Text[mode],20);
}

// this does the magic of scrolling
void scroll(char* message,int delays) {
  maxDisplacement = strlen(message) * pixelPerChar + matrix.width();
  if(++line_pass > matrix.width()) line_pass = 0;
  matrix.print(String(message));
  if(--x < -maxDisplacement) {
    x = matrix.width();
    if(++pass >= numColor) { pass = 0;  };
    matrix.setTextColor(colors[pass]);
    mode++;
  }
  matrix.show();
  delay(delays);
}

von 100Ω W. (tr0ll) Benutzerseite


Lesenswert?

Tausch die Null in der Zeile gegen eine andere Zahl aus, die <16 ist.
1
matrix.setCursor(x, 0);

: Bearbeitet durch User
von Christian (Gast)


Lesenswert?

100Ω W. schrieb:
> Tausch die Null in der Zeile gegen eine andere Zahl aus, die <16
> ist.matrix.setCursor(x, 0);

Dadurch ändert sich die Textposition richtig? Und wie muss ich vorgehen 
wenn der Text dann zweizeilig laufen soll?

von 100Ω W. (tr0ll) Benutzerseite


Lesenswert?

Christian schrieb:
> Dadurch ändert sich die Textposition richtig?

Ja, sollte.

von Christian (Gast)


Lesenswert?

100Ω W. schrieb:
> Christian schrieb:
>> Dadurch ändert sich die Textposition richtig?
>
> Ja, sollte.

Gut okay und welche Zahl bezeichnet die Mitte von 16x16?

von Stefan S. (chiefeinherjar)


Lesenswert?

Christian schrieb:
> 100Ω W. schrieb:
>> Christian schrieb:
>>> Dadurch ändert sich die Textposition richtig?
>>
>> Ja, sollte.
>
> Gut okay und welche Zahl bezeichnet die Mitte von 16x16?

42!

von 100Ω W. (tr0ll) Benutzerseite


Lesenswert?

Christian schrieb:
> Gut okay und welche Zahl bezeichnet die Mitte von 16x16?
1
16/2 = 8
2
8 - 1, weil mit Null begonnen wird zu Zählen

von Christian (Gast)


Lesenswert?

100Ω W. schrieb:
> Christian schrieb:
>> Gut okay und welche Zahl bezeichnet die Mitte von 16x16?
> 16/2 = 8
> 8 - 1, weil mit Null begonnen wird zu Zählen

Also: matrix.setCursor(x, 8);

von 100Ω W. (tr0ll) Benutzerseite


Lesenswert?

Christian schrieb:
> Also: matrix.setCursor(x, 8);

Ja.

von Christian (Gast)


Lesenswert?

100Ω W. schrieb:
> Christian schrieb:
>> Also: matrix.setCursor(x, 8);
>
> Ja.

Jetzt läuft die Schrift unten entlang nicht mittig! :(

von 100Ω W. (tr0ll) Benutzerseite


Lesenswert?

Christian schrieb:
> Jetzt läuft die Schrift unten entlang nicht mittig! :(

Dann Probiere andere Werte aus.

von Christian (Gast)


Lesenswert?

100Ω W. schrieb:
> Christian schrieb:
>> Jetzt läuft die Schrift unten entlang nicht mittig! :(
>
> Dann Probiere andere Werte aus.

Habs nochmal geteilt: matrix.setCursor(x, 4); scheint mittig zu sein! ;)

von Stefan S. (chiefeinherjar)


Lesenswert?

Christian schrieb:
> 100Ω W. schrieb:
>> Christian schrieb:
>>> Jetzt läuft die Schrift unten entlang nicht mittig! :(
>>
>> Dann Probiere andere Werte aus.
>
> Habs nochmal geteilt: matrix.setCursor(x, 4); scheint mittig zu sein! ;)

Damit auch noch etwas sinnvolles von mir kommt:
Der Font wird wahrscheinlich 7 bzw. 8 Pixel hoch sein und die Matrix von 
oben nach unten beschrieben. Wenn also die Schrift bei Pixel-Reihe Nr. 4 
beginnt, dann erstreckt sie sich in vertikale Richtung bis Pixel-Reihe 
Nr. 11 bzw. 12; so erscheint die Schrift mittig.

Das erklärt auch, warum bei matrix.setCursor(x, 8) die Schrift

Christian schrieb:
> unten entlang nicht mittig! :(

läuft.

Edit: etwas präziser formuliert

: Bearbeitet durch User
Beitrag #6670075 wurde von einem Moderator gelöscht.
von Christian (Gast)


Lesenswert?

Nur wie man sie zweizeilig laufen lässt (oben/unten) habe ich noch nicht 
herausgefunden, und kann mir hier scheinbar auch niemand sagen.

von Cyblord -. (cyblord)


Lesenswert?

Christian schrieb:
> Nur wie man sie zweizeilig laufen lässt (oben/unten) habe ich noch nicht
> herausgefunden, und kann mir hier scheinbar auch niemand sagen.

Vielleicht mal selber drüber nachdenken? Wenn man weiß wie man welchen 
Text wo anzeigen lässt, wäre es dann WIRKLICH zu viel verlangt mal eine 
Minute das Gehirn einzuschalten anstatt darauf zu warten dass einem 
jemand die Lösung frei Haus in den Hintern schiebt?

: Bearbeitet durch User
Beitrag #6670110 wurde von einem Moderator gelöscht.
Beitrag #6670116 wurde von einem Moderator gelöscht.
Beitrag #6671048 wurde von einem Moderator gelöscht.
Beitrag #6671099 wurde von einem Moderator gelöscht.
Beitrag #6671103 wurde von einem Moderator gelöscht.
Beitrag #6671104 wurde von einem Moderator gelöscht.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.