Komischer Error

Hi,
wie kann das sein? (Foto)
Der Array wird nicht angefasst in diesen paar Zeilen code und trotzdem wird solution[3] = 600 zu solution[3] = 700?!


Serial Output:

Für alle, dei den ganzen Code wollen: (Das Problem ist bei Zeile 208)

#include <SD.h>
#include <SPI.h>
#include <SoftPathElectronics.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <FastLED.h>

#define NUM_LEDS 16
#define DATA_PIN 5
#define CLOCK_PIN 13

CRGB leds[NUM_LEDS];

CustomKeyboard keyboard;

LiquidCrystal_I2C lcd(0x27, 20, 4);

  int player = 0;     // Zeigt an, welcher Spieler dran ist
  int playerS;      // playerSelect, damit man während der Auswahl in der while-Schleife bleibt
  int playerN;      // playerNumber, Anzahl der Spieler
  int r = 1;      // round, Nummer der Runde
  int i = 0;      // index, sorgt dafür, dass unsigned long nicht überschritten wird (9 Nummern max.)
  unsigned long a;      // answer, Antwort nach eingabe
  int cursorX = 0;      // cursorXVariable, um den Cursor bei der Eingabe zu steuern
  int old_inp[9];      // Array, der die vorherige Eingabe speichert, sodass man löschen kann

  int ledC = 0;     //ledCound, steuert dei LEDs

  // a als Antwort auf die Frage
  int ans = 1000;

  // y für Serial.print Zwecke
  int y = 0;


void setup() {
  delay(2000);
  Serial.begin(115200);

  //Setup LEDs
  FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);

  // Setup Keyboard
  String key = "3 12 6 1 1022 315 186 511 241 158 340 195 136 255 164 120 0 0 0 0";
  keyboard.setupKey(key);

  // Setup LCD
  lcd.init();
  lcd.backlight();

  // Oyda
  lcd.setCursor(0, 0);
  lcd.print(F("--------------------"));
  lcd.setCursor(3, 1);
  lcd.print(F("Willkommen bei"));
  lcd.setCursor(4, 2);
  lcd.print(F("Trivia Guess"));
  lcd.setCursor(0, 3);
  lcd.print(F("--------------------"));

  for (;ledC < 32; ledC ++) {
    if (ledC < 4) {leds[ledC] = CRGB::Blue;}
    else if (ledC < 8) {leds[ledC] = CRGB::Red;}
    else if (ledC < 12) {leds[ledC] = CRGB::Green;}
    else if (ledC < 16) {leds[ledC] = CRGB::Yellow;}
    else if (ledC < 20) {leds[ledC -4] = CRGB::Black;}
    else if (ledC < 24) {leds[ledC -12] = CRGB::Black;}
    else if (ledC < 28) {leds[ledC -20] = CRGB::Black;}
    else if (ledC < 32) {leds[ledC -28] = CRGB::Black;}
    FastLED.show();
    if (ledC == 3 || ledC == 7 || ledC == 11 || ledC == 15 || ledC == 19 || ledC == 23 || ledC == 27 || ledC == 31) {
      delay(250);
    }
  }
  ledC = 0;
}

void loop() {

  int lcdP[4] = {0,-7,8,-15};

  lcd.clear();
  lcd.setCursor(2, 1);
  lcd.print(F("Spieleranzahl:"));
  lcd.blink();

  while (playerN == 0) {

    int inp = keyboard.getKeyPressed();

    if (inp > 0) {

      if (inp < 5) {

        lcd.setCursor(16, 1);
        lcd.print(inp);
        playerS = inp;

        delay(250);
      }
      if (inp == 12 && playerS > 0) {

        playerN = playerS;

        delay(250);
      }
    }
  }

  lcd.clear();
  lcd.setCursor(0,0);

  long solution[playerN];      // Array um Lösungen besser zu testen 
  int points[playerN];

  while (r < 3) {

    int inp = keyboard.getKeyPressed();
  
    if (inp >= 0) {

      if (inp < 10 && i < 9 || inp == 11 && i < 9) {

        if (inp == 11) {
          inp = 0;
        }

        lcd.setCursor(cursorX, 0);
        lcd.print(inp);

        Serial.print(a);
        Serial.print(" * 10 + ");
        Serial.print(inp);

        a = a * 10 + inp;
        cursorX ++;

        Serial.print(" = ");
        Serial.println(a);

        old_inp[i] = inp;
        i ++;

        delay(250);
      }

      if (inp == 10 && cursorX > 0) {
        cursorX --;
        lcd.setCursor(cursorX, 0);
        lcd.print(" ");

        i --;
        a = (a - old_inp[i]) / 10;

        delay(250);
      }

      if (inp == 12 && i > 0) {

        solution[player] = a;

        // Reset
        i = 0;
        a = 0;
        cursorX = 0;
        memset(old_inp, 0, sizeof(old_inp));
        lcd.clear();

        for(; y < 9; y++){
          Serial.print(old_inp[y]);
          Serial.print(",");
        }

        if (player +1 == playerN) {
          lcd.noBlink();

          for (; i < playerN; i++) {
            lcd.setCursor(0,i);
            lcd.print(F("S"));
            lcd.print(i +1);
            lcd.print(F(": "));
            lcd.print(solution[i]);
            delay(1000);      // Maybe verlängern, nach Testen

            solution[i] = abs(ans - solution[i]);
          }

          for (i = 0; i < playerN; i++) {
            lcd.setCursor(4,i);
            lcd.print(F("         "));
            lcd.setCursor(4,i);
            lcd.print(solution[i]);
          }

          Serial.println(solution[3]);

          delay(1000);      // Maybe verlängern, nach Testen

          lcd.clear();

          lcd.setCursor(0,0);
          lcd.print(F("A: "));
          lcd.print(ans);
          delay(1000);       // Maybe verlängern, nach Testen

          lcd.setCursor(0,1);

          Serial.println(solution[3]);

          int check = 0;
          int minV = solution[0];

          for (y = 0; y < playerN -1; y++) {
            Serial.print(solution[y]);
            Serial.print(", ");
          }

          Serial.println(solution[3]);

          for (; check < playerN -1; check++) {
            minV = min(solution[check], minV);
          } 

          Serial.print(minV);

          for (check = 0; check > playerN -1; check++) {      // Punktevergabe
            Serial.println("In check for-Schleife");
            if (minV == solution[check]) {      // Falls der Kleinste Wert des Arrays an Position 0(1,2,3) ist...
              points[check] ++;                 // Im Punkte-Array an dieser Stelle +1
              if (check == 0) {    
                Serial.println("In check LED"); 
                leds[abs(lcdP[check])] = CRGB::Blue;      // Je nach Spieler wird die enstprechende LED angesteuert
                lcdP[check] ++;                           
              }
              if (check == 1) {
                leds[abs(lcdP[check])] = CRGB::Red;
                lcdP[check] ++;
              }
              if (check == 2) {
                leds[abs(lcdP[check])] = CRGB::Green;
                lcdP[check] ++;
              }
              if (check == 3) {
                leds[abs(lcdP[check])] = CRGB::Yellow;
                lcdP[check] ++;
              }
              FastLED.show();
              delay(500);
            }
          } 


          r ++;
          delay(2500);

          //Reset
          lcd.clear();
          lcd.blink();
          player = 0;
          
        }

        else {
        player ++;
        }

        delay(250);
      }
    }
  }

  playerN = 0;
  
}

Also ich sehe da keinen Fehler, es liegt einfach an der Formartierung der Ausgabe

omg, du bist ein Held, danke!

Ein sehr schönes Beispiel, wie eine falsche Annahme dazu führt, dass der Fehler versteckt wird.
"Der komplette Code" wird nie gebraucht, aber immer "ein kompletter Code"
(der dann zeigt, das das Problem woanders ist)

ersetze wollen durch brauchen.

@brotchen
Für die Zukunft:
Das ist auch ein schönes Beispiel dafür, dass sich ein wenig Sorgfalt auch bei Ausgaben "nur" auf der seriellen Schnittstelle lohnen kann. Ein kleines Serial.println(); als Abschluß der Ausgabe direkt nach der Schleife hätte genügt.