webwinkelkeur logo

4.7 gem.

5145+ beoordelingen
webwinkelkeur logoBekijk alles

5145+ beoordelingen

5145+ beoordelingen

Bestel voor 16:00 voor dezelfde dag verzending

14 dagen retour

NL

Particulier

Zakelijk

Arduino Project: Simon Says

Beginner
25
30,45

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.

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.

Programmeren

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;

}