Hallo,
ich muss zu morgen ein Schulprojekt fertig bekommen und habe dort noch einige Probleme.
Ziel des Projektes ist, dass auf einem lcd Display 10 verschiedene Matheaufgaben angezeigt werden und die Lösungen anschließend über ein 4x4 Keypad eingegeben werden können. Anschließend soll je nach dem ob die Antwort richtig oder falsch war eine rote bzw. grüne LED leuchten.
Um die Eingabe der mehrstelligen Zahl zu beenden, sollte die Taste A gedrückt werden können.
//Variabeln:
int i, u, z[5], antwort, eingegeben, richtig = 12, falsch = 13;
//keypad:
#include <Keypad.h> // Bibliothek für Keypad wird hinzugefügt
const byte COLS = 4; // 4 Spalten (Größe)
const byte ROWS = 4; // 4 Zeilen (Größe)
char hexaKeys[ROWS][COLS]={ // Die Ziffern und Zeichen des Keypads werden eingegeben:
{'D','#','0','*'},
{'C','9','8','7'},
{'B','6','5','4'},
{'A','3','2','1'}
};
byte colPins[COLS] = {2,3,4,5}; //Definition der Pins für die 4 Spalten
byte rowPins[ROWS] = {6,7,8,9}; //Definition der Pins für die 4 Zeilen
char Taste; //Taste ist die Variable für die jeweils gedrückte Taste.
Keypad Tastenfeld = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //Das Keypad kann absofort mit "Tastenfeld" angesprochen werden
//lcd Display:
#include <Wire.h> // Wird Bibliothek einbinden
#include <LiquidCrystal_I2C.h> // Vorher hinzugefügte LiquidCrystal_I2C Bibliothek einbinden
LiquidCrystal_I2C lcd(0x27, 16, 2); // Hier wird festgelegt um was für einen Display es sich handelt. In diesem Fall eines mit 16 Zeichen in 2 Zeilen und der HEX-Adresse 0x27. Für ein vierzeiliges I2C-LCD verwendet man den Code "LiquidCrystal_I2C lcd(0x27, 20, 4)"
void setup()
{
Serial.begin(9600); // Nur zur Testphase !!! <- löschen
//lcd Display:
lcd.init(); // Im Setup wird der LCD gestartet
lcd.backlight(); // Hintergrundbeleuchtung einschalten (lcd.noBacklight(); schaltet die Beleuchtung aus).
//LEDs und so:
pinMode(richtig, OUTPUT); // LED grün
pinMode(falsch, OUTPUT); // LED rot und Piezo piepst
//random
randomSeed(analogRead(A0));
}
void loop()
{
Serial.print("Start");
for (i=0; i<10; i=i+1){
// Die 10 Aufgaben:
int x[10] = {10, 67, 53, 98, 5, 7, 52, 46, 100, 32};
int y[10] = {47, 45, 5, 50, 3, 7, 3, 754, 871, 6};
String rechenart[10] = {" plus ", " minus ", " mal ", " minus ", " mal ", " plus ", " plus ", " mal ", " minus ", " mal "};
lcd.setCursor(0, 0); // Erste Zeile:
lcd.print(x[1]); // Aufgabe
lcd.print(rechenart[1]);
lcd.print(y[1]);
//Eingabe über Keypad
char Taste = Tastenfeld.getKey();
for (u=0; Taste != 'A' ;u=u+1) {
if (Taste) {
z[u] = Taste;
Serial.print("eingegebene Ziffer: "); //Test
Serial.print(z[u]); //Test
}
}
switch (u) { //Wie viele Ziffern hat die Zahl?
case '1' :
eingegeben = z[0];
break;
case '2' :
eingegeben = z[0]*10 + z[1];
break;
case '3' :
eingegeben = z[0]*100 + z[1]*10 + z[2];
break;
case '4' :
eingegeben = z[0]*1000 + z[1]*100 + z[2]*10 + z[3];
break;
case '5' :
eingegeben = z[0]*10000 + z[1]*1000 + z[2]*100 + z[3]*10 + z[4]*1;
break;
}
lcd.setCursor(0, 1); // Zweite Zeile:
lcd.print(eingegeben); // Eingegebene Zahl
//eingegebene Antwort richtig oder falsch?
if (eingegeben == antwort) {
digitalWrite(richtig, HIGH);
delay(1000);
digitalWrite(richtig, LOW);
} else {
digitalWrite(falsch, HIGH);
delay(500);
digitalWrite(falsch, LOW);
}
}
}
Ich freue mich sehr über eure Hilfe
LG Leonie