const int p = 9; // Пин для воспроизведения звука
const byte COUNT_NOTES = 39;
int frequences[COUNT_NOTES] = {
392, 392, 392, 311, 466, 392, 311, 466, 392,
587, 587, 587, 622, 466, 369, 311, 466, 392,
784, 392, 392, 784, 739, 698, 659, 622, 659,
415, 554, 523, 493, 466, 440, 466, 311, 369,
311, 466, 392
};
int durations[COUNT_NOTES] = {
350, 350, 350, 250, 100, 350, 250, 100, 700,
350, 350, 350, 250, 100, 350, 250, 100, 700,
350, 250, 100, 350, 250, 100, 100, 100, 450,
150, 350, 250, 100, 100, 100, 450, 150, 350,
250, 100, 750
};
void setup() {
pinMode(p, OUTPUT); // Настройка пина как выход
}
void loop() {
for (int i = 0; i < COUNT_NOTES; i++) { // Исправлено условие цикла
myTone(p, frequences[i], durations[i]); // Вызов нашей функции
delay(durations[i]); // Пауза между нотами
noTone(p); // Остановка звука
}
}
// Упрощённая реализация функции tone
void myTone(int pin, int frequency, int duration_ms) {
if (frequency <= 0) return; // Защита от нулевой частоты
long period_us = 1000000L / frequency; // Период сигнала в микросекундах
long half_period_us = period_us / 2; // Полупериод (время HIGH и LOW)
unsigned long start_time = millis(); // Время начала воспроизведения
while (millis() - start_time < duration_ms) {
digitalWrite(pin, HIGH); // Устанавливаем HIGH
delayMicroseconds(half_period_us); // Ждём половину периода
digitalWrite(pin, LOW); // Устанавливаем LOW
delayMicroseconds(half_period_us); // Ждём вторую половину периода
}
}
// Функция для остановки звука
void noTone(int pin) {
digitalWrite(pin, LOW); // Просто выключаем пин
}