Zufalls LED Spiel

Hallo Leute,

ich habe derzeit ein Spiel mit 5LED´s und 1 Taster programmiert.
Bei dem die Led´s durchwechseln, sobald die mittlere Grüne LED leuchtet muss der Taster gedrückt werden. Hat man das geschafft wird das durchwechseln schneller und eine Punktzahl erscheint auf dem Seriellen Monitor.

Jetzt möchte ich aber das die LED´s zufällig durchwechseln und das man bei der ersten ODER der zweiten LED den Taster drücken muss.

Könnt ihr mir dabei weiter helfen?

Vielen Dank im vorraus.
Tobias

Hier das Programm das bisher die LED´s durchzählt:

/****************************************************************************
  NAME:     Tobias Frommer
  PROGRAMM: Spiel StopIt
  INFO:     Durchwechseln der LED das durch einen Taster schneller wird
            und durch einen Seriellen Monitor ausgegeben wird
  DATUM:    04.11.2016
****************************************************************************/

//Konstanten


const int Led1 = 2;                                    // Die LED´s werden den jeweiligen Pin´s zugeteilt
const int Led2 = 3;                                    // ...
const int Led3 = 4;                                    
const int Led4 = 5;                                    
const int Led5 = 6;                                    
const int Button = 13;                                 // Der Taster wird dem Pin zugeteilt


// Variablen

int tasterStatus = HIGH;                               // Aktuelles Signal vom Eingangspin
int tasterGedrueckt = 0;                               // Abfragen ob Taster gedrückt war
int zahl = 0;                                          // Die Zählfunktion wird auf 0 gesetzt.
int LightPosition = 0;                                 // Speichern der LED
int pause = 1000;                                      // Zeit zwischen dem wechseln der LED
long lastMove = millis();                              // Die Zeit in Millisekunden ausgeben
boolean old_val = HIGH;                                // Den letzten Status des Tasters auf HIGH setzen

unsigned long tasterZeit = 0;                          // Zeit beim Drücken des Tasters
int entprellZeit = 50;                                 // Zeit zur Entprellung


// Setup

void setup()
{
  pinMode(Led1, OUTPUT);                               // LED´s als Output deklarieren
  pinMode(Led2, OUTPUT);                               // ...
  pinMode(Led3, OUTPUT);
  pinMode(Led4, OUTPUT);
  pinMode(Led5, OUTPUT);
  pinMode(Button, INPUT);

  Serial.begin(9600);
  
  newGame();                                           // Start des Spiels StopIt

}

// Start der Endlosschleife

void loop()
{

  // Taster Entprellen
  
  tasterStatus = digitalRead(Button);

  if (tasterStatus == HIGH)
  {
    tasterZeit = millis();                             // Aktualisiere tasterZeit
    tasterGedrueckt = 1;                               // Speichert, dass Taster gedrückt wurde
  }

 // Start der Bewegung
 
  if (millis() - lastMove >= pause)                    // Licht in Bewegung bringen

  {
    lastMove = millis();                               // Aktualisiere lastMove

    LightPosition++;                                   // LED eins weiter setzen
    if (LightPosition >= 6) LightPosition = 1;

    move(LightPosition);                               // Update der LED Position
  }

 // Abfrage was passiert wenn das Entprellen, der Taster und die Position der LED stimmt
 
  if ((millis() - tasterZeit > entprellZeit) && tasterGedrueckt == 1 && old_val == LOW)                                               
  {
    tasterGedrueckt = 0;                               // Setzt gedrückten Taster zurück
    
    if (LightPosition == 3)

    {
      ++zahl;                                          // Zähler eins hoch und auf den Seriellen Monitor ausgeben
      delay(200);
      Serial.println();
      Serial.print("================================= ");
      Serial.print(zahl);
      Serial.println(" Punkt(e) ================================ ");
      Serial.println();


      
      if (pause > 750)                                 // Geschwindigkeit wird bei jedem richtigen
      {                                                // Tasendruck erhöht
        pause -= 200;
      } else if (pause > 500)
      {
        pause -= 100;
      } else if (pause > 250)
      {
        pause -= 50;
      } else if (pause > 100)
      {
        pause -= 20;
      } else if (pause > 10)
      {
        pause -= 1;
      }
    

// Spiel zu ENDE

    } else                                             // Wenn man zum flaschen Zeitpunkt drückt endet
                                                       // das Spiel und fängt von neuem an.
    {

      Serial.println("=============================================================================");
      Serial.println("================================= GAME OVER =================================");
      Serial.print("================================ Punktzahl: ");
      Serial.print(zahl);
      Serial.println(" ===============================");
      Serial.println("=============================================================================");
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();
      Serial.println();

      delay(10);

      do {                                             // Signalisieren das das Spiel vorbei ist
        digitalWrite(Led1, LOW);                       // LED´s  blinken
        digitalWrite(Led2, LOW);
        digitalWrite(Led3, LOW);
        digitalWrite(Led4, LOW);
        digitalWrite(Led5, LOW);
        delay(750);
        digitalWrite(Led1, HIGH);
        digitalWrite(Led2, HIGH);
        digitalWrite(Led3, HIGH);
        digitalWrite(Led4, HIGH);
        digitalWrite(Led5, HIGH);
        delay(187);
      }
      while (digitalRead(Button) == LOW);              // Spiel erst neu starten wenn der Taster erneut gedrückt wurde
      newGame();
      delay(500);
    }
  }

  old_val = digitalRead(Button);

}

void move(int LightPosition)                           // Update der LED Position

{

  for (int x = Led1; x <= Led5; x++)                   // Alle LED AUS
  {
    digitalWrite(x, LOW);
  }


  digitalWrite(LightPosition + 1, HIGH);               // Alle LED AN
}


// Reset der Konfiguration bei Neustart

void newGame()                                         // Deklarieren der newGame Schleife
{

  LightPosition = 0;                                   // LED auf 0 setzen
  pause = 1000;
  Serial.println();
  Serial.println("=============================================================================");
  Serial.println("=========================== StopIt- dental EGGERT ===========================");
  Serial.println("=========== Druecke den Taster sobald die Gruene LED aufleuchtet ============");
  Serial.println("=============================================================================");
  zahl = 0;
  delay(1000);

}

Evtl. siehst du es ja selber, dass man deinen Sketch so schlecht lesen kann.

Daher setze den bitte in Code-Tags. Schaltfläche </> dazu verwenden, oben links im Editor-Fenster.
Oder vor den Sketch “[code]" und nach dem Sketch "[/code]” ohne den *Stern und Anführungszeichen setzen. Das kannst du auch noch nachträglich machen.

Entschuldigung,

ich kannte bisher die Funktion noch nicht

ok,

derzeit läuft das Programm noch so ab:

*Taster wird gedrückt und das Spiel beginnt. *Die LED´s laufen von rechts nach links langsam durch. *Wenn die mittlere LED leuchtet und der Taster gedrückt wird wechseln die LED´s schnell durch. *Auf dem Seriellen Monitor erscheint eine "1". Da man das erste Level -die LED´s wurden einmal schneller- geschafft hat. *Das ganze geht so lange bis man auf den Taster drückt aber eine andere LED leuchtet. *Das Spiel ist somit vorbei, Alle LED´s blinken und es erscheint auf dem Seriellen Monitor Game Over. *Das Spiel wird neu gestartet sobald der Taster gedrückt wird.

Jetzt möchte ich den relativ gleichen Spieleablauf. Nur das jetzt die LED´s nicht mehr einzeln durchlaufen sonden per Zufall ausgewählt werden und aufleuchten. Sobald die LED 1 ODER 2 leuchtet und der Taster gedrückt wird, wird das wechseln zwischen den LED´s schneller. Eben wieder so lange bis der Taster beim leuchten einer anderer LED gedrückt wird. Dann wieder wie oben, Game Over im Monitor und blinken der LED bis der Taster weder gedrückt wird.

Wurde es jetzt ein wenig verständlicher beschrieben was ich vor habe?

Push :)