Hallo zusammen,
Ich arbeite gerade an einem Projekt mit einem Arduino Nano, bei dem ich ein magisches Quadrat mit 9 Zahlen in einem 3x3-Array programmieren möchte. Dabei nutze ich 9 LEDs, 4 Taster (für Navigation, Reset und Speichern), und eine RGB-LED für eine Erfolgsmeldung.
Problem:
• Zu Beginn sollen alle LEDs aus sein, und nur eine LED soll blinken, um die aktuelle Auswahl anzuzeigen. Diese LED kann mit zwei Tastern nach rechts oder unten verschoben werden.
• Wenn eine Zahl an die Position der blinkenden LED gespeichert wird, soll diese dauerhaft leuchten und nicht mehr verändert werden können. Danach springt die Auswahl automatisch zur nächsten freien LED, die wieder blinkt.
• Die Zahlen müssen so gesetzt werden, dass alle Zeilen, Spalten und Diagonalen dieselbe Summe ergeben.
• Aktuelles Problem: Beim Start blinken nur zwei LEDs kurz, danach passiert nichts mehr. Die Navigation funktioniert nicht richtig und die LED wechselt nicht wie gewünscht zur nächsten freien Position.
Hardware:
• 1x Arduino Nano
• 9 weiße LEDs (Pins 2-10)
• Taster für Bewegung nach rechts (Pin D12), Bewegung nach unten (Pin D11), Speichern (Pin D13), und Reset (Pin A0)
• RGB-LED für Erfolgsmeldung (Pins A1, A2, A3)
Hier ist der relevante Teil meines Codes. Ich habe versucht, den Blink- und Speichermechanismus zu implementieren, aber irgendwas scheint nicht zu stimmen.
// LED-Pins
int ledPins[3][3] = {
{2, 3, 4},
{5, 6, 7},
{8, 9, 10}
};
// Taster-Pins
const int tasterUnten = 11;
const int tasterRechts = 12;
const int tasterSpeichern = 13;
const int tasterReset = A0;
// RGB-LED-Pins
const int pinRot = A1;
const int pinGruen = A2;
const int pinBlau = A3;
// 3x3 Array für das magische Quadrat
int quadrat[3][3] = {0};
// Zahlen für das magische Quadrat
int zahlen[9] = {5, 47, 17, 29, 71, 89, 59, 113, 101};
int aktuelleZahl = 0;
// Startposition
int posX = 0, posY = 0;
void setup() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
pinMode(ledPins[i][j], OUTPUT);
digitalWrite(ledPins[i][j], LOW);
}
}
pinMode(tasterUnten, INPUT_PULLUP);
pinMode(tasterRechts, INPUT_PULLUP);
pinMode(tasterSpeichern, INPUT_PULLUP);
pinMode(tasterReset, INPUT_PULLUP);
pinMode(pinRot, OUTPUT);
pinMode(pinGruen, OUTPUT);
pinMode(pinBlau, OUTPUT);
digitalWrite(ledPins[posX][posY], HIGH);
}
void loop() {
if (digitalRead(tasterUnten) == LOW) {
bewegeUnten();
delay(200);
}
if (digitalRead(tasterRechts) == LOW) {
bewegeRechts();
delay(200);
}
if (digitalRead(tasterSpeichern) == LOW) {
speichereZahl();
delay(200);
}
if (digitalRead(tasterReset) == LOW) {
resetSpiel();
delay(200);
}
}
void bewegeUnten() {
digitalWrite(ledPins[posX][posY], LOW);
posX = (posX + 1) % 3;
digitalWrite(ledPins[posX][posY], HIGH);
}
void bewegeRechts() {
digitalWrite(ledPins[posX][posY], LOW);
posY = (posY + 1) % 3;
digitalWrite(ledPins[posX][posY], HIGH);
}
void speichereZahl() {
quadrat[posX][posY] = zahlen[aktuelleZahl];
aktuelleZahl++;
digitalWrite(ledPins[posX][posY], HIGH);
}
void resetSpiel() {
aktuelleZahl = 0;
posX = 0;
posY = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
quadrat[i][j] = 0;
digitalWrite(ledPins[i][j], LOW);
}
}
digitalWrite(ledPins[posX][posY], HIGH);
}
Erwartetes Verhalten:
• Nur eine LED sollte blinken, und die Auswahl soll nur durch Taster bewegt werden.
• Gespeicherte LEDs sollten dauerhaft leuchten.
• Nach dem Speichern einer Zahl soll automatisch die nächste freie LED blinken.
Frage:
Was könnte das Problem mit meinem Code sein, dass nach dem Start nur zwei LEDs kurz blinken und nichts mehr passiert? Wie kann ich den Code anpassen, damit die LEDs korrekt blinken und die Tastersteuerung wie gewünscht funktioniert?
Vielen Dank für eure Hilfe!