2 Verschiedene Laufschriften, Code will nicht

Ich schon wieder, hoffe ist nur was simples. und ich habe nur ein Knoten im Hirn.

Da durch Hhilfe bzw selbst rausfinden nun die Schrift hinhaut.
Anderes Problem. Ich bzw für den ich das Mache, möchte gerne 2 Schriftarten haben.
Das Funktioniert auch. Aber ich bekomme es nicht hin das Beide Schriftarten nacheinander Durchlaufen.
Entweder nur die Eine oder die andere.
Bzw er macht da Murks.

Der Komplette code kommt gleich. Nein ihr könnt ihn leider nicht ausprobieren, da ihr die Schriftarten nicht habt. Und ich kann euch nur die Links zu den Original Libs geben.

#include <FastLED.h>

#include <LEDMatrix.h>
#include <LEDText.h>
#include <storming.h>  // Schriftart 1
#include <odinson.h>   // Schriftart 2
// Change the next 6 defines to match your matrix type and size

#define LED_PIN        2
#define COLOR_ORDER    GRB
#define CHIPSET        WS2812B

#define MATRIX_WIDTH   -32
#define MATRIX_HEIGHT  8
#define MATRIX_TYPE    VERTICAL_ZIGZAG_MATRIX

cLEDMatrix<MATRIX_WIDTH, MATRIX_HEIGHT, MATRIX_TYPE> leds;

cLEDText ScrollingMsg;                                                                                 // Laufschrift 1
cLEDText ScrollingMsg1;                                                                                // Laufschrift 2

const unsigned char TxtDemo[] = {                                                                     // Text 1, und die Effekte 
                                  EFFECT_HSV_AH "\x00\xff\xff\xff\xff\xff" "    RAGNAROEK"
                                  };

const unsigned char TxtDemo1[] = {                                                                    // Text 2, und die Effekte
                                  EFFECT_HSV_AH "\x00\xff\xff\xff\xff\xff" "    RAGNAROEK"
                                  };


void setup()
{
  FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(leds[0], leds.Size());
  //FastLED.setCorrection(true);
  FastLED.setBrightness(10);
  FastLED.clear(true);
  FastLED.show();

  ScrollingMsg.SetFont(FontStormning7x9Data);                                                         // Schriftart 1
  ScrollingMsg.Init(&leds, leds.Width(), ScrollingMsg.FontHeight() + 1, 0, 0);
  ScrollingMsg.SetText((unsigned char *)TxtDemo, sizeof(TxtDemo) - 1);
  ScrollingMsg.SetTextColrOptions(COLR_RGB | COLR_SINGLE, 0xff, 0x00, 0xff);

  ScrollingMsg1.SetFont(FontOdinson8x9Data);                                                          // Schriftart 2
  ScrollingMsg1.Init(&leds, leds.Width(), ScrollingMsg1.FontHeight() + 1, 0, 0);
  ScrollingMsg1.SetText((unsigned char *)TxtDemo1, sizeof(TxtDemo1) - 1);
  ScrollingMsg1.SetTextColrOptions(COLR_RGB | COLR_SINGLE, 0xff, 0x00, 0xff);


}


void loop(){

   if (ScrollingMsg.UpdateText() == -1)
    ScrollingMsg.SetText((unsigned char *)TxtDemo, sizeof(TxtDemo) - 1);
    else
    FastLED.show();
    delay(20);
  


}

Das wäre der gesammte Code.
Immoment zeigt er nur die Schriftart 1 An.

Probiert habe ich.

void loop(){

   if (ScrollingMsg.UpdateText() == -1)
    ScrollingMsg.SetText((unsigned char *)TxtDemo, sizeof(TxtDemo) - 1);
    else
    FastLED.show();
    delay(20);
  
  if (ScrollingMsg1.UpdateText() == -1)
    ScrollingMsg1.SetText((unsigned char *)TxtDemo1, sizeof(TxtDemo1) - 1);
    else
    FastLED.show();
    delay(20);

}

Da da mischt er beide zusammen und alle Zeichen sind ineinander also sieht es nach murks aus.

Dann habe ich das hier Probiert.

void loop(){

   if (ScrollingMsg.UpdateText() == -1)
    ScrollingMsg.SetText((unsigned char *)TxtDemo, sizeof(TxtDemo) - 1);
    else if 
    (ScrollingMsg1.UpdateText() == -1)
    ScrollingMsg1.SetText((unsigned char *)TxtDemo1, sizeof(TxtDemo1) - 1);
    else
    FastLED.show();
    delay(20);
            
}

Da Zeigt er nur Schriftart 2 Richtig an, und Schriftart 1 kommt nur mal kurtz 2 zeichen oder garnicht oder zeigt es gemischt wie im ersten versuch an. aber nie komplett.

Und nun weis ich nicht was ich noch hatte. jedenfalls ganz viele andere versuche.
wo er dann garnix anzeigte.
und sehr viele fehlermeldungen mit else bevor if. und irgend was mit ; fehte
und das { irgend wo falsch wäre. oder zu viel

entweder ich habe nen knoten im hirn oder ich mache grundlegend was falsch.

er arbeitet doch den loop nacheinander ab. und wenn die erste if else durch ist nimmt er doch den 2ten if else. aber warum tut er das nicht wirklich ?

vieleicht habt ihr ne idee.

( und nein ich male jetzt nicht wieder den aufbau des dingens auf. und wie es angeschlossen ist und und und. weil es ist ein reines code prohblem und kein strom, spannung, watt, anschluss, widerstand, elko, kabel, kabelfarben, kabellänge, kabeldicke problem)

die Libs sind diese hier,

https://github.com/AaronLiddiment/LEDText
https://github.com/AaronLiddiment/LEDMatrix
https://github.com/FastLED/FastLED

bin ich verwirrt? irgendwie schon. Durchblicke nicht ich.

Macht nix ich blicke da ja auch nicht wirklich durch. und habe das prohblem das er nicht erst die schriftart1 anzeigt dann die schriftart 2.

und es irgend wie im loop sein muss das ich da irgend wie das nicht so verknüpft bekomme das es ebend beides anzeigt.

Wenn zwischen den Ausgaben keine Lücke bleiben darf, wird es kompliziert.
Erste Ausgabe durchlaufen lassen - Wenn durchgelaufen zweite Ausgabe starten - Wenn durchgelaufen erste Ausgabe starten- Wenn durchgelaufen zweite Ausgabe starten...
Rewind....

doch da darf ne lücke bleiben. nur nicht all zu groß. wenn für ne halbe oder 1 sekunde nix angezeigt wird ist das nicht schlimm. der text ist der selbe nur ne andere schriftart. wenn es 2 verschiedene texte wären, wäre es ja sehr einfach.

aber er soll halt die formatierung bzw das aussehen der buchstaben ändern. ka ob du das verstehst. die buchstaben in schriftart 1 sehen anders aus wie in schriftart 2. von der form her. die licht effekte sind die selben also die leds leuchten mit der selben farbe.

und das ist mein prohblem. das er nur die eine schriftart anzeigt oder beide mix oder garnix macht oder was auch immer nur halt nicht die schrift in schriftart ( von windows her ) Arial. und danach dann in Windings zb.

ka ab man das verstandne hat was ich da vor haben. es sind keine unterschiedlichen texte. sondern das aussehen der buchstaben in ihrer form. die er ändern soll. dazu hat der 2 fonts ( die ich erstellt habe ) und zwischen die soll er halt wechseln. erst die eine dann die andere.und da kann wie gesagt auch ne halbe oder ne ganze sekunde zwischen liegen.

ich versuche das grade mit variablen zu machen. aber das habe ich noch nie kapiert in keinem meiner projekte wie das geht. das er am anfang um eins hochzählt schaut ist die zahl um 1 höher wenn ja schreibe text mit schriftart 1.
erhöhe variable noch mal um 1. ist die variable nun 2 dann dann schreibe text mit schriftart 2 und veringere die variable um 2

( alternativ verbinde ich wei analogeingänge mit digital ausgängen und lass die immer high low schalten. ) oder mache es mit schalter das wenn schalter eins high ist schalter 2 low schriftart1 und wenn schalter 1 low ist und schalter 2 high dann schriftart 2 )

Las mir mal ein paar Minuten.
Ich hab ne Idee, aber keine Hardware! Also ohne Garantie!
Kurze Frage: Wenn der Text scrollt, wird dann immer nur eine Spalte oder ein ganzer Buchstabe gescrollt? - Ich hab wirklich sowas noch nie gesehen...

puh wie erkläre ich das. weil ich grade nicht ganz weis wie du das meinst.
Das matrix display ist 8 leds hoch und 32leds breit. die buchstaben werden von links nach rechts immer um eine zeile weiter gerückt. ein buchstabe ist 8 oder 9 leds breit. und dazwischen ist eine oder 2 reihen aus. bis der nächste buchstabe angezeigt wird. wenn der rechts angekommen wird verschwindet der erste buchstabe danbn der 2te buchstabe nacheinander bis die restlichen buchstaben nachgerückt sind.
und der letzte buchstabe ( es sind noch leerzeichen hinten dran oder vorne drann ) verschwindet dann rechts bis nix mehr angezeigt wird. und dann fängt er wieder links an. usw usw.

hoffe ich habe es erklären können, kann man hier nen video hochladen ? würde sonst versuchen mal einmal eine kurtze sequenz zu zeigen wo er nur eine schriftart durchlaufen lässt was ja funktioniert.

Ok - dann ist doch alles schick.
Das sind nicht Zeilen sondern Spalten. Merken! für die Zukunft.
Waagerecht - Zeile / senkrecht - Spalte. Karokästchen im Matheheft :wink:

Dann bau ich mal was - dauert vielleicht 14 Minuten.

1 Like

ach und das mit den variablen mit hoch und runterzählen. wieder fehler beim kompielieren. wie immer. error: 'else' without a previous 'if'
das kommt ständig. ich weis nicht mehr weiter. wenn es mehr als 2 zeilen werden beim if dann kommt das. manchmal haben anweisungen ein ; manchmal nicht. mache ich die ; weg mekkert er wegen den, mache ich die hin sagt er kein if vor dem else . und genau aus dem grund hasse ich es. mit sowas zu arbeiten. weil egal wie ich googel es wird nicht erklärrt warum wieso weshalb. die beispiele ja gut und schön aber selbst die erklären es nicht. die hauen hin. aber wehe ich füge eine zeile hinzu schon geht nix mehr.

Ok lasse dir zeit. keine hektik.

Ich hab was versucht.
Die Idee dahinter habe ich in meinen Kommentaren zu stehen.
Ich will einen Text durchlaufen lassen und dann den den nächsten aufrufen.

Da ich für die ganze Geschichte (noch) nicht weiss, ob da irgendwo ein Zähler ausgewertet werden kann, habe ich das mal rudimentär manuell gemacht.
Die Zeilen 34 und 35 im Code sollen die Länge der Ausgabe in Form der Spalten sein.
Da Du die Schrift aber in unterschiedlichen Spaltengrößen hast, musst Du da ggfls. mit spielen.

Auch musst Du in Deinem Code in den Zeilen 24 und 29, ggfls Hand anlegen.

Schau einfach nur mal, ob das überhaupt geht, dann haben wir eine Grundlage:

#include <FastLED.h>

#include <LEDMatrix.h>
#include <LEDText.h>
#include <storming.h>  // Schriftart 1
#include <odinson.h>   // Schriftart 2
// Change the next 6 defines to match your matrix type and size

#define LED_PIN        2
#define COLOR_ORDER    GRB
#define CHIPSET        WS2812B

#define MATRIX_WIDTH   -32
#define MATRIX_HEIGHT  8
#define MATRIX_TYPE    VERTICAL_ZIGZAG_MATRIX

cLEDMatrix<MATRIX_WIDTH, MATRIX_HEIGHT, MATRIX_TYPE> leds;

cLEDText ScrollingMsg;                                                                                 // Laufschrift 1
cLEDText ScrollingMsg1;                                                                                // Laufschrift 2

const unsigned char TxtDemo[] =                                                                       // Text 1, und die Effekte
{
  EFFECT_HSV_AH "\x00\xff\xff\xff\xff\xff" "     RAGNAROEK"
};

const unsigned char TxtDemo1[] =                                                                      // Text 2, und die Effekte
{
  EFFECT_HSV_AH "\x00\xff\xff\xff\xff\xff" "     RAGNAROEK"
};

uint8_t demoNumber = 0;            // Nummer der aktuellen Laufschrift
uint8_t lfdNumb = 0;               // Nummer der aktuellen Spalte in der Schrift
const uint8_t maxText0Number = 32; // ACHTUNG HIER SELBST ERMITTELN!
const uint8_t maxText1Number = 32;

void setup()
{
  FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(leds[0], leds.Size());
  //FastLED.setCorrection(true);
  FastLED.setBrightness(10);
  FastLED.clear(true);
  FastLED.show();
  ScrollingMsg.SetFont(FontStormning7x9Data);
  ScrollingMsg.Init(&leds, leds.Width(), ScrollingMsg.FontHeight() + 1, 0, 0);
  ScrollingMsg.SetText((unsigned char *)TxtDemo, sizeof(TxtDemo) - 1);
  ScrollingMsg.SetTextColrOptions(COLR_RGB | COLR_SINGLE, 0xff, 0x00, 0xff);
  ScrollingMsg1.SetFont(FontOdinson8x9Data);
  ScrollingMsg1.Init(&leds, leds.Width(), ScrollingMsg1.FontHeight() + 1, 0, 0);
  ScrollingMsg1.SetText((unsigned char *)TxtDemo1, sizeof(TxtDemo1) - 1);
  ScrollingMsg1.SetTextColrOptions(COLR_RGB | COLR_SINGLE, 0xff, 0x00, 0xff);
}


void loop()
{
  switch (demoNumber)                                                            // Ich schalte je nach Auswahl in einen Zweig
  {
    case 0:                                                                      // erste Auswahl
      if (ScrollingMsg.UpdateText() == -1)                                       // So übernommen aus dem Original
      {
        ScrollingMsg.SetText((unsigned char *)TxtDemo, sizeof(TxtDemo) - 1);
      }
      else
      {
        FastLED.show();
        lfdNumb++;                                                               // Nach der Anzeige Hochzählen
        if (lfdNumb > Text0Nummer)                                               // Wenn text durch ist
        {
          lfdNumb = 0;                                                           // Zähler zurücksetzen
          demoNumber = 1;                                                        // nächsten text anzeigen
        }
      }
      break;
    case 1:                                                                       // Zweite Auswahl
      if (ScrollingMsg1.UpdateText() == -1)                                       // Hier wie in 1.er Auswahl!
      {
        ScrollingMsg1.SetText((unsigned char *)TxtDemo, sizeof(TxtDemo) - 1);
      }
      else
      {
        FastLED.show();
        lfdNumb++;                                                               // Nach der Anzeige Hochzählen
        if (lfdNumb > Text0Nummer)                                               // Wenn text durch ist
        {
          lfdNumb = 0;                                                           // Zähler zurücksetzen
          demoNumber = 0;                                                        // ersten text anzeigen
        }
      }
      break;
      delay(20);
  }
}

erstmal danke und beim kompielieren

'Text0Nummer' was not declared in this scope

denke mal das kann ich beheben . oder auch nicht mal schauen. ich melde mich dann.

ist maxText0Number und im case 1 heisst das dann richtig maxText1Number! Ich seh mal zu, ob ich die libs irgendwo finde...

Nachtrag: Bekomme ich irgendwie die storming/odinson irgendwoher?

ja das habe ich schon raus. das macht nun auch irgend was. nur das delay im loop hat absolut keine auswirkung. das fliegt so schnell durch das ich das kaum erkennen kann was genau er da nun macht. jedenfalls ist es noch nicht richtig und er mischt da glaube ich auch.

ich habe die 2 zeilen
const uint8_t maxText0Number = 32; // ACHTUNG HIER SELBST ERMITTELN!
const uint8_t maxText1Number = 32;

die 32 gegen 16 tu tauschen. oder 64, oder 128. oder 256. es ändert sich irgend wie nicht wirklich was. so weit ich das erkennen kann.

Dann muss das delay() runter:
Alt

      delay(20);
  }
}

Neu:

  }
  delay(20);
}

Und wie geschrieben - ich kann das nicht kompilieren, weil mir die zwei Headerdateien fehlen... Gerne auch als PM, wenn die so geheim sind :wink:
Und wenn das delay da unten ist und immer noch zu schnell... da ich einen anderen Ansatz nehme, dann ggfls. verlängern auf 100ms oder mehr...

gut also das mit dem Delay hat schonmal geklappt.

ich sehe wenigstens was er tut.
also ScrollingMsg läuft durch wie es soll. das ist ok.

bis alles dunkel ist.

dann kommt ScrollingMsg1 läuft durch aber bleibt bei den letzten 3 buchstaben stehen, mitten auf dem feld. und am rechten rand ist noch irgend was.

ich habe bei den
maxText0Number = 64;
maxText1Number = 50;
eingestellt. vieleicht muss ich da noch mit rumspielen.

und welche zwei Headerdateien meinst du genau ? das #include <storming.h> // Schriftart 1
#include <odinson.h> // Schriftart 2

? das sind 2 text dateien in der libary die ich hinzugefügt habe, die kann ich dir gerne irgend wie zukommen lassen. kann ja keine links darauf setzen wenn die nirgends wo anders als bei mir auf dem pc sind.

Das heisst, ich hab das wechseln der Schrift und der Msg.es geschafft ...- Und das blind.. :slight_smile: :slight_smile:

Wie gesagt, ich bin mir nicht sicher, ob das der Weisheit letzer Schluß ist. Das geht sicher noch eleganter.
Vor allem musst Du erstmal rausbekommen, wie lang Dein maxText*Number ist.
Da spielen dann auch die Leerzeichen im CharArray eine Rolle!
Ich denke die werden Dir - in der aktuellen Variante - das Genick brechen.
Meine Idee war, einmal einen Text durchlaufen lassen und dann, wenn der letzte Buchstabe rausgelaufen ist mit dem nächsten Text anfangen.
Dazu darf aber kein Leerzeichen vor dem Text sein.
Die müssen sich anschliessen!
Na mal sehen, was mir noch einfällt. zumindest habe ich einen Ansatz liefern können :slight_smile:

so es läuft. habe es hinbekommen. dachte ich wären ich hier schreibe tut sich doch noch nen prohblem auf.

erst tat er es wie er es soll. und dann plötzlich macht er scheiße. er spuhlt den einen text nur zur hälfte ab udn springt auf den anderen. das macht er dann parr mal wie wild. dann läuft das wieder 1-3 mal normal dann fängst wieder an zu spinnen.

liegt das am Arduino NANO ???? ich hoffe nicht. und das der zu 95% belegt ist. vom speicher.
manno ist die frage wenns daran liegt ob son ESP8266 ding das nicht auch hat. den müsste ich extra dann besorgen. ja nen arduino mega 2560 würde es vom speicher her auch tun. aber das ding ist riesig und wenn dan schon so in der größe arduino nano und nicht so explosions artig teuer.

Die finde ich nirgend...
Aus welcher lib entstammen die?

Du liest über das Ende der tatsächlichen Länge der Zeichenkette hinaus.
Wie schon vorher: Ist nicht Weisheit letzter Schluß. Aber ein Ansatz. Und ja, ein nano könnte knapp werden, aber momentan kann ich das nicht nachvollziehen ... aus bekannten Gründen :wink:

Noch ein Nachtrag:
Um das schlußendlich irgendwie in Einklang zu bringen:
Du benutzt zwei gleiche Texte, die sich nur in der Schriftart ändern.
Das lässt sich runterbröseln.
Dann braucht es keine zwei Instanzen für ScrollingMsg.

na die kannste nicht finden die habe ich ja selbst erstellt. in der libary von LEDtext_Master da giebs einen fontgenerator. damit habe ich die 2 fontdateien erstellt. die existieren nur bei mir auf dem pc.
die könnte ich dir zukommen lassen wie gesagt. ka wie aber würde denke ich irgend wie gehen.

ansonsten als PN den inhalt kopieren und einfügen.

ok und das geht wie. also ich bin da eigendlich nur rudimentär unterwegs. hier und da bekomme ich was hin. wie die temp steuerung für meinen laminator den ich zum einbrutzeln von toner auf kupfer platinen umgebaut habe.

aber das hier das geht schon relativ weit über mein verständniss hinaus. ja man kann sich das alles irgend wie beibringen aber ganz erlich, so viel zeit habe ich dann nun auch nicht. für den ich das mache der damit garnix anfangen könnte weil er schon ausrasten würde wenn er die libs nicht ins program bekommt. der lässt mir zwar zeit aber halt nicht unendlich viel.