Zum Beispiel 88,888 oder 88.888 auf 32x8 DOT-Matrix anzeigen lassen

Hallöle aus dem Tal, da wo die Züge an der Decke hängen :slight_smile:
Mittlerweile glaube ich das bei mir auch was verkehrt läuft. Ich versuche immer Sachen aus, wo ganz schnell an meine Grenzen komme. Diesmal möchte ich eine serial empfangenen Zahl z.B. char=88,888 auf ein 32x8 Matrix anzeigen lassen. Habe nun schon mehrere lib´s probiert....Kein Erfolg! Ist es überhaupt möglich?

Nun meine Frage an euch, die mit beiden Füßen auf dem Boden stehn :wink:
Kann man die Leerzeichen vor oder nachkomma in einer lib evenuell ändern?

[code]
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>

int pinCS = 10; // Attach CS=10, DIN=11,CLK=13
int numberOfHorizontalDisplays = 4;
int numberOfVerticalDisplays = 1;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);


String rz1 = "8,888";
String rz2 = "88,888";

int spacer = 1;
int width = 4; //+ spacer; // The font width is 5 pixels
Wird hier kein anderer Wert zugelassen?


void setup() {
  matrix.setIntensity(0); // Use a value between 0 and 15 for brightness
  matrix.setRotation(0, 1);    // The first display is position upside down
  matrix.setRotation(1, 1);    // The first display is position upside down
  matrix.setRotation(2, 1);    // The first display is position upside down
  matrix.setRotation(3, 1);    // The first display is position upside down
}

void loop() {
  matrix.setTextSize(1);
  matrix.fillScreen(LOW);
  matrix.setCursor(0, 1);
  matrix.print(rz1);
  matrix.write(); // Send bitmap to display
  delay(1000);
  matrix.fillScreen(LOW);
  matrix.setCursor(0, 1);
  matrix.print(rz2);
  matrix.write(); // Send bitmap to display
  delay(1000);
}

[/code]
Tausend Dank für jeden Tipp von euch

Benziner:
Diesmal möchte ich eine serial empfangenen Zahl z.B. char=88,888 auf ein 32x8 Matrix anzeigen lassen.

Nun meine Frage an euch, die mit beiden Füßen auf dem Boden stehn :wink:
Kann man die Leerzeichen vor oder nachkomma in einer lib evenuell ändern?

Also... nichts ist unmöglich...
Ich steh noch ein paar Minuten...
Warum willst die Leerzeichen ändern?
Jedes (auf Deinem Bild dargestellte) Zeichen ist ein fixedChar. Villeicht gibts ja was in der Lib, das die Zeichenbreite auf das Mindestmaß beschränkt. Diese lib:? GitHub - markruys/arduino-Max72xxPanel: Arduino interface for Adafruit-GFX to control a set of 8x8 LEDs with a MAX7219 or MAX7221

Mal drüber nachgedacht einen Lauftext draus zu machen?

my_xy_projekt:
Villeicht gibts ja was in der Lib, das die Zeichenbreite auf das Mindestmaß beschränkt.

Die Library ist ziemlich low level. Die hat einen Puffer für das ganze Display und kann einen Pixel darauf zeichnen. Das schreiben ganzer Zeichen erfolgt mit Adafruit_GFX

Hallo zusammen, schön das Ihr wieder mit Rat und Tat zur Seite steht. Daumen hoch !!!
@xy Projekt
es soll möglich eine z.B. 12,123 auf einen Blick ablesen zu können. Ja es ist diese lib die ich verwenden.
Ich verstehe nicht warum die lip für 5 x 5Dot Zahlen, 5Dot leerzeichen und einen Punkt (auch wenn er 2 Dot breit wäre)
mit 32 Dot Breite nicht klar kommt auf einmal darzustellen. Den zusammen sind es doch nur 32 Dot ?

Ich nehme an das Komma auch 5 Dot breit ist, daher mein Ansatz die lib zu ändern sprich ein komma eben nur 2Dot breit zu machen.

@Serenifly
vielen Dank für deine Info.Wenn ich Dich recht verstanden habe, soll ich erst die Zahl schreiben und abschließend ein Punkt setzen. War das so gemeint?


Benziner:
es soll möglich eine z.B. 12,123 auf einen Blick ablesen zu können.

Ich nehme an das Komma auch 5 Dot breit ist

soll ich erst die Zahl schreiben und abschließend ein Punkt setzen. War das so gemeint?

Ok, dann wirds ne Handvoll mehr Zeilen brauchen, denn
Du liegst mit den dots richtig, wenn ich mir das ansehe.
Nein.
Erst die Zahl vor dem Komma schreiben - dann den Cursor neu setzen, dann das pünktchen, den cursor neu setzen, dann das Nachkomma. (vorausgesetzt der punkt überschreibt nicht das, was schon da ist... - da muss ich aber ggfls. in den Code schauen. Besser einfach ausprobieren.)

[Serenifly hat reingeschaut - na dann :wink: ]
Passt.

War das so gemeint?

Das war einfach ein Hinweis darauf dass das Problem nicht an der Bibliothek des Displays liegt weil die dafür gar nicht zuständig ist.

Ich verstehe nicht warum die lip für 5 x 5Dot Zahlen, 5Dot leerzeichen und einen Punkt (auch wenn er 2 Dot breit wäre)

Das ist bei mono spaced Fonts normal. Da haben alle Zeichen einfach 5 Spalten Breite und es werden immer alle gezeichnet. Dadurch wird vieles einfacher.

Das kann man theoretisch auch anpassen. Zeile 1134ff: Adafruit-GFX-Library/Adafruit_GFX.cpp at master · adafruit/Adafruit-GFX-Library · GitHub
Hier könnte man abfragen ob ein Punkt vorliegt und dann entsprechend weniger Spalten zeichnen. Also nicht alle 5 Spalten des Zeichens darstellen. Das gleiche geht auch mit anderen schmalen Zeichen.

Aber da musst du wirklich verstehen was da gemacht wird. Für Anfänger ist das nichts

Adafruit_GFX unterstützt aber auch andere Fonts die auch proportional sein können wenn ich das richtig sehe. In die Richtung nachzuforschen wäre der saubere Weg

Serenifly:
Das ist bei mono spaced Fonts normal. Da haben alle Zeichen einfach 5 Spalten Breite und es werden immer alle gezeichnet. Dadurch wird vieles einfacher.

Ob alle Pixel wirklich immer gesetzt werden, wage ich zu bezweifeln.
Für jedes Zeichen gibt es bei den GFX-Fonts eine Metadatenstruktur (aus gfxfont.h):

typedef struct {
  uint16_t bitmapOffset; ///< Pointer into GFXfont->bitmap
  uint8_t width;         ///< Bitmap dimensions in pixels
  uint8_t height;        ///< Bitmap dimensions in pixels
  uint8_t xAdvance;      ///< Distance to advance cursor (x axis)
  int8_t xOffset;        ///< X dist from cursor pos to UL corner
  int8_t yOffset;        ///< Y dist from cursor pos to UL corner
} GFXglyph;

Wenn man für den Punkt den xOffset und xAdvance änderte, könnte der schmaler gemacht werden.
Ich habe nur noch nicht rausgefunden, welcher Font da nun tatsächlich eingesetzt wird.

Siehe auch:

Suchst Du nach sowas?

#include <U8g2lib.h>
U8G2_MAX7219_32X8_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ A2, /* data=*/ A0, /* cs=*/ A1, /* dc=*/ U8X8_PIN_NONE, /* reset=*/ U8X8_PIN_NONE);

void setup() {
  u8g2.begin();
  anzeigeZeit();
}

void loop() {}

void anzeigeZeit() {
  char buf[] = {"88.888"};
  u8g2.clearBuffer();          // clear the internal memory
  u8g2.setContrast(25);
  u8g2.setFont(u8g2_font_haxrcorp4089_tn); // choose a suitable font
  u8g2.drawStr(1, 8, buf); // write something to the internal memory
  u8g2.sendBuffer();          // transfer internal memory to the display
}

Vielen Dank an alle Helfer meines Problems, ich hab da mal probiert....

[code]
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>

int pinCS = 10; // Attach CS=10, DIN=11,CLK=13
int numberOfHorizontalDisplays = 4;
int numberOfVerticalDisplays = 1;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
int spacer = 0;
int width = 5; //+ spacer; // The font width is 5 pixels
int vorkomma;
int nachkomma;

void setup() {
  matrix.setIntensity(2); // Use a value between 0 and 15 for brightness
  matrix.setRotation(0, 1);    // The first display is position upside down
  matrix.setRotation(1, 1);    // The first display is position upside down
  matrix.setRotation(2, 1);    // The first display is position upside down
  matrix.setRotation(3, 1);    // The first display is position upside down

}

void loop() {
char Test[6]="8,888";
  auswertungZeiten();
}

void auswertungZeiten() {
  char buf[4];
  char inh[]="10,555" ;

  sscanf(inh, "%i,%s", &vorkomma, &buf);
  nachkomma = atoi(buf);

  if (vorkomma < 10) {
    matrix.setTextSize(0);
    matrix.fillScreen(LOW);
    matrix.setCursor(5, 0);
    matrix.print(vorkomma);
    matrix.write();
    matrix.setCursor(9, 4);
    matrix.print(":");
    matrix.write();
    matrix.setCursor(9, 5);
    matrix.print(":");
    matrix.write();
    matrix.setCursor(14, 0);
    if (nachkomma < 10) {
      matrix.setCursor(14, 0);
      matrix.print("00");
      matrix.write();
    }
    if ((nachkomma < 100) & (nachkomma > 9)) {
      matrix.setCursor(14, 0);
      matrix.print("0");
      matrix.write();
    }
    matrix.print(nachkomma);
    matrix.write();
  }
  if ((vorkomma > 9) & (vorkomma < 20)) {
    matrix.setTextSize(0);
    matrix.fillScreen(LOW);
    matrix.setCursor(-1, 0);
    matrix.print(vorkomma);
    matrix.write();
    matrix.setCursor(9, 4);
    matrix.print(":");
    matrix.write();
    matrix.setCursor(9, 5);
    matrix.print(":");
    matrix.write();
    matrix.setCursor(14, 0);
    if (nachkomma < 10) {
      matrix.setCursor(14, 0);
      matrix.print("00");
      matrix.write();
    }
    if ((nachkomma < 100) & (nachkomma > 9)) {
      matrix.setCursor(14, 0);
      matrix.print("0");
      matrix.write();
    }
    matrix.print(nachkomma);
    matrix.write();
  }
  matrix.print(nachkomma);
  matrix.write();
  if (vorkomma > 19) {
    matrix.setTextSize(0);
    matrix.fillScreen(LOW);
    matrix.setCursor(0, 0);
    matrix.print(vorkomma);
    matrix.write();
    matrix.setCursor(10, 4);
    matrix.print(":");
    matrix.write();
    matrix.setCursor(10, 5);
    matrix.print(":");
    matrix.write();
    matrix.setCursor(14, 0);
    if (nachkomma < 10) {
      matrix.setCursor(14, 0);
      matrix.print("00");
      matrix.write();
    }
    if ((nachkomma < 100) & (nachkomma > 9)) {
      matrix.setCursor(14, 0);
      matrix.print("0");
      matrix.write();
    }
    matrix.print(nachkomma);
    matrix.write();
  }
  while (1);
}

[/code]
Gut Nächtle und vielen Dank an alle die mal wieder einem Anfänger sehr geholfen haben.

wno158:
Ob alle Pixel wirklich immer gesetzt werden, wage ich zu bezweifeln.
Für jedes Zeichen gibt es bei den GFX-Fonts eine Metadatenstruktur (aus gfxfont.h):

Wenn man für den Punkt den xOffset und xAdvance änderte, könnte der schmaler gemacht werden.

Ich habe ja gesagt dass das prinzipiell geht. Bei Monospace Font wird das aber ganz absichtlich nicht genutzt

Das Programm aus #8 hat ein paar Unsauberkeiten und unnötige Längen, Du machst es Dir unnötig schwer, daher habe ich es mal etwas überarbeitet:

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>

const byte pinCS = 10; // Attach CS=10, DIN=11,CLK=13
const byte numberOfHorizontalDisplays = 4;
const byte numberOfVerticalDisplays = 1;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);

void setup() {
  matrix.setIntensity(2); // Use a value between 0 and 15 for brightness
  matrix.setRotation(0, 1);    // The first display is position upside down
  matrix.setRotation(1, 1);    // The first display is position upside down
  matrix.setRotation(2, 1);    // The first display is position upside down
  matrix.setRotation(3, 1);    // The first display is position upside down

}

void loop() {
  const char text1[] = "88,888";
  auswertungZeiten(text1);
  delay(2000);
  const char text2[] = "8,111";
  auswertungZeiten(text2);
  delay(2000);
  const char text3[] = "0,888";
  auswertungZeiten(text3);
  while (1);
}

void auswertungZeiten(const char * inh) {
  uint16_t vorkomma;
  uint16_t nachkomma;
  char buf[4];
  sscanf(inh, "%u,%s", &vorkomma, buf);
  nachkomma = atoi(buf);
  matrix.setTextSize(0);
  matrix.fillScreen(LOW);
  if (vorkomma < 10) {
    matrix.setCursor(6, 0);
  } else {
    matrix.setCursor(0, 0);
  }
  matrix.print(vorkomma);
  matrix.setCursor(10, 6);
  matrix.print("!");       // als Kommaersatz
  matrix.setCursor(14, 0);
  if (nachkomma < 100) {
    matrix.print("0");
  }
  if (nachkomma < 10) {
    matrix.print("0");
  }
  matrix.print(nachkomma);
  matrix.write();
}

Kurze Frage: Sicher das das richtig ist?

Benziner:

    if ((nachkomma < 100) & (nachkomma > 9)) {

if ((vorkomma > 9) & (vorkomma < 20)) {

if ((nachkomma < 100) & (nachkomma > 9)) {

if ((nachkomma < 100) & (nachkomma > 9)) {

Hallo und guten Abend zusammen Ihr Weltbesten Menschen.
@agmue
Ich weiß garnicht mehr wie ich mich bei Dir bedanken soll....Du hast schon soviel für mich gemacht. Tausend DANK !!!
Ich habe den Code bissel an meinem angepasst, und es ist genauso wie ich es mir vorgestellt habe. Jedoch habe ich dazu noch nee Frage... Ist es nicht möglich für den overload (wert > 99) ein z.B. void overload zu nutzen? Ich hab´s versucht aber er kann den Aufruf overload dann nicht finden.
@xy projekt
Da hast Du vollkommen recht gehabt, hatte gestern Abend die Sendegeschwindigkeit sehr hoch eingestellt, da konnte man den Fehler nicht sehen.Lag bestimmt an den kleinen Augen, die ich hatte :wink:

Für den nächsten Step hätte ich noch nee Frage, und zwar möchte ich den ganzen Datenstring über ein NRF24L01 an mehrere Empfänger senden. Da der Datenstring die mögliche Sendegröße überschreitet, stehe ich schon wieder vor einem Problem. Mein gedanke war es die aufgeteilten Daten häppchenweise zu senden, würde das funktionieren?

So, die Augen sind eckig, der Laptop heiß, es ist schon wieder spät, ja sooo ein sch....
Euch ein gut nächtle.

[code]
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>

const byte pinCS = 10; // Attach CS=10, DIN=11,CLK=13
const byte numberOfHorizontalDisplays = 4;
const byte numberOfVerticalDisplays = 1;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
unsigned int vorkomma;
unsigned int nachkomma;
const byte numChars = 150;
char buf[numChars];

void setup() {
  matrix.setIntensity(2); // Use a value between 0 and 15 for brightness
  matrix.setRotation(0, 1);    // The first display is position upside down
  matrix.setRotation(1, 1);    // The first display is position upside down
  matrix.setRotation(2, 1);    // The first display is position upside down
  matrix.setRotation(3, 1);    // The first display is position upside down
  matrix.setCursor(1, 0);
  matrix.print("-----");
  matrix.write();
  delay(1000);
  Serial.begin(9600);
}
void loop() {
  static uint16_t ndx = 0;
  char rc;
  while (Serial.available() > 0) {
    rc = Serial.read();
    if (rc == ';') {
      buf[ndx] = '\n';
      ndx = 0;
      auswertungZeiten();
    }
    else {
      buf[ndx] = rc;
      ndx = (1 + ndx) % numChars;
    }
  }
}
void auswertungZeiten() {
  char * bez = strtok(buf, ":");                       // auch das stammt aus agmue´s Feder
  char * inh = strtok(NULL, ":");                      // auch das stammt aus agmue´s Feder
  char buf2[8];

  if (!strncmp(bez, "RZ1", numChars)) {
    sscanf(inh, "%i,%s", &vorkomma, &buf2);
    nachkomma = atoi(buf2);
    matrix.setTextSize(0);
    matrix.fillScreen(LOW);
  }
  if (vorkomma > 99) {        //overload
    matrix.fillScreen(LOW);
    matrix.setCursor(5, 0);
    matrix.print(">100");
    matrix.write();
  }
  else {
    if (vorkomma < 10) {
      matrix.setCursor(6, 0);
    } else {
      matrix.setCursor(0, 0);
    }
    matrix.print(vorkomma);
    matrix.setCursor(10, 6);
    matrix.print("!");       // als Kommaersatz
    matrix.setCursor(14, 0);
    if (nachkomma < 100) {
      matrix.print("0");
    }
    if (nachkomma < 10) {
      matrix.print("0");
    }
    matrix.print(nachkomma);
    matrix.write();
  }
}

[/code]

Benziner:
Ich weiß garnicht mehr wie ich mich bei Dir bedanken soll...

Foto von Deiner Rennstrecke?

Benziner:
Jedoch habe ich dazu noch nee Frage... Ist es nicht möglich für den overload (wert > 99) ein z.B. void overload zu nutzen? Ich hab´s versucht aber er kann den Aufruf overload dann nicht finden.

Ich tappe gänzlich im Dunkeln, was Du meinst :confused:

Meine Programmfeile war nochmal tätig:

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>

const byte pinCS = 10; // Attach CS=10, DIN=11,CLK=13
const byte numberOfHorizontalDisplays = 4;
const byte numberOfVerticalDisplays = 1;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);

void setup() {
  matrix.setIntensity(2); // Use a value between 0 and 15 for brightness
  matrix.setRotation(0, 1);    // The first display is position upside down
  matrix.setRotation(1, 1);    // The first display is position upside down
  matrix.setRotation(2, 1);    // The first display is position upside down
  matrix.setRotation(3, 1);    // The first display is position upside down
  matrix.setCursor(1, 0);
  matrix.print("-----");
  matrix.write();
  delay(1000);
  Serial.begin(9600);
}
void loop() {
  const byte numChars = 40;          //► längster zu erwartender Name, den das Vorsystem ausgeben kann: "F1:Friedhelm Busch;\0"
  static char buf[numChars];         //► lokal genügt
  static uint16_t ndx = 0;
  char rc;
  while (Serial.available() > 0) {
    rc = Serial.read();
    if (rc == ';') {
      buf[ndx] = '\0';               //►► Zeichenkettenendesteuerzeichen, nicht '\n'
      auswertungZeiten(buf);         //► Zeiger auf Zeichenkette übergeben
      ndx = 0;
    }
    else {
      buf[ndx] = rc;
      ndx = (1 + ndx) % numChars;
    }
  }
}
// RZ1:5,888;
void auswertungZeiten(char * buf1) { //► Sternchen für Zeiger
  unsigned int vorkomma = 0;
  unsigned int nachkomma = 0;
  char * bez = strtok(buf1, ":");
  char * inh = strtok(NULL, ":");
  char buf2[8];

  matrix.fillScreen(LOW);                  //► einmal genügt
  if (!strncmp(bez, "RZ1", 3)) {
    sscanf(inh, "%i,%s", &vorkomma, buf2); //►► hier die Referenz entfernt
    nachkomma = atoi(buf2);
    matrix.setTextSize(0);
  }
  if (vorkomma > 99) {        //overload
    matrix.setCursor(5, 0);
    matrix.print(">100");
  }
  else {
    if (vorkomma < 10) {
      matrix.setCursor(6, 0);
    } else {
      matrix.setCursor(0, 0);
    }
    matrix.print(vorkomma);
    matrix.drawPixel(12, 6, HIGH);       //► als Kommaersatz
    matrix.drawPixel(12, 7, HIGH);
    matrix.setCursor(14, 0);
    if (nachkomma < 100) {
      matrix.print("0");
    }
    if (nachkomma < 10) {
      matrix.print("0");
    }
    matrix.print(nachkomma);
  }
  matrix.write();                       //► einmal genügt
}

Die Kommentare mit zwei Dreiecken scheinen mir wichtig zu sein.

  matrix.fillScreen(LOW);                  //► einmal genügt

Nun, bleibt es bei 0,000 stehen, und blinkt bei Datenempfang nur kurz auf und wechselt wieder nach 0,000


Hallo agmue, bin immer wieder von Dir beeindruckt. Selbst wenn es läuft versuchst Du es zu verbessern.
Hier mal den Sketch wie ich das meine mit Void overload.

[code]
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>

const byte pinCS = 10; // Attach CS=10, DIN=11,CLK=13
const byte numberOfHorizontalDisplays = 4;
const byte numberOfVerticalDisplays = 1;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
unsigned int vorkomma;
unsigned int nachkomma;
const byte numChars = 150;
char buf[numChars];

void setup() {
  matrix.setIntensity(2); // Use a value between 0 and 15 for brightness
  matrix.setRotation(0, 1);    // The first display is position upside down
  matrix.setRotation(1, 1);    // The first display is position upside down
  matrix.setRotation(2, 1);    // The first display is position upside down
  matrix.setRotation(3, 1);    // The first display is position upside down
  matrix.setCursor(1, 0);
  matrix.print("-----");
  matrix.write();
  delay(1000);
  Serial.begin(9600);
}
void loop() {
  static uint16_t ndx = 0;
  char rc;
  while (Serial.available() > 0) {
    rc = Serial.read();
    if (rc == ';') {
      buf[ndx] = '\n';
      ndx = 0;
      auswertungZeiten();
    }
    else {
      buf[ndx] = rc;
      ndx = (1 + ndx) % numChars;
    }
  }
}
void auswertungZeiten() {
  char * bez = strtok(buf, ":");                       // auch das stammt aus agmue´s Feder
  char * inh = strtok(NULL, ":");                      // auch das stammt aus agmue´s Feder
  char buf2[8];

  if (!strncmp(bez, "RZ1", numChars)) {
    sscanf(inh, "%i,%s", &vorkomma, &buf2);
    nachkomma = atoi(buf2);
    matrix.setTextSize(0);
    matrix.fillScreen(LOW);
  }
  if (vorkomma > 99) {        //overload
    overload();
  }
  else {
    if (vorkomma < 10) {
      matrix.setCursor(6, 0);
    } else {
      matrix.setCursor(0, 0);
    }
    matrix.print(vorkomma);
    matrix.setCursor(10, 6);
    matrix.print("!");       // als Kommaersatz
    matrix.setCursor(14, 0);
    if (nachkomma < 100) {
      matrix.print("0");
    }
    if (nachkomma < 10) {
      matrix.print("0");
    }
    matrix.print(nachkomma);
    matrix.write();
  }
}
void overload() {
  matrix.fillScreen(LOW);
  matrix.setCursor(5, 0);
  matrix.print(">100");
  matrix.write();
}
}

[/code]

Sinn, hier soll dann eine Laufschrift angzeigt werden.
Fehler 'overload' was not declared in this scope
Und natürlich Dein wunsch vom Bild

Benziner:
Nun, bleibt es bei 0,000 stehen, und blinkt bei Datenempfang nur kurz auf und wechselt wieder nach 0,000


Mach mal bitte aus:
Zeile 43/44
alt:

  unsigned int vorkomma = 0;
  unsigned int nachkomma = 0;

neu:

  static unsigned int vorkomma = 0;
  static unsigned int nachkomma = 0;

Ergebnis?

Benziner:

  matrix.print(">100");

matrix.write();
}
}



Fehler 'overload' was not declared in this scope

Ja.
Da ist eine Klammer zuviel.

my_xy_projekt:
Mach mal bitte aus:
Zeile 43/44
alt:

  unsigned int vorkomma = 0;

unsigned int nachkomma = 0;



neu:


static unsigned int vorkomma = 0;
 static unsigned int nachkomma = 0;



Ergebnis?

Hallo xy projekt,
und es funktioniert..... ob ich das jemals verstehen werde? Vielen Dank. Mittlerweile überlege ich, ob nicht mal einen Kurs besuchen sollte....Ich will´s wissen. :slight_smile:

Benziner:
und es funktioniert..... ob ich das jemals verstehen werde?

Naja. Das ist ganz einfach.
Ursprünglich war vorkomma und nachkomma vor dem setup.
Damit steht die Variable im gesamten Sketch dauerhaft zur Verfügung.

agmue hat festgestellt das die Variable eigentlich nur in einer Funktion gebraucht wird.
Darum hat er sie in die Funktion geschoben.
Das ist schick.
ABER:
Wird die Funktion verlassen, verliert die Variable ihren Wert.
Um das zu verhindern, wird der Variablen mitgeteilt, das sie static ist.
Das heisst, das die Variable (und damit ihr Inhalt) nicht beim beenden der Funktion ihren Wert verliert.

Der Vorteil dieser Variante ist, das die Varable nur gültig ist, solange sie in der Funktion verarbeitet wird.
Deutlich wird das, wenn Bezeichnungen mehrfach verwendet werden sollen.
Das beste Beispiel ist "lastmillis" was hier in Sketchen immer verwendet wird.

Überspitzt: Wird lastmillis vor setup eingerichtet, gibt es nur eine lastmills.
Die Variable kann an jedem Punkt des Codes verändert werden.

Wird lastmillis in jeder Funktion einzeln als static definiert, laufen mehrere lastmillis mit.
Verändert werden kann sie nur in der jeweiligen Funktion.

Vielleicht hilft eine Bettlektüre?
https://www.arduinoforum.de/code-referenz
Da gibt es ein pdf - runterladen, durchlesen, nicht auswendig lernen.