Gratis verzending vanaf €74,95 NL (€99,95 BE/DE)

Voor 16:00 besteld = morgen in huis

Express voor 13:00 besteld = vanavond in huis*

14 dagen gratis terugsturen*


Land

In dit Arduino project laat ik zien hoe je het spel Simon says kan maken met een Arduino.
Simon Says is een spelletje waarbij een je 4 Lampjes hebt die ieder verbonden zijn aan een druk knop. In het begin gaat er één lampje branden.
Vervolgens druk je de bijbehorende knop in. Als je de juiste knop hebt ingedrukt gaan het zelfde en een volgend lampje branden. Elke keer als je het goed hebt komt er een lampje bij, elke keer als er een lamp bij komt ga je een ronde omhoog. In dit project kan je zelf aanpassen hoeveel rondes je wilt spelen.
Als je een reeks niet goed hebt heb je het spel verloren en begin je weer opnieuw. Elke keer als het spel opnieuw gespeeld wordt start een random volgorde.

  • Niveau – Beginner 30% 30%
  • Tijdsduur – 20/30 Min 35% 35%
  • Kosten – €36,87 euro compleet 30% 30%

Stap 1: Benodigdheden

1X Arduino UNO

1X breadboard

18X jumper wires

4X push button

1X groen, blauw, geel en rood LED lampje

4X 220 ohm weerstand

Stap 2: Bouwen en Bedraden

Nu gaan we het in elkaar zetten van Simon Says.

Je begint met de plus en de min van de Arduino op de plus en de min van het breadboard aan te sluiten.

Daarna doe je de LED lampjes in het bord. Als je dat hebt gedaan plaats je bij ieder LED lampje een 220 ohm weerstand aan de plus zijde, dit is de langste pin.
Vervolgens ga je van de min pin van de LED lampjes ieder naar een eigen push button.

Als je dat hebt gedaan ga je van bij iedere knop van de pin die verticaal van de min zit bij ieder ledje (zie Fritzing schema) naar de min van het breadboard. Dan ga je van iedere knop bij de pin die diagonaal van de min van het ledje zit naar de plus van het breadboard.

Hierna voeg je een kabel van de diagonale pin naar de min van de ledjes. A2 = rood, A3 = groen, A1 = geel en blauw = A0.

Als laatste gaat er een kabel van de andere zijde van de weerstand naar de I/O pinnen. Van rood naar pin 3, van groen naar pin 2 van geel naar pin 4 en van blauw naar pin 5.

Stap 3: Programmeren

 

Nu je klaar bent met het bedraden van de Arduino kun je het board gaan programmeren.

De onderstaande code kan je overnemen in je Arduino programma. Wij raden aan om de gehele code over te typen aangezien je daar meer van leert.
In de code zelf kan je aanpassen hoe snel de lampjes aan en uit gaan en met hoeveel die tijd afneemt per goede combinatie. Op deze manier kan je het spelletje steeds moeilijker maken.

 

const int MAX_LVL = 10;

int volgorde[MAX_LVL];

int eigen_volg[MAX_LVL];

int LVL = 1;

int snelheid = 1000;

 

void setup(){

  pinMode(A0, INPUT);

  pinMode(A1, INPUT);

  pinMode(A2, INPUT);

  pinMode(A3, INPUT);

  pinMode(2, OUTPUT);

  pinMode(3, OUTPUT);

  pinMode(4, OUTPUT);

  pinMode(5, OUTPUT);

  digitalWrite(2, LOW);

  digitalWrite(3, LOW);

  digitalWrite(4, LOW);

  digitalWrite(5, LOW);

}

 

void loop(){

  if(LVL == 1)

  genereer_volg();

  if(digitalRead(A0) == HIGH && digitalRead(A3) == HIGH || LVL != 1){

    show_volg();

    get_volg();

  }

}

 

void show_volg(){

  digitalWrite(2, LOW);

  digitalWrite(3, LOW);

  digitalWrite(4, LOW);

  digitalWrite(5, LOW);

  for(int i = 0; i < LVL; i++){

    digitalWrite(volgorde[i], HIGH);

    delay(snelheid);

    digitalWrite(volgorde[i], LOW);

    delay(200);

  }

}

 

void get_volg(){

  int vlag = 0;

  for(int i = 0; i < LVL; i++){

    vlag = 0;

    while(vlag == 0){

      if(digitalRead(A0) == LOW){

        digitalWrite(5, HIGH);

        eigen_volg[i] = 5;

        vlag = 1;

        delay(200);

        if(eigen_volg[i] != volgorde[i]){

          verkeerde_volg();

          return;

        }

        digitalWrite(5, LOW);

      }

      if(digitalRead(A1) == LOW){

        digitalWrite(4, HIGH);

        eigen_volg[i] = 4;

        vlag = 1;

        delay(200);

        if(eigen_volg[i] != volgorde[i]){

          verkeerde_volg();

          return;

        }

        digitalWrite(4, LOW);

      }

      if(digitalRead(A2) == LOW){

        digitalWrite(3, HIGH);

        eigen_volg[i] = 3;

        vlag = 1;

        delay(200);

        if(eigen_volg[i] != volgorde[i]){

          verkeerde_volg();

          return;

        }

        digitalWrite(3, LOW);

      }

      if(digitalRead(A3) == LOW){

        digitalWrite(2, HIGH);

        eigen_volg[i] = 2;

        vlag = 1;

        delay(200);

        if(eigen_volg[i] != volgorde[i]){

          verkeerde_volg();

          return;

        }

        digitalWrite(2, LOW);

      }

    }

  }

  goede_volg();

}

 

void genereer_volg(){

  randomSeed(millis());

  for(int i = 0; i < MAX_LVL; i++){

    volgorde[i] = random(2, 6);

  }

}

 

void verkeerde_volg(){

  for(int i = 0; i < 3; i++){

    digitalWrite(2, HIGH);

    digitalWrite(3, HIGH);

    digitalWrite(4, HIGH);

    digitalWrite(5, HIGH);

    delay(250);

    digitalWrite(2, LOW);

    digitalWrite(3, LOW);

    digitalWrite(4, LOW);

    digitalWrite(5, LOW);

    delay(250);

  }

  LVL = 1;

  snelheid = 1000;

}

 

void goede_volg(){

  digitalWrite(2, LOW);

  digitalWrite(3, LOW);

  digitalWrite(4, LOW);

  digitalWrite(5, LOW);

  delay(250);

  digitalWrite(2, HIGH);

  digitalWrite(3, HIGH);

  digitalWrite(4, HIGH);

  digitalWrite(5, HIGH);

  delay(500);

  digitalWrite(2, LOW);

  digitalWrite(3, LOW);

  digitalWrite(4, LOW);

  digitalWrite(5, LOW);

  delay(250);

  if(LVL < MAX_LVL);

  LVL++;

  snelheid -= 100;

}

Als het goed is ziet jou Simon Says spel er nu ongeveer uit zoals in het onderstaande filmpje.
Elk spelletje is anders, daarom kan er dus uren plezier van hebben!

 

De waardering van www.elektronicavoorjou.nl bij WebwinkelKeur Reviews is 9.3/10 gebaseerd op 5515 reviews.