// Пины для датчиков (берём D0-выходы)
const int sensor1 = 3; // датчик слева
const int sensor2 = 4; // датчик справа
// Пин для кнопки сброса
const int resetButton = 2;
// Пин для пьезопищалки (буззера)
const int buzzerPin = 8;
// Счёт
int score1 = 0;
int score2 = 0;
// Чтобы избежать многократного счёта при удержании
bool lastState1 = HIGH;
bool lastState2 = HIGH;
void setup() {
// Пины датчиков и кнопки
pinMode(sensor1, INPUT);
pinMode(sensor2, INPUT);
pinMode(resetButton, INPUT_PULLUP);
// Пин пищалки
pinMode(buzzerPin, OUTPUT);
// Serial монитор
Serial.begin(9600);
Serial.println("Система запущена!");
// Приветственный звуковой сигнал при старте (короткая приятная мелодия)
playStartupSound();
}
void loop() {
// Читаем датчики
int state1 = digitalRead(sensor1);
int state2 = digitalRead(sensor2);
// Печать состояний в Serial Monitor
Serial.print("Датчик 1: ");
Serial.print(state1);
Serial.print(" | Датчик 2: ");
Serial.println(state2);
// Датчик 1 сработал (LOW при срабатывании)
if (state1 == LOW && lastState1 == HIGH) {
score1++;
printScore();
playGoalSound(); // Звук гола для левого игрока
Serial.println("ГОЛ! Слева +1");
delay(200); // антидребезг
}
lastState1 = state1;
// Датчик 2 сработал
if (state2 == LOW && lastState2 == HIGH) {
score2++;
printScore();
playGoalSound(); // Звук гола для правого игрока
Serial.println("ГОЛ! Справа +1");
delay(200);
}
lastState2 = state2;
// Проверка кнопки сброса
if (digitalRead(resetButton) == LOW) {
score1 = 0;
score2 = 0;
printScore();
playResetSound(); // Звук сброса счёта
Serial.println("Счёт сброшен!");
delay(300); // защита от дребезга
}
}
// Функция для вывода текущего счёта в Serial
void printScore() {
Serial.print("СЧЁТ ---> Левый: ");
Serial.print(score1);
Serial.print(" | Правый: ");
Serial.println(score2);
}
// --- Функции для приятных звуков ---
// Короткий и мягкий писк при голе (используем высокую ноту, но не режущую слух)
void playGoalSound() {
tone(buzzerPin, 2093, 100); // Нота До (C7), длительность 100 мс
delay(120);
noTone(buzzerPin);
}
// Звук при сбросе счёта (двойной короткий сигнал)
void playResetSound() {
tone(buzzerPin, 1046, 80); // Нота До (C6)
delay(100);
tone(buzzerPin, 1567, 120); // Нота Соль (G6)
delay(140);
noTone(buzzerPin);
}
// Мелодия при старте системы
void playStartupSound() {
tone(buzzerPin, 1046, 100);
delay(120);
tone(buzzerPin, 1318, 100);
delay(120);
tone(buzzerPin, 1567, 150);
delay(170);
noTone(buzzerPin);
}