Seltsames verhalten nach einlesen von 80 Zeilen von SD-Karte

Hallo zusammen,
wie man der Überschrift bereits entnehmen kann habe ich ein Problem mit meinem Arduino Nano wenn ich zu viele Zeilen von der SD-Karte ausgelesen habe.

Aber erstmal zum Projekt:
Ich Bastel gerade für meine Firma ein Gerät, auf dem Via SD-Karte die Lagerplatznummern, und Kategorien von Gegenständen für das Lager gespeichert sind. Bis jetzt hat der gesamte Code auf reibungslos funktioniert. (Bin eigentlich auf bereits fertig)

Nun das Problem:
Als ich allerdings gestern angefangen habe die Daten auf der SD-Karte einzupflegen und die ersten Testläufe gemacht habe, habe ich festgestellt das wenn ich diese Daten dann auf dem I²C Display darstellen lasse, (Ich habe ein menü gebastelt, und dann wird je nach eingabe auf der SD-Karte verglichen ob die eingaben übereinstimmen, und die Lagerplatznummer wird dann ausgegeben).
Solange ich unter ca. 50 zeilen auf der SD-Karte belegt hatte ging auch alles, allerdings sobald es mehr wurden kam es dann zu Fehlern in der Anzeige und der Code ist auf einmal an Punkte gesprungen an die er von da aus gar nicht gehen darf/kann

Ich habe heute dann auch meine letzten 4 bösen Strings entfernt bekommen und habe sie gegen char arrays getauscht. Nun kann ich ca. 80 Zeilen einlesen bevor das Problem kommt.

Ich werden mal nur den Teil mit dem einlesen der Daten der SD-Karte Posten, da ich glaube keiner Lust hat meine gesamten 1300 Zeilen wild geschriebener Menü Strukturen zu durchforsten.

Ach ja. Daten auf der SD-Karte sind folgendermaßen formatiert: 1111/0000x0000
Die vier einsen am Anfang ändern sich je nach Menü Struktur. Will heißen wenn ich immer 3 Möglichkeiten zu Auswahl habe im Menü, symbolisiert die erste Zahl was ich gewählt habe, und die zweite Zahl was ich im Menü danach gewählt habe usw. Der Slash ist eig. nur für mich um es beim beschreiben einfacher zu machen. Der letzt teil ist eine Längenangabe in Millimeter, wobei das x auch wieder nur für mich ist.
Danach folgt immer in der nächsten Zeile so etwas: 1R013
Dies ist die Lagernummer, welche ich als char array einlesen und später auf die eigentlichen Bestandteile aufteile um sie besser im Display einzulesen.

Ich bin euch bereits für eure Hilfe dankbar

char line[LINE_DIM];
        
        if (!sd.begin(chipSelect, SPI_FULL_SPEED)) sd.initErrorHalt();      //Startet mit dem lesen der SD-Karte
        if (!file.open("Items.TXT", O_READ));                               //Öfnnet die Datei "Items.txt"

        
        while ((n = file.fgets(line, sizeof(line))) > 0 && result_zaehler < 2)  //Liest solange neue Zeilen ein bis das Ende erreicht ist
        {
            Serial.print(line);                         //Zeigt die aktuelle Zeile an
 
            if (strcmp(itemsuche, line) == 0)
            {
                Serial.print(F(" << Item gefunden"));
                feedresult = true;                      //Setzt "feedresult" auf true, damit nun die Zeile darunter gesucht werden kann
            }
                    
            if (feedresult == true)                     //Erhöht den Result Zähler damit die Zeile darunter gefunden werden kann
            {                                           //(Verlässt die Schleife wenn ein bestimmter Wert erreicht ist)
                result_zaehler++;
            } 
        }
        Serial.println(F("\nDone\n"));

        lcd.setCursor(3, 0);
        lcd.print(F("-Lagerposition-"));        //Generiert die Überschrift von der Ergebnissanzeige
        
        if (feedresult == false)                //Wenn kein Ergebnis gefunden wurde wird der untenstehende Code aufgerufen
        {
            Serial.println(F("Kein Eintrag gefunden"));
            
            lcd.setCursor(14, 1); lcd.print(F("./."));      //Gibt "Keine Angabe" Zeichen aus
            lcd.setCursor(14, 2); lcd.print(F("./."));
            lcd.setCursor(14, 3); lcd.print(F("./."));  
        }
        
        if (feedresult == true)     //Nur wenn ein Ergebnis gefunden wurde wird der untenstehende Code aufgerufen
        {
            Serial.print("Lagerplatz: ");
            Serial.println(line);                           //Holt sich die Lagerplatznummer

            lcd.setCursor(14, 1); lcd.print(line[0]);       //Zeigt den Lagerplatz auf dem Display an
            lcd.setCursor(15, 1); lcd.print(line[1]);
            lcd.setCursor(14, 2); lcd.print(line[2]);
            lcd.setCursor(15, 2); lcd.print(line[3]);
            lcd.setCursor(15, 3); lcd.print(line[4]);
        }
        
        file.close();               //Die Datei auf der SD_Karte wird geschlossen
 
        result_zaehler = 0;         //Der Zähler um den Lagerplatz (-1 Zeile) zu finden wird zurückgesetzt
        feedresult = false;         //Der Zähler ob der Lagerplatz gefunden wurde wird zurückgesetzt
        einmalig2 = true;           //Setzt die Variable auf True damit dieser Code nur einmal ausgeführt wird
    }

Der Fehler ist deutlich in Zeile 42 zu sehen.

@zwieblum

Es tut mir leid, aber ich erkenne in Zeile 42 keinen Fehler.
vlt. sehe ich auch einfach den Wald vor lauter Bäumen nicht...

Hallo,

Wenn Du glaubst das der Fehler in dem Teil ist den wir sehen können, dann schreibe dir eine Sketch der den Teil benutzt und lass den Rest weg. Dann kannst Du das testen.

PS Ich hab keine Lust wir den Rest dazu zu denken.

Heinz

Danke an alle.
Ich habe den Fehler gefunden. ich habe weil ich mich in eine While Schleife begeben habe, meinen Restlichen Programmcode blockiert und ein Teil war dafür verantwortlich das dieses Seltsame verhalten da war.

Danke an alle, auch wenn der Fehler leider nichts mit dem gepostetem Teil zu tun hatte.

Der Fehler ist in >90% in dem nicht geposteten Codeteil.

Gruß Tommy