Bie
Published

Arduino Game to Test Your Reflexes!

This lights-and-buttons game tests how quick you are to react, and is a lot of fun to play!

IntermediateShowcase (no instructions)3,419
Arduino Game to Test Your Reflexes!

Things used in this project

Hardware components

Arduino Mega 2560
Arduino Mega 2560
×1
Resistor 330 ohm
Resistor 330 ohm
×17
Jumper wires (generic)
Jumper wires (generic)
×30
Piezo buzzer
×1
Rotary Encoder with Push-Button
Rotary Encoder with Push-Button
×1
LED (generic)
LED (generic)
×2
Blue LED
×1
White LED
×12
Multicolored LED
×2

Story

Read more

Code

Code for TestYourReaction Game

C/C++
#include "pitches.h"

const int rotary = 4;
int bonus1 = 22;
int w1 = 23;
int w2 = 24;
int r3 = 25;
int w4 = 26;
int w5 = 27;
int w6 = 28;
int y1 = 29;
int blue = 30;
int y2 = 31;
int w7 = 32;
int w8 = 33;
int w9 = 34;
int r10 = 35;
int w11 = 36;
int w12 = 37;
int bonus2 = 38;

int Ypos = 23;
int level = 1;
int free1 = 0;
int speed1 = 50;
int fy;

void clear(){
  for(int i = 22; i < 39; i++){
    digitalWrite(i,LOW);
  }
}

void on(){
  for(int i = 22; i < 39; i++){
    digitalWrite(i, HIGH);
  }
}

void RtL(){
  for(int i = 39; i > 21; i--){
    digitalWrite(i, HIGH);
    tone(8, i*100, 100);
    delay(100);
  }
}

void LtR(){
  for(int i = 22; i < 39; i++){
    digitalWrite(i, HIGH);
    tone(8, i*100, 100);
    delay(100);
  }
}

void RtLc(){
  for(int i = 39; i > 21; i--){
    digitalWrite(i, LOW);
    delay(100);
  }
}

void LtRc(){
  for(int i = 22; i < 39; i++){
    digitalWrite(i, LOW);
    delay(100);
  }
}

int updown = 0;
void directionChange(){
  if(Ypos == 23){
    updown=1;
  }if(Ypos == 37){
    updown=0;
  }
}

void inOut(){
  for(int i = 22; i < 30; i++){
      digitalWrite(i, HIGH);
      tone(8, i*100, 100);
      delay(40);
    }for(int i = 39; i > 30; i--){
      digitalWrite(i, HIGH);
      tone(8, i*100, 100);
      delay(40);
    }
    
    delay(1000);
    
    for(int i = 30; i > 21; i--){
      digitalWrite(i, LOW);
      delay(40);
    }for(int i = 30; i < 39; i++){
      digitalWrite(i, LOW);
      delay(40);
    }
}

void QuickBack(){
  for(int i = 0; i < 5; i++){
    for(int i = 22; i < 39; i++){
      digitalWrite(i, HIGH);
      tone(8, i*100, 30);
      delay(10);
      clear();
    }for(int i = 39; i > 22; i--){
      digitalWrite(i, HIGH);
      tone(8, i*100, 30);
      delay(10);
      clear();
    }
  }
}

void March(){
  for(int i = 0; i < 10; i++){
    for(int i = 22; i < 39; i+=2){
      digitalWrite(i, HIGH);
      tone(8, i*75, 70);
    }delay(100);
    clear();
    for(int i = 23; i < 39; i+=2){
      digitalWrite(i, HIGH);
      tone(8, i*75, 70);
    }delay(100);
    clear();
  }
}

void setup(){
  fy = speed1;
  for(int i = 22; i < 39; i ++){
    pinMode(i, OUTPUT);
  }
  pinMode(rotary, INPUT);
  digitalWrite(rotary, HIGH);
  Serial.begin(9600);
  
  while(digitalRead(rotary)){
    for(int i = 22; i < 39; i+=2){
      digitalWrite(i, HIGH);
      tone(8, NOTE_C5, 100);
    }delay(100);
    tone(8, NOTE_D5, 100);
    delay(100);
    clear();
    for(int i = 23; i < 39; i+=2){
      digitalWrite(i, HIGH);
      tone(8, NOTE_G5, 100);
    }delay(100);
    tone(8, NOTE_E5, 100);
    delay(100);
    clear();
  }
  clear();
  on();
  delay(3000);
  clear();
  delay(1000);
}


void waiting(){
  tone(8, NOTE_C5, 500);
  delay(500);
  tone(8, NOTE_D5, 500);
  delay(500);
  tone(8, NOTE_F5, 500);
  delay(500);
}

void level1(){
  speed1=50;
  while(free1 == 0){
    directionChange();
    if(updown==0){
      Ypos--;
      Serial.println("Y--");
    }if(updown==1){
      Ypos++;
      Serial.println("Y++");
    }digitalWrite(Ypos, HIGH);
    Serial.println(Ypos);
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    clear();
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;Serial.println("Level Up");
    March();
  }else if(Ypos == 29 || Ypos == 31){
    inOut();
    
    Ypos=22;
    level1();
  }else{
  QuickBack();
  level = 1;
  Ypos=22;}
}

void level2(){
  Ypos=22;
  updown=1;
  speed1=40;
  while(free1 == 0){
    directionChange();
    if(updown==0){
      Ypos--;
      Serial.println("Y--");
    }if(updown==1){
      Ypos++;
      Serial.println("Y++");
    }digitalWrite(Ypos, HIGH);
    Serial.println(Ypos);
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    clear();
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;
    March();
  }else if(Ypos == 29 || Ypos == 31){
    Ypos=22;
    inOut();
    level2();
  }else{
  QuickBack();
  level = 1;}
}

void level3(){
  Ypos=22;
  updown=1;
  speed1=30;
  while(free1 == 0){
    directionChange();
    if(updown==0){
      Ypos--;
      Serial.println("Y--");
    }if(updown==1){
      Ypos++;
      Serial.println("Y++");
    }digitalWrite(Ypos, HIGH);
    Serial.println(Ypos);
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    clear();
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;
    March();
  }else if(Ypos == 29 || Ypos == 31){
    Ypos=22;
    inOut();
    level3();
  }else{
  QuickBack();
  
  
  level = 1;}
}

void level4(){
  Ypos=22;
  updown=1;
  speed1=20;
  while(free1 == 0){
    directionChange();
    if(updown==0){
      Ypos--;
      Serial.println("Y--");
    }if(updown==1){
      Ypos++;
      Serial.println("Y++");
    }digitalWrite(Ypos, HIGH);
    Serial.println(Ypos);
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    clear();
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;
    March();
  }else if(Ypos == 29 || Ypos == 31){
    Ypos=22;
    inOut();
    level4();
  }else{
  QuickBack();
  
  
  level = 1;}
}

void level5(){
  Ypos=22;
  updown=1;
  speed1=10;
  while(free1 == 0){
    directionChange();
    if(updown==0){
      Ypos--;
      Serial.println("Y--");
    }if(updown==1){
      Ypos++;
      Serial.println("Y++");
    }digitalWrite(Ypos, HIGH);
    Serial.println(Ypos);
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    clear();
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;
    March();
  }else if(Ypos == 29 || Ypos == 31){
    Ypos=22;
    inOut();
    level5();
  }else{
  QuickBack();
  
  
  level = 1;}
}

void level6(){
  Ypos=22;
  updown=1;
  speed1=5;
  while(free1 == 0){
    directionChange();
    if(updown==0){
      Ypos--;
      Serial.println("Y--");
    }if(updown==1){
      Ypos++;
      Serial.println("Y++");
    }digitalWrite(Ypos, HIGH);
    Serial.println(Ypos);
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    clear();
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;
    March();
  }else if(Ypos == 29 || Ypos == 31){
    Ypos=22;
    inOut();
    level6();
  }else{
  QuickBack();
  
  
  level = 1;}
}

void level15(){
  Ypos=22;
  updown=1;
  speed1=40;
  while(free1 == 0){
    Ypos=random(23,38);
    digitalWrite(Ypos, HIGH);
    Serial.println(Ypos);
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    clear();
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;
    March();
  }else if(Ypos == 29 || Ypos == 31){
    Ypos=22;
    inOut();
    level15();
  }else{
  QuickBack();
  
  
  level = 1;}
}

void level7(){
  Ypos=22;
  updown=1;
  speed1=5;
  while(free1 == 0){
    if(Ypos==37){
      Ypos=22;
    }Ypos++;
    digitalWrite(Ypos, HIGH);
    Serial.println(Ypos);
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    clear();
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;
    March();
  }else if(Ypos == 29 || Ypos == 31){
    Ypos=22;
    inOut();
    level7();
  }else{
  QuickBack();
  
  
  level = 1;}
}

void level8(){
  Ypos=22;
  updown=1;
  speed1=5;
  while(free1 == 0){
    directionChange();
    
    if(updown==1){
      Ypos++;
    }else if(updown==0){
      Ypos--;
    }
    
    digitalWrite(Ypos, HIGH);
    Serial.println(Ypos);
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    if(Ypos==37 || Ypos==23){
      int y = speed1;
      y=y*random(0,40);
      while(y!=0){
        if(!digitalRead(rotary)){
          free1=1;
        }y--;
        delay(10);
      }
    }
    clear();
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;
    March();
  }else if(Ypos == 29 || Ypos == 31){
    Ypos=22;
    inOut();
    level8();
  }else{
  QuickBack();
  
  
  level = 1;}
}

void level9(){
  Ypos=22;
  updown=1;
  speed1=40;
  while(free1 == 0){
    directionChange();
    
    if(updown==1){
      Ypos++;
    }else if(updown==0){
      Ypos--;
    }
    
    for(int i = 22;  i < 38; i++){
      if(i!=Ypos){
        digitalWrite(i, HIGH);
      }
    }
    
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    
    clear();
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;
    March();
  }else if(Ypos == 29 || Ypos == 31){
    Ypos=22;
    inOut();
    level9();
  }else{
  QuickBack();
  
  
  level = 1;}
}

void level10(){
  Ypos=22;
  updown=1;
  speed1=20;
  while(free1 == 0){
    directionChange();
    
    if(updown==1){
      Ypos++;
    }else if(updown==0){
      Ypos--;
    }
    
    for(int i = 22;  i < 38; i++){
      if(i!=Ypos){
        digitalWrite(i, HIGH);
      }
    }
    
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    
    clear();
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;
    March();
  }else if(Ypos == 29 || Ypos == 31){
    Ypos=22;
    inOut();
    level10();
  }else{
  QuickBack();
  
  
  level = 1;}
}

void level11(){
  Ypos=22;
  updown=1;
  speed1=5;
  while(free1 == 0){
    directionChange();
    
    if(updown==1){
      Ypos++;
    }else if(updown==0){
      Ypos--;
    }
    
    for(int i = 22;  i < 38; i++){
      if(i!=Ypos){
        digitalWrite(i, HIGH);
      }
    }
    
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    
    clear();
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;
    March();
  }else if(Ypos == 29 || Ypos == 31){
    Ypos=22;
    inOut();
    level11();
  }else{
  QuickBack();
  
  
  level = 1;}
}

void level12(){
  Ypos=22;
  updown=1;
  speed1=20;
  while(free1 == 0){
    directionChange();
    
    if(updown==1){
      Ypos++;
    }else if(updown==0){
      Ypos--;
    }
    
    digitalWrite(Ypos, HIGH);
    
    if(Ypos <= 25 || Ypos >= 35){
      speed1=20;
    }else if(Ypos <= 27 || Ypos >= 33){
      speed1=10;
    }else if(Ypos <= 31){
      speed1=5;
    }
    
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    
    clear();
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;
    March();
  }else if(Ypos == 29 || Ypos == 31){
    Ypos=22;
    inOut();
    level12();
  }else{
  QuickBack();
  
  
  level = 1;}
}

void level13(){
  Ypos=22;
  updown=1;
  speed1=5;
  while(free1 == 0){
    directionChange();
    
    if(updown==1){
      Ypos++;
    }else if(updown==0){
      Ypos--;
    }
    
    digitalWrite(Ypos, HIGH);
    
    if(Ypos <= 26){
      speed1=20;
    }else if(Ypos <= 28){
      speed1=15;
    }else if(Ypos <= 31){
      speed1=10;
    }else if(Ypos <= 34){
      speed1=7;
    }else if(Ypos <= 37){
      speed1=5;
    }
    
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    
    clear();
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;
    March();
  }else if(Ypos == 29 || Ypos == 31){
    Ypos=22;
    inOut();
    level13();
  }else{
  QuickBack();
  
  
  level = 1;}
}

void level14(){
  Ypos=22;
  updown=1;
  speed1=10;
  while(free1 == 0){
    directionChange();
    
    if(updown==1){
      Ypos++;
    }else if(updown==0){
      Ypos--;
    }
    
    
    if(Ypos != 26 && Ypos != 27 && Ypos != 33 && Ypos != 34){
      digitalWrite(Ypos, HIGH);
    }
    
    
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    
    clear();
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;
    March();
  }else if(Ypos == 29 || Ypos == 31){
    Ypos=22;
    inOut();
    level14();
  }else{
  QuickBack();
  
  
  level = 1;}
}

void level16(){
  Ypos=22;
  updown=1;
  speed1=5;
  while(free1 == 0){
    directionChange();
    
    if(updown==1){
      Ypos++;
    }else if(updown==0){
      Ypos--;
    }
    
    for(int i = 22; i < 38; i++){
      if(i != Ypos){
        digitalWrite(i, HIGH);
      }
    }
    
    if(Ypos <= 26){
      speed1=20;
    }else if(Ypos <= 28){
      speed1=15;
    }else if(Ypos <= 31){
      speed1=10;
    }else if(Ypos <= 34){
      speed1=7;
    }else if(Ypos <= 37){
      speed1=5;
    }
    
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    
    clear();
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;
    March();
  }else if(Ypos == 29 || Ypos == 31){
    Ypos=22;
    inOut();
    level16();
  }else{
  QuickBack();
  
  
  level = 1;}
}

void level17(){
  Ypos=22;
  updown=1;
  speed1=20;
  while(free1 == 0){
    directionChange();
    
    if(updown==1){
      Ypos++;
    }else if(updown==0){
      Ypos--;
    }
    
    for(int i = 22; i < 38; i++){
      if(i != Ypos){
        digitalWrite(i, HIGH);
      }
    }
    
    if(Ypos <= 25 || Ypos >= 35){
      speed1=20;
    }else if(Ypos <= 27 || Ypos >= 33){
      speed1=10;
    }else if(Ypos <= 31){
      speed1=5;
    }
    
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    
    clear();
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;
    March();
  }else if(Ypos == 29 || Ypos == 31){
    Ypos=22;
    inOut();
    level17();
  }else{
  QuickBack();
  
  
  level = 1;}
}

int u = 0;
void level20(){
  Ypos=22;
  updown=1;
  speed1=5;
  int flip = 0;
  while(free1 == 0){
    directionChange();
    if(updown==1){
      Ypos++;
    }else if(updown==0){
      Ypos--;
    }
    
    digitalWrite(Ypos, HIGH);
    if(flip==0){
      for(int i = 22; i < 38; i+=2){
        digitalWrite(i, LOW);
      }
    }else if(flip==1){
      for(int i = 23; i < 38; i+=2){
        digitalWrite(i, LOW);
      }
    }
    
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    u+=speed1;
    if(u==10){
      u=0;
      if(flip==0){
        flip=1;
      }else if(flip==1){
        flip=0;
      }
    }
    clear();
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;
    March();
  }else if(Ypos == 29 || Ypos == 31){
    Ypos=22;
    inOut();
    level20();
  }else{
  QuickBack();
  
  
  level = 1;}
}

void level18(){
  Ypos=22;
  updown=1;
  speed1=10;
  int flip = 0;
  while(free1 == 0){
    directionChange();
    if(updown==1){
      Ypos++;
    }else if(updown==0){
      Ypos--;
    }
    
    if(Ypos != 24 && Ypos != 26 && Ypos != 28 && Ypos != 30 && Ypos != 32 && Ypos != 34 && Ypos != 36 && Ypos != 38){
      digitalWrite(Ypos, HIGH);
    }
    
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    
    clear();
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;
    March();
  }else if(Ypos == 29 || Ypos == 31){
    Ypos=22;
    inOut();
    level18();
  }else{
  QuickBack();
  
  
  level = 1;}
}

void level19(){
  Ypos=22;
  updown=1;
  speed1=10;
  int flip = 0;
  while(free1 == 0){
    directionChange();
    if(updown==1){
      Ypos++;
    }else if(updown==0){
      Ypos--;
    }
    
    digitalWrite(Ypos, HIGH);
    
    int y = speed1;
    while(y!=0){
      if(!digitalRead(rotary)){
        free1=1;
      }y--;
      delay(10);
    }
    
    if(Ypos==30 || Ypos == 37 || Ypos == 23){
      clear();
    }
  }
  digitalWrite(Ypos, HIGH);
  waiting();
  Serial.println("Switch Pressed");
  free1=0;
  clear();
  if(Ypos == 30){
    level++;
    March();
  }else if(Ypos == 29 || Ypos == 31){
    Ypos=22;
    inOut();
    level19();
  }else{
  QuickBack();
  
  
  level = 1;}
}

void  loop2(){
  LtR();
  RtLc();
  if(level == 1){
    Ypos=22;
    updown=1;
    level1();
  }
  if(level == 2){
    level2();Serial.println("level2");
  }if(level == 3){
    level3();
  }if(level == 4){
    level4();
  }if(level == 5){
    level5();
  }if(level == 6){
    level6();
  }if(level == 7){
    level7();
  }if(level == 8){
    level8();
  }if(level == 9){
    level9();
  }if(level == 10){
    level10();
  }if(level == 11){
    level11();
  }if(level == 12){
    level12();
  }if(level == 13){
    level13();
  }if(level == 14){
    level14();
  }if(level == 15){
    level15();
  }if(level == 16){
    level16();
  }if(level == 17){
    level17();
  }if(level == 18){
    level18();
  }if(level == 19){
    level19();
  }if(level == 20){
    level20();
  }
}

void loop(){
  LtR();
  LtRc();
  level1();
  if(level==2){
    while(true){
      loop2();
    }
  }
}

Credits

Bie
2 projects • 0 followers
Contact

Comments

Please log in or sign up to comment.