|
int led1 = 2; int led2 = 3; int led3 = 4; int led4 = 5;
int button1 = 6; int button2 = 7; int button3 = 8; int button4 = 9;
int buzzer = 10;
int trigPin = 11; int echoPin = 12;
int sequence[10];
void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT);
pinMode(button1, INPUT_PULLUP); pinMode(button2, INPUT_PULLUP); pinMode(button3, INPUT_PULLUP); pinMode(button4, INPUT_PULLUP);
pinMode(buzzer, OUTPUT);
pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT);
randomSeed(analogRead(A0)); }
void loop() { if (startGame()) { playLevel(1, 3, 3);
playLevel(2, 4, 3);
playLevel(3, 5, 4);
playLevel(4, 6, 4);
victory(); } }
boolean startGame() { long distance = getDistance();
if (distance < 10) { tone(buzzer, 1000); delay(300); noTone(buzzer);
delay(1000);
return true; }
return false; }
void playLevel(int level, int length, int maxLed) { generateSequence(length, maxLed);
showSequence(length);
for (int i = 0; i < length; i++) { int buttonPressed = waitForButton();
if (buttonPressed != sequence[i]) { gameOver();
while (1); }
tone(buzzer, 1500); delay(100); noTone(buzzer); }
tone(buzzer, 2000); delay(500); noTone(buzzer);
delay(1000); }
void generateSequence(int length, int maxLed) { for (int i = 0; i < length; i++) { sequence[i] = random(1, maxLed + 1); } }
void showSequence(int length) { delay(1000);
for (int i = 0; i < length; i++) { lightLED(sequence[i]);
delay(700);
turnOffLEDs();
delay(300); } }
void lightLED(int num) { if (num == 1) digitalWrite(led1, HIGH);
if (num == 2) digitalWrite(led2, HIGH);
if (num == 3) digitalWrite(led3, HIGH);
if (num == 4) digitalWrite(led4, HIGH); }
void turnOffLEDs() { digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); }
int waitForButton() { while (true) { if (digitalRead(button1) == LOW) { delay(200); return 1; }
if (digitalRead(button2) == LOW) { delay(200); return 2; }
if (digitalRead(button3) == LOW) { delay(200); return 3; }
if (digitalRead(button4) == LOW) { delay(200); return 4; } } }
void gameOver() { for (int i = 0; i < 5; i++) { digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH);
tone(buzzer, 500);
delay(300);
turnOffLEDs();
noTone(buzzer);
delay(300); } }
void victory() { for (int i = 0; i < 5; i++) { digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH);
tone(buzzer, 2000);
delay(200);
turnOffLEDs();
noTone(buzzer);
delay(200); } }
long getDistance() { digitalWrite(trigPin, LOW); delayMicroseconds(2);
digitalWrite(trigPin, HIGH); delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
long distance = duration * 0.034 / 2;
return distance; }
|