Banner Ausblenden
Kleines Logo

Willkommen auf PSI-Online

Corona-Aufgabe

In Zusammenarbeit mit Eva Schwegle

 

(Aufgabe 1 bei Eva Schwegle)

Schlag den Maulwurf 

Materialien:

- Arduino Uno

- 7 LEDs

-7 220 ohm Widerstände

-Breadboard

-Analog Joystick

-12 Kabel

Aufbau:

Aufbau

Der Joystick muss mit GND, 5V, A0 und A1 auf dem Arduiono verbunden werden.

Funktionsweise:

Es gibt vier Maulwürfe, die der dritten, vierten, fünften und sechsten LED von links entsprechen. Wenn eine der vier Lampen zufällig aufleuchtet, muss der Joystick in einer bestimmten Zeit in die entsprechende Richtung bewegt werden.Um den ersten "Maulwurf" anzusteuern, muss man ihn nach rechts bewegen, für den zweiten nach unten, für den dritten nach oben und für den vierten nach rechts. ( Es kann sein, dass das Programm nicht funktioniert, da ich es eigenständig verändert habe um von der Steuerung vom Original Programm abzuweichen.)

Um zu sehen ob man einen Erfolg oder Misserfolg hat, gibt es die rote und die grüne Lampe links. Um wieder vom Original Programm abzuweichen, habe ich es so verändert, dass bei einem Erfolg die rote Lampe aufleuchtet und bei einem Misserfolg die grüne Lampe. Dadurch wird sicherlich auch nochmal der Schwierigkeitsgrad erhöht, da es den Spieler Anfangs verwirrt ;).

Die gelbe Lampe ganz rechts gibt durch blinken den Highscore an. Wenn eine Runde nach einem Misserfolg zu ende ist, gibt sie auch durch blinken den Spielstand an. Ein neuer Highscore ersetzt automatisch den alten.

Code:

//Der Code kann einige Fehler enthalten, da ich ihn verändert habe.

//Um die Scheirigkeit zu verändern muss man die delay Zeiten verändern.

//joystick
int sX = A0;     //x-Achse Joystick, Analog Input
int sY = A1;     //y-Achse Joystick, Analog Input
int sSX;         //Status von X wird gelesen von sX
int sSY;         //Status von Y wird gelesen von sY
int sS;
 
// Spiel

int rNum;        //zufälliger int wählt zufällige LED, die angeht
int wins=0;      //zählen aufeinanderfolgende Siege
int highScore=0; //Speichern von Highscores
 
// verschiendene Level
const int stupid=1000;
const int easy=500;
const int medium=325;
const int hard=250;

int ledPins[]={5,2,4,3,6,7,8};  // Initialinsierung von LEDs
int pinCount=7;                // Anzahl von LEDs
void setup() {
Serial.begin(9600);
pinMode(sX, INPUT);
pinMode(sY, INPUT);
for (int thisPin = 0; thisPin < pinCount; thisPin++) { //Zuweisung aller Pins als outputs für die Loop
    pinMode(ledPins[thisPin], OUTPUT);
  }
}
void loop() {
  rNum=random(4); //Generierung von zufälligen Entscheidungen
  delay(1000);
  digitalWrite(ledPins[rNum], HIGH); //Erleuchten der zufällig ausgewählten LED
  delay(stupid); // Schwirigkeitsgrad
 
  sSX = analogRead(sX); //Auslesen der x-Achse input
  delay(100);
  sSY = analogRead(sY); //Auslesen der y-Achse input
//umwandlung der X und Y inputs zu den vier Möglichkeiten. 0 und 1023 sind die maximal Werte für jede Achse
  sS=0;
  switch (sSX) {
  case 1023:
  sS=1;      // rechts
  break;
  case 0:
  sS=2;      // links
  break;
}
switch (sSY) {
  case 1023:
  sS=3;      // unten
  break;
  case 0:
  sS=4;      //oben
  break;
}
  digitalWrite(ledPins[rNum], LOW); //Ausschalten der zufällig ausgewählten LED, nachdem mit mem Joystick die Entscheidung gefallen ist

  if (sS-1==rNum) //prüfen, ob der Spieler die richtige LED angesteuert hat.
  {
    wins++;
    for (int k=0; k<=3; k++) {     //rotes Blinken, wenn die Antwort richtig ist
    digitalWrite(ledPins[5], HIGH);
    delay(50);
    digitalWrite(ledPins[5], LOW);
    delay(50);
    }
  }
  else
  {
    if (wins>highScore) { //wenn der Highscore geknackt wurde, wird der neue Highscore gespeichert
        highScore=wins;
        wins=0;
    }
    for (int i=0; i<=3; i++) {       //grünes Blinken bei einer falschen Antwort
      digitalWrite(ledPins[4], HIGH);
      delay(50);
      digitalWrite(ledPins[4], LOW);
      delay(50);
    }
    for (int w=0; w <highScore;w++) { // Durch blinken wird der Highscore angegeben.
         digitalWrite(ledPins[6], HIGH);
        delay(200);
        digitalWrite(ledPins[6], LOW);
        delay(200);
    } 
  } 
  }

 

 

Erstellt: Eva Schwegle (28.04.2020) Letzte Änderung: Lucienne Gebauer (29.04.2020)