עוד
עוד
#define YELLOW_LED 9
#define GREEN_LED 10
#define RED_LED 11
#define BLUE_LED 12
#define YELLOW_BTN 2
#define GREEN_BTN 3
#define RED_BTN 4
#define BLUE_BTN 5
#define BUZZER_PIN 8
int sequence[100];
int level = 0;
void setup() {
Serial.begin(115200);
pinMode(YELLOW_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
pinMode(YELLOW_BTN, INPUT_PULLUP);
pinMode(GREEN_BTN, INPUT_PULLUP);
pinMode(RED_BTN, INPUT_PULLUP);
pinMode(BLUE_BTN, INPUT_PULLUP);
pinMode(BUZZER_PIN, OUTPUT);
// בגלל שהבאזר מחובר הפוך:
// HIGH = כבוי
// LOW = דולק / מצפצף
digitalWrite(BUZZER_PIN, HIGH);
randomSeed(analogRead(A0));
startupSound();
nextRound();
}
void loop() {
for (int i = 0; i < level; i++) {
int btn = waitForButton();
if (btn != sequence[i]) {
gameOver();
return;
}
}
// המשתמש הצליח את כל הרצף
roundSuccessSound();
delay(500);
nextRound();
}
void nextRound() {
sequence[level] = random(0, 4);
level++;
delay(300);
for (int i = 0; i < level; i++) {
showColor(sequence[i]);
delay(250);
}
}
int waitForButton() {
while (true) {
if (!digitalRead(YELLOW_BTN)) {
showColor(0);
waitRelease(YELLOW_BTN);
return 0;
}
if (!digitalRead(GREEN_BTN)) {
showColor(1);
waitRelease(GREEN_BTN);
return 1;
}
if (!digitalRead(RED_BTN)) {
showColor(2);
waitRelease(RED_BTN);
return 2;
}
if (!digitalRead(BLUE_BTN)) {
showColor(3);
waitRelease(BLUE_BTN);
return 3;
}
}
}
void showColor(int color) {
int led = -1;
if (color == 0) led = YELLOW_LED;
if (color == 1) led = GREEN_LED;
if (color == 2) led = RED_LED;
if (color == 3) led = BLUE_LED;
digitalWrite(led, HIGH);
// צפצוף קצר בזמן הצגת צבע או לחיצת שחקן
beep(80);
delay(220);
digitalWrite(led, LOW);
}
void gameOver() {
gameOverSound();
for (int i = 0; i < 3; i++) {
digitalWrite(RED_LED, HIGH);
digitalWrite(GREEN_LED, HIGH);
digitalWrite(BLUE_LED, HIGH);
digitalWrite(YELLOW_LED, HIGH);
delay(200);
digitalWrite(RED_LED, LOW);
digitalWrite(GREEN_LED, LOW);
digitalWrite(BLUE_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
delay(200);
}
level = 0;
delay(500);
nextRound();
}
// =========================
// פונקציות של הבאזר
// =========================
void buzzerOn() {
digitalWrite(BUZZER_PIN, LOW); // מחובר הפוך
}
void buzzerOff() {
digitalWrite(BUZZER_PIN, HIGH); // מחובר הפוך
}
void beep(int durationMs) {
buzzerOn();
delay(durationMs);
buzzerOff();
}
void beepPause(int onMs, int offMs) {
beep(onMs);
delay(offMs);
}
// צליל פתיחה
void startupSound() {
beepPause(60, 60);
beepPause(60, 60);
beepPause(120, 80);
}
// צליל הצלחה בסוף שלב
void roundSuccessSound() {
beepPause(70, 50);
beepPause(70, 50);
beepPause(150, 50);
}
// צליל כישלון
void gameOverSound() {
beepPause(300, 120);
beepPause(300, 120);
beepPause(500, 150);
}
// המתנה לשחרור כפתור כדי למנוע לחיצה כפולה
void waitRelease(int pin) {
while (!digitalRead(pin)) {
delay(1);
}
delay(30); // debounce קטן
}