Simon sagt Hilfe

OP #4896987
Lesenswert?

Hallo,

Ich brauche Hilfe beim programmieren des Spiels "Simon sagt" mit 
Arduino.
Es gibt 4 verschiedene LEDs. Zuerst leuchtet eine von ihnen auf, nun 
soll das Programm darauf warten, dass der zu der LED gehörige Taster 
betätigt wird. Wenn der richtige Taster betätigt wurde, soll eine neue 
LED dazukommen.

Am besten wäre es wenn die LEDs in einer festen Reihenfolge aufleuchten 
d.h. kein Zufallsprinzip.

Ich würde mich sehr darüber freuen, wenn mir jemand einen Sketch geben 
könnte, oder das zuvor genannte erklären könnte.

Danke schon mal im Voraus!
#4897126
Lesenswert?

Hi

Zumindest wirft 'die Suchmaschine meines Vertrauen' bei 'Simon sagt 
Sketch' keine Treffer :=)

Klar solltest Du bereits LEDs an/aus schalten können so wie Taster 
abfragen.

Ein Array mit 100 Zeichen Platz, Welches mit Zufallszahlen 0-3 gefüllt 
wird.

Eine Zähl-Variable, initiiert auf 4

Ausgabe der Licht/Ton-Folge

Freigabe der Taster

Jeder Tastendruck wird 'mitgeschrieben' und auch direkt kontrolliert, ob 
man korrekt geantwortet hat.
Ja -> Licht & Ton für den Tastendruck
Nein -> R-I-P Sequenz und negative Tonfolge, Neustart vorschlagen

Haben wir alle gespielten Töne eingegeben?
Nein -> Sprung, um nächsten Tastendruck auszuwerten

Zähl-Variable um 1 erhöhen

Sind wir über 100?
Nein -> Sprung zur ersten Ausgabe der Licht/Ton-Folge
Ja -> Win-Sequenz, viel Lärm und rumgeblinke, Neustart vorschlagen

MfG
#4897201
Lesenswert?

So ein Sketch sieht ungefähr so aus
1
uint8_t i,n;
2
boolean gedrueckt;
3
uint8_t led_pin[]={ 8,9,10,11 }; // LED in der Reihenfolge in der sie aufleuchten
4
uint8_t taster_pin[]={ 0, 1, 2, 4 }; // Taster in der Reihenfolge, in der sie gedrückt werden müssen
5
boolean taster_gedrueckt[4];
6
uint8_t piezo=3;
7

8
void start(void)
9
{
10
  for(i=0;i<3;i++) 
11
  {
12
    pinMode(led_pin[i],OUTPUT);
13
    digitalWrite(led_pin[i],LOW);
14
    pinMode(taster_pin[i],INPUT);
15
    taster_gedrueckt[i]=digitalRead(taster_pin[i]);
16
  }
17
  i=0;
18
  digitalWrite(led_pin[i],HIGH);
19
}
20

21
void setup() 
22
{
23
  start();
24
}
25

26
void loop() 
27
{
28
  if(n<3) n++; else n=0;
29
  gedrueckt=digitalRead(taster_pin[n]);
30
  if(gedrueckt&&!taster_gedrueckt[n])
31
  {
32
    if(i!=n) // falscher Taster
33
    {
34
      tone(piezo, 880, 1000); // falsch
35
      start();
36
    }
37
    else if(i<3) // richtiger Taster
38
    {
39
      digitalWrite(led_pin[++i],HIGH); // nächste LED aufleuchten lassen
40
    }
41
    else
42
    {
43
      tone(piezo, 440, 1000); // alle 4 richtig
44
      start();
45
    }
46
  }
47
  taster_gedrueckt[n]=gedrueckt;
48
  delay(5);
49
}
aber bei fester Reihenfolge ist das gedrücke absolut hirnlos.
#4897299
Lesenswert?

Hi

Dann nimmst Du PI als Grundlage für Deine Reihenfolge, so lernt man 
wenigstens noch was dabei :)
(e, die 27.te Wurzel aus 23547 ginge aber wohl auch - man muß ja nur auf 
'2 bit' runterrechnen)

@Thor
Wo Du es sagst - aber weder ich noch der TO hatten wohl diese Gedanken - 
und da es auf Deutsch keinen Treffer gab, kann ich davon ausgehen, daß 
der TO auch Nichts gefunden hat (vll. auch hätte).

MfG
#4897351
Lesenswert?

Kevin M. schrieb:
> Ich würde mich sehr darüber freuen, wenn mir jemand einen Sketch geben
> könnte, oder das zuvor genannte erklären könnte.

Findest Du keinen fertigen Arduino-Sketch zum Downloaden? das 
Spieleprinzip von "Senso"(deutscher Markt) bzw. "Simon 
says"(ausländische Märkte) haben sich wohl schon einige Arduino-Bastler 
in den letzten 10 Jahren als Bastelaufgabe vorgenommen und realisiert, 
und wenigstens einige von denen dürften ihre Programme mit vollständigem 
Quellcode offengelegt haben.

Allerdings dürften wohl die meisten Arduino-Bastelarbeiten nach dem 
Zufallsprinzip funktionieren, so wie das seit etlichen Jahrzehnten 
vertriebene Originalgerät von MB bzw. Hasbro.

Und natürlich nicht nur mit LEDs, sondern auch mit Tonabgabe über 
Piezeo-Lautsprecher: Vier Tasten, vier verschiedene Töne.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren