133 lines
No EOL
3.7 KiB
C++
133 lines
No EOL
3.7 KiB
C++
#include <FVS.h>
|
|
//Memory_Shield
|
|
//LEDs und Taster müssen Invertiert werden, da gegen Masse geschaltet wird
|
|
|
|
#define BUTTON0 1
|
|
#define BUTTON1 5
|
|
#define BUTTON2 3
|
|
#define BUTTON3 4
|
|
|
|
#define MAXLEVEL 10
|
|
|
|
int buttons[] = { BUTTON0, BUTTON1, BUTTON2, BUTTON3 };
|
|
int state = 0;
|
|
int level = 0;
|
|
|
|
int musterVorgabe[MAXLEVEL] = {};
|
|
int musterEingabe[MAXLEVEL] = {};
|
|
|
|
void setup() {
|
|
//alle LEDs löschen
|
|
portMode(1, OUTPUT);
|
|
portWrite(1, 0);
|
|
//LEDs vom Shield ausschalten
|
|
for (int i = 0; i < 4; i++) {
|
|
digitalWrite(buttons[i], HIGH);
|
|
}
|
|
//Tft initialisieren
|
|
Tft.begin();
|
|
//Zufallszahl starten
|
|
randomSeed(analogRead(39));
|
|
}
|
|
|
|
void loop() {
|
|
switch (state) {
|
|
case 0: // neue Runde
|
|
//Gruppe 1 start ===============================================================================
|
|
|
|
Tft.setCursorCharacter(1, 1);
|
|
Tft.print("neue Runde in ");
|
|
for (int j = 3; j > 0; j--) {
|
|
Tft.setCursorCharacter(1, 15);
|
|
Tft.print(String(j) + " ");
|
|
delay(1000);
|
|
}
|
|
level = 0;
|
|
|
|
for (int i = 0; i < MAXLEVEL; i++) {
|
|
musterVorgabe[i] = random(0, 4);
|
|
musterEingabe[i] = -1;
|
|
}
|
|
state = 1;
|
|
|
|
//Gruppe 1 ende ================================================================================
|
|
break;
|
|
case 1: // Ausgabe aktuelle Runde
|
|
//Gruppe 2 start ===============================================================================
|
|
portMode(1,2);
|
|
for(int i=0;i<=level;i++){
|
|
digitalWrite(buttons[mustervorgabe[i]], LOW);
|
|
delay(250);
|
|
digitalWrite(buttons[mustervorgabe[i]], HIGH);
|
|
delay(250);
|
|
}
|
|
//Gruppe 2 ende ================================================================================
|
|
break;
|
|
case 2: // Eingabe aktuelle Runde
|
|
//Gruppe 3 start ===============================================================================
|
|
pinMode(BUTTON0, INPUT);
|
|
pinMode(BUTTON1, INPUT);
|
|
pinMode(BUTTON2, INPUT);
|
|
pinMode(BUTTON3, INPUT);
|
|
|
|
Tft.setCursorCharacter(1,1);
|
|
Tft.print("Eingabe ");
|
|
|
|
for(int i = 0, i <= level, i++)
|
|
{
|
|
while(musterEingabe[i] == -1)
|
|
{
|
|
for(int j = 0; j < 4, j++)
|
|
{
|
|
while(digitalRead(buttons[j]) == false)
|
|
{
|
|
musterEingabe[i] = j;
|
|
}
|
|
}
|
|
delay(100);
|
|
}
|
|
Tft.print(".");
|
|
}
|
|
|
|
//Gruppe 3 ende ================================================================================
|
|
break;
|
|
case 3: // Vergleich Eingabe/Ausgabe
|
|
//Gruppe 4 start ===============================================================================
|
|
for(int i{0}; i <= level; i++)
|
|
{
|
|
if(musterEingabe[i] == musterVorgabe[i])
|
|
state = 4;
|
|
else
|
|
{
|
|
state = 5;
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
//Gruppe 4 ende ================================================================================
|
|
break;
|
|
case 4: // geschafft, Runde hochzählen und auf Display ausgeben
|
|
//Gruppe 5 start ===============================================================================
|
|
|
|
Tft.setCursorCharacter(3, 1);
|
|
Tft.print("Gewonnen!");
|
|
level++;
|
|
state = 1;
|
|
|
|
//Gruppe 5 ende ================================================================================
|
|
break;
|
|
case 5: // verloren
|
|
//Gruppe 6 start ===============================================================================
|
|
|
|
Tft.setCursorCharacter(1,1);
|
|
Tft.print("Du hast verloren :( "));
|
|
Tft.setCursorCharacter(3,1);
|
|
Tft.print(" Bis Level: " + String(level) + " erreicht.");
|
|
|
|
delay(5000);
|
|
state = 0;
|
|
|
|
//Gruppe 6 ende ================================================================================
|
|
break;
|
|
}
|
|
} |