Copycat Code
#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) {
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 sequence[] = { 0, 0, 0, 0, 0 };
for (int i = 0; i < 5; i++) {
sequence[i] = random(0, 5);
}
Serial.println("Sequence declared");
bool allRight = true;
for (int max = 0; max < 5 && allRight; max++) {
playSec(sequence, max);
Serial.print("Testing first ");
Serial.print(max + 1);
Serial.println(" lights in sequence");
for (int cur = 0; cur <= max && allRight; cur++) {
Serial.print("Light requested: ");
Serial.println(sequence[cur]);
allRight = test(sequence[cur]);
delay(1000);
if (allRight) {
setLight(sequence[cur]);
delay(500);
allOff();
//toEncoder(sequence[cur]);
continue;
} else {
lose();
delay(1000);
}
}
if (max == 4 && allRight) {
win();
count++;
break;
}
}
}
void playSec(int lights[], int amount) {
Serial.print("Playing sequence with ");
Serial.print(amount + 1);
Serial.println(" lights");
for (int i = 0; i <= amount; i++) {
setLight(lights[i]);
delay(1500);
allOff();
delay(500);
}
}
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 lose() {
int notes[] = { 3729, 3322, 3135, 2793 };
for (int i : notes) {
tone(buz, i, 250);
delay(250);
}
noTone(buz);
}
void toEncoder(int light) {
int endTime = millis() + 5000;
while (pressed() == light && endTime > millis()) {
continue;
}
if (millis() > endTime) {
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);
}
.png)