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;
}


