top of page

Color Press

#define R 11

#define G 10

#define B 9

#define lR 2

#define lG 5

#define lB 6

#define b1 A0

#define b2 A1

#define b3 A2

#define b4 A3

#define b5 A4

#define buz 3

#define timerLen 10000

 

int count = 0;

 

void setup() {

  int outputs[] = {R, G, B, lR, lG, lB, buz};

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

    pinMode(outputs[i], OUTPUT);

  }

  pinMode(b1, INPUT);

  pinMode(b2, INPUT);

  pinMode(b3, INPUT);

  pinMode(b4, INPUT);

  pinMode(b5, INPUT);

  Serial.begin(9600);

  Serial.println("Setup complete");

}

 

bool test(int light){

  setLight(light);

  long long int endTime = millis() + timerLen;

 

  while (millis() < endTime && pressed() == -1){

    continue;

  }

 

  return (millis() < endTime && pressed() == light);

}

 

void setLight(int light){

  if (light == 0){

    digitalWrite(lR, HIGH);

  } else if (light == 1){

    digitalWrite(lG, HIGH);

  } else if (light == 2){

    digitalWrite(lB, HIGH);

  } else if (light == 3){

    digitalWrite(lG, HIGH);

    digitalWrite(lB, HIGH);

  } else if (light == 4){

    digitalWrite(lR, HIGH);

    digitalWrite(lG, HIGH);

    digitalWrite(lB, HIGH);

  }

}

 

void allOff(){

  int outputs[] = {R, G, B, lR, lG, lB};

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

    digitalWrite(outputs[i], LOW);

  }

}

 

int pressed(){

  int buttons[] = {b1, b2, b3, b4, b5};

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

    if(analogRead(buttons[i]) >= 512){

      return i;

    }

  }

  return -1;

}

 

void loop(){

  randomSeed(analogRead(A5));

  int light = random(0,5);

  Serial.println(light);

  bool gameState = test(light);

  if (gameState == true){

    count++;

    if (count % 5 == 0){

      win();

    }

  }

  allOff();

  toEncode(light);

}

 

void win(){

  tone(buz, 2349, 250);

  delay(250);

  tone(buz, 2793, 250);

  delay(250);

  tone(buz, 3135, 250);

  delay(250);

  tone(buz, 3520, 250);

  delay(250);

  tone(buz, 3951, 250);

  delay(250);

  noTone(buz);

}

 

void toEncode(int light){

  delay(3000);

  if (analogRead(light) >= 512){

    encode();

  }

}

 

void encode(){

  allOff();

  if (count <= 10){

    digitalWrite(R, HIGH);

  } else if (count <= 20 && count > 10){

    digitalWrite(G, HIGH);

  } else if (count <= 30 && count > 20){

    digitalWrite(B, HIGH);

  } else if (count <= 40 && count > 30){

    digitalWrite(R, HIGH);

    digitalWrite(B, HIGH);

  } else {

    digitalWrite(R, HIGH);

    digitalWrite(G, HIGH);

    digitalWrite(B, HIGH);

  }

  delay(5000);

  digitalWrite(R, LOW);

  digitalWrite(G, LOW);

  digitalWrite(B, LOW);

}

bottom of page