Led-Matrix Arduino Nano

Servus @ll,

Ich habe ein kleines Problem mit der Programmierung von meiner Lauf-Led-Matrix.
Ich habe eine 28 Led´s in einer Reihe und 9 Reihen gemacht, aber bei mir leuchten nur 7 Reihen.
Wo habe ich da einen Fehler in der Programmierung gemacht? Vielen Dank für Eure Hilfe.

MfG
Marco

Meine Programmierung:

#include <SoftwareSerial.h>
#include "Arduino.h"
#include <Wire.h>//Include libraries: SoftwareSerial & Wire
SoftwareSerial ESP_BT(0,1); //Define PIN11 & PIN12 as RX and TX pins

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

#ifndef PSTR
#define PSTR // Make Arduino Due happy
#endif

#define PIN 5

// 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_GRBW    Pixels are wired for GRBW bitstream (RGB+W 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(
 28,                                              //Select LEDs of each row  
 9,                                               //Select amount of rows 
 PIN,                                                
 NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT +           //Define first data pin 
 NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,             //Define the type of connection 
 NEO_RGB            + NEO_KHZ800);

 int Red=255,Green=0,Blue=0;
 String text= "Misstkerl" ;
 String RGB;
 int pixelPerChar = 5,RGB_Completed=0;
 int Delay, Brightness;
const uint16_t colors[] = {matrix.Color(Green,Red,Blue)};
//  matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(0, 0, 255) };//matrix.Color(Red, Green, Blue),

void setup() { 
 Serial.begin(115200);
 ESP_BT.begin(9600);
 EEPROM.begin();
// Serial.println("Start");
 const uint16_t colors[] = {matrix.Color(Green,Red,Blue)};
 matrix.begin();
 matrix.setTextWrap(false);
 matrix.setBrightness(Brightness);
 matrix.setTextColor(colors[0]);
//matrix.setTextColor(matrix.Color(Green,Red,Blue));
}
int x    = matrix.width();
int pass = 0;

void loop() {
 while(ESP_BT.available()){
   char ReadChar = (char)ESP_BT.read();
    Serial.println(ReadChar);
   // Right parentheses ) indicates complet of the string
   if(ReadChar == ')' ||ReadChar == '}' || ReadChar == ']'){
     if(ReadChar == ')' ){
     RGB_Completed = 1;
      }
     if(ReadChar == '}'){
      RGB_Completed = 2;
     }
     if(ReadChar == ']'){
      RGB_Completed = 3;
     }
   }
   else{
      RGB += ReadChar;
   } 
 }
 if(RGB_Completed!=0){
     if(RGB_Completed==1){
            Light_RGB_LED();
            RGB_Completed=0;
        }
     if (RGB_Completed==2){
         text=RGB;
          int _size = text.length();
           int i;
         for(i=0;i<_size;i++)
        {
      EEPROM.write(50+i,text.charAt(i));
      Serial.println(text.charAt(i));
          }
     EEPROM.write(50+_size,'\0');   //Add termination null character for String Data
    
          RGB_Completed=0;
          RGB="";
       }
     if (RGB_Completed==3){
       int val=RGB.toInt();
       if(val>0 && val<=100){
         if(val==0){
           val=1;
         }
         Delay=(100-val)*2.5;
         //scroll(Delay);
         EEPROM.write(0,Delay);
       }
       else{
         val=val-100;
         matrix.setBrightness(val);
         EEPROM.write(5,val);
       }      
       RGB=""; 
       RGB_Completed=0;
     }
   }
  if(RGB_Completed==0){
 //.  Serial.println(RGB_Completed);
   scroll();
 }
}

void scroll(){
 //Serial.println(text);
 int  maxDisplacement = text.length() * pixelPerChar + matrix.width();
 matrix.fillScreen(0);
 matrix.setCursor(x, 0); 
 matrix.print(text);
 if(--x < -maxDisplacement) {
   x = matrix.width(); 
   if(++pass >= 1){ pass = 0;
  // matrix.setTextColor(colors[pass]);
    matrix.setTextColor(matrix.Color(Green,Red,Blue));
   //  matrix.setTextColor(matrix.Color(Red,Green,Blue));
   }
 } 
 matrix.show();
 delay(Delay); 
}

void Light_RGB_LED(){
 int SP1 = RGB.indexOf('.');
 int SP2 = RGB.indexOf('.', SP1+1);
 int SP3 = RGB.indexOf('.', SP2+1);
 String R = RGB.substring(0, SP1);
 String G = RGB.substring(SP1+1, SP2);
 String B = RGB.substring(SP2+1, SP3);
 Red=R.toInt();Green=G.toInt();Blue=B.toInt();
// Serial.println(R);
matrix.setTextColor(matrix.Color(Green,Red,Blue));
 EEPROM.write(10,Red);EEPROM.write(15,Green);EEPROM.write(20,Blue);
RGB="";
}

Was mein Ihr? Ignorieren wir einfach die User die CODE TAGs nicht verwenden?
Uwe

uwefed:
Was mein Ihr? Ignorieren wir einfach die User die CODE TAGs nicht verwenden?
Uwe

Das Ignorieren sollte man gleich in die Forumsoftware integrieren.

uwefed:
Was meint Ihr? Ignorieren wir einfach die User die CODE TAGs nicht verwenden?
Uwe

Meine 2ct:
Ja, mit einer Ausnahme: Wenn es - wie hier - der allererste Beitrag ist, würde ich das noch tolerieren.

uwefed:
Was mein Ihr? Ignorieren wir einfach die User die CODE TAGs nicht verwenden?
Uwe

Interessante Frage!

Ja, deine Möglichkeiten sind viel weitreichender, als z.B. meine.
Du könntest die Tags einfügen....
Wenn ich dir auch davon abrate.

Je nach Tagesform/Aggressionslevel ignoriere ich solche Postings.
Auch die, wo sich nur jemand ausheult, ohne Fakten zu liefern.

Wenn ich mir die Grundsatzfrage stelle:

Will dieser User überhaupt Hilfe(annehmen)?
Ist es schon meist Zeit, um weiter zu blättern, mich mit interessanteren Dingen zu beschäftigen, oder einen derben Einlauf auszuteilen. Wie gesagt, ganz nach Tagesform.

Die einzige Information, zum User, ist meist die Anzahl schon getätigter Postings.
Klar, diese kann man sich auch anschauen....
Aber warum soll ich mir mit der Antwort mehr Mühe geben, als der Fragesteller, mit seiner Frage?

Ich plädiere (auch an mich gerichtet) für Gnade, mit Anfängern.
Allerdings sollte ein jeder nach so ca 10 Postings begriffen haben, wo die Code Tags stecken. Ist das nicht der Fall, grenzt es an Hoffnungslosigkeit.
Zudem offenbart es schon ein gehöriges Maß an Ignoranz "How to use this forum - please read" zu übergehen.

Auch:

Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

Wenn ich das sehe, bekomme ich schon fast Pickel!
Der oder diejenige interessiert sich nicht für die Meldungen.

Spätestens nach 50 Postings, sollte der- oder diejenige begriffen haben, dass auch die notwendigen Informationen geliefert werden MÜSSEN, um die Antwort zu finden.

Besonders irritierend finde ich Postings, wo sich Leute selber als Noob, oder Anfänger betiteln, um auf die Mitleidsdrüse zu drücken. Die erklären mich, damit, für zu blöd um einen Anfänger an seinem Code oder Abstraktionsvermögen zu erkennen. ... Weiter blättern, interessieren mich nicht....
-> Wer sich selber als Noob betitelt hat keinerlei inneren Trieb den Zustand zu ändern.

Auch auf das Wort "Schwarmintelligenz" reagiere ich allergisch. Denn das stellt meine Individualität in Frage, oder negiert sie sogar. Ein solcher "Angreifer", ja, ich fasse das als Angriff auf, hat keinerlei Gnade von mir zu erwarten.
-> Keine Macht den Abstaubern!

Da fragt man nach Hilfe und wird dumm angemacht weil man das und dieses nicht gemacht habt. Da fehlen mir einfach die Wörter dazu. Danke für nix.

Wo bleiben die Codetags?

Vorher darfst du nicht mit zielführenden Antworten rechnen.

misstkerl:
Da fragt man nach Hilfe und wird dumm angemacht weil man das und dieses nicht gemacht habt. Da fehlen mir einfach die Wörter dazu. Danke für nix.

Ich sag nur "Corona-Stress".

hier https://forum.arduino.cc/index.php?topic=715381.msg4820328#msg4820328
hat Combie sehr schön erklährt wie das mit den TAGs geht:

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).

https://forum.arduino.cc/index.php?topic=715381.msg4820328#msg4820328:
Verwende bitte die Code Tags

[code] Hier dein Programm[/code]

Dann sieht das, nach dem absenden so aus:

Hier dein Programm

Uwe

misstkerl:
Da fragt man nach Hilfe und wird dumm angemacht weil man das und dieses nicht gemacht habt. Da fehlen mir einfach die Wörter dazu. Danke für nix.

Ich finde Du überreagierst.
Grüße Uwe

K.A. was mit manchen Menschen heute los ist.
Fragen nach Hilfe, sind aber nicht bereit etwas dafür zu tun, damit es den Helfern leichter fällt.

#include <SoftwareSerial.h>
#include "Arduino.h"
#include <Wire.h>//Include libraries: SoftwareSerial & Wire

SoftwareSerial ESP_BT(0,1); //Define PIN11 & PIN12 as RX and TX pins

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

#ifndef PSTR
 #define PSTR // Make Arduino Due happy
#endif

#define PIN 5

// 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_GRBW    Pixels are wired for GRBW bitstream (RGB+W 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(
  28,                                              //Select LEDs of each row (15 in my case) 
  9,                                               //Select amount of rows (7 in my case)
  PIN,    
  NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT +           //Define first data pin (right bottom corner is my first pin)
  NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,             //Define the type of connection (in a zig zag connections and divided by rows not columns)
  NEO_RGB            + NEO_KHZ800);

  int Red=255,Green=0,Blue=0;
  String text="Misstkerl";
  String RGB;
  int pixelPerChar = 5,RGB_Completed=0;
  int Delay, Brightness;
const uint16_t colors[] = {matrix.Color(Green,Red,Blue)};
//  matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(0, 0, 255) };//matrix.Color(Red, Green, Blue),

void setup() {
  Serial.begin(115200);
  ESP_BT.begin(9600);
  EEPROM.begin();
 // Serial.println("Start");
  const uint16_t colors[] = {matrix.Color(Green,Red,Blue)};
  matrix.begin();
  matrix.setTextWrap(false);
  matrix.setBrightness(Brightness);
  matrix.setTextColor(colors[0]);
 //matrix.setTextColor(matrix.Color(Green,Red,Blue));
}

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

void loop() {
  while(ESP_BT.available()){
    char ReadChar = (char)ESP_BT.read();
     Serial.println(ReadChar);
    // Right parentheses ) indicates complet of the string
    if(ReadChar == ')' ||ReadChar == '}' || ReadChar == ']'){
      if(ReadChar == ')' ){
      RGB_Completed = 1;
       }
      if(ReadChar == '}'){
       RGB_Completed = 2;
      }
      if(ReadChar == ']'){
       RGB_Completed = 3;
      }
    }
    else
   {
       RGB += ReadChar;
    }
  }
  if(RGB_Completed!=0){
      if(RGB_Completed==1){
             Light_RGB_LED();
             RGB_Completed=0;
         }
      if (RGB_Completed==2){
          text=RGB;
           int _size = text.length();
            int i;
          for(i=0;i<_size;i++)
         {
       EEPROM.write(50+i,text.charAt(i));
       Serial.println(text.charAt(i));
           }
      EEPROM.write(50+_size,'\0');   //Add termination null character for String Data
           RGB_Completed=0;
           RGB="";
        }
      if (RGB_Completed==3){
        int val=RGB.toInt();
        if(val>0 && val<=100){
          if(val==0){
            val=1;
          }
          Delay=(100-val)*2.5;
          //scroll(Delay);
          EEPROM.write(0,Delay);
        }
        else
        {
          val=val-100;
          matrix.setBrightness(val);
          EEPROM.write(5,val);
        }
        RGB=""; 
        RGB_Completed=0;
      }
    }
   if(RGB_Completed==0){
  //.  Serial.println(RGB_Completed);
    scroll();
  }
}

void scroll(){
  //Serial.println(text);
  int  maxDisplacement = text.length() * pixelPerChar + matrix.width();
  matrix.fillScreen(0);
  matrix.setCursor(x, 0);
  matrix.print(text);
  if(--x < -maxDisplacement) {
    x = matrix.width();
    if(++pass >= 1){ pass = 0;
   // matrix.setTextColor(colors[pass]);
     matrix.setTextColor(matrix.Color(Green,Red,Blue));
    //  matrix.setTextColor(matrix.Color(Red,Green,Blue));
    }
  }
  matrix.show();
  delay(Delay);
}

void Light_RGB_LED(){
  int SP1 = RGB.indexOf('.');
  int SP2 = RGB.indexOf('.', SP1+1);
  int SP3 = RGB.indexOf('.', SP2+1);
  String R = RGB.substring(0, SP1);
  String G = RGB.substring(SP1+1, SP2);
  String B = RGB.substring(SP2+1, SP3);
  Red=R.toInt();Green=G.toInt();Blue=B.toInt();

// Serial.println(R);
 matrix.setTextColor(matrix.Color(Green,Red,Blue));
  EEPROM.write(10,Red);EEPROM.write(15,Green);EEPROM.write(20,Blue);
 RGB="";
}

so habt ihr das gemeint danke fürs erklären.
mag sein das ich etwas über reagiere, aber wie man das so sieht am Profil bin ich seit heute neu und das war mein erster Beitrag/frage. Da kann man doch sowas kurz erklären was ich genau machen soll.

MfG

Marco

Ja, so war es gemeint.
Allerdings stören die ganzen Leerzeilen. Wofür hast du die da drin ?

Und mit was für einer Stromversorgung speist du die Leds ?

aber wie man das so sieht am Profil bin ich seit heute neu und das war mein erster Beitrag/frage. Da kann man doch sowas kurz erklären was ich genau machen soll.

Bitte nicht jammern...
Das wirkt nur ablenkend.

Zudem:
Es liegt nicht in deiner Macht, die Antworten welche du bekommst, bestimmen zu können.

Zu deinem Programm, möchte ich dir raten, das erstmal auf das minimal Mögliche zu begrenzen, welches den Fehler noch zeigt.
Das macht es den Helfern viel einfacher. und vielleicht auch dir, den Fehler einzugrenzen.
z.B. hat nicht jeder ein BT Modul rum liegen.

Auch wäre es nicht schlecht zu sagen, um welches Board es sich dreht.
Da steckt viel verwirrendes in deinem Code.

z.B.
Pin 0 und 1 sollte man bei den meisten Boards nicht für BT nutzen.
Der DUE hat kein EEPROM
Die ESP benötigen ein EEPROM.begin() allerdings mit Größenangabe. Dann aber auch ein EEPROM.end() oder EEPROM.commit(). Die anderen Boards eher nicht.

Ich benutze die 2 Boards:
AZDelivery Nano V3.0 mit Atmega328 CH340
DSD TECH HC-05 Klassisches Bluetooth 2.0 Serielles drahtloses BT-Modul für Arduino UNO R3 Nano Pro Mini MEG

und es kommen keine Fehler beim hochladen oder sichern meine Matrix geht auch nur die ersten 2. led Strips gehen nicht. habe 9 reihen mit 28 Led´s

Kommen denn noch Antworten auf meine Fragen ?

sry

leerzeichen ist eine gute frage. weiß ich nicht.
5V DC mit 4A Netzteil

Hab mich erbarmt.
Die idee war daß Du den ersten Beitrag editierst und code Tags ergänzt.
Hab ich als Moderator jetzt gemacht.

Grüße Uwe

A

misstkerl:
sry

leerzeichen ist eine gute frage. weiß ich nicht.
5V DC mit 4A Netzteil

Leerzeilen hatte ich geschrieben. Die sind völlig unnütz und stören beim Lesen.

Bitte im Post diese noch tauslöschen.
Und ein 4 A Netzteil ist viel zu klein. Du brauchst min. 15A damit das alle funktioniert. Wo hast du die Kabel für die Leds angeschlossen ?

misstkerl:
sry

leerzeichen ist eine gute frage. weiß ich nicht.
5V DC mit 4A Netzteil

Du hast 28x9 LED die jede 60mA Verbrauchen wenn sie hell weiß leuchten. Macht zusammen 15A.
Wie hast Du die Spannungsversorgung bei den LED-Streifen realisiert? Speist Du an beiden Enden die 5V ein?
Grüße Uwe