// Определяем выводы для светодиодов и динамика
const int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9}; // Светодиоды на выводах 2-9
const int speakerPin = 10; // Динамик на выводе 10
// Определяем ноты первой октавы (частоты в Гц)
const int notes[] = {262, 294, 330, 349, 392, 440, 494, 523}; // До, Ре, Ми, Фа, Соль, Ля, Си, До
// Переменные для подсчета замыканий входа
volatile int count = 0; // Количество замыканий
unsigned long lastMillis = 0;
// Функция, вызываемая при замыкании
void countInterrupt() {
count++;
}
// Настройка
void setup() {
Serial.begin(9600);
Serial.println("тест");
// Настраиваем выводы для светодиодов
for (int i = 0; i < 8; i++) {
pinMode(ledPins[i], OUTPUT);
}
pinMode(speakerPin, OUTPUT);
// Настраиваем прерывания на входе
attachInterrupt(digitalPinToInterrupt(0), countInterrupt, RISING); // Подключаем прерывание для пина 0
// Настраиваем таймер
TCCR0A = 0; // Включаем обычный режим работы таймера
TCCR0B = (1 << CS02) | (1 << CS00); // Настройка предделителя на 1024
}
void loop() {
// Проигрываем восходящую гамму нот
for (int i = 0; i < 8; i++) {
tone(speakerPin, notes[i]); // Играем ноту
digitalWrite(ledPins[i], HIGH); // Включаем соответствующий светодиод
delay(100); // Длительность каждой ноты 1 секунда
digitalWrite(ledPins[i], LOW); // Выключаем светодиод
}
// Каждую секунду выводим количество замыканий
if (millis() - lastMillis >= 100) {
lastMillis = millis();
Serial.print("Количество замыканий: ");
Serial.println(count); // Выводим количество замыканий
//count = 0; // Сбрасываем счетчик
}
}