// Определение пина для пьезоизлучателя и кнопок
const int buzzerPin = 9;
const int buttonPin = 2; // Пин кнопки для изменения темпа
const int melodySwitchPin = 3; // Пин кнопки для смены мелодии
// Длины мелодий
const int songLength1 = 18;
const int songLength2 = 18;
// Первая мелодия (например, "Братушки")
char notes1[] = "cdfda ag cdfdg gf "; // Ноты
int beats1[] = {1,1,1,1,1,1,4,4,2,1,1,1,1,1,1,4,4,2};
// Вторая мелодия (например, "Happy Birthday")
char notes2[] = "g g a g c b ";
int beats2[] = {1,1,1,1,1,1};
// Темп мелодии (если кнопка нажата, темп меняется)
int tempo = 150;
int currentSong = 1; // Индекс текущей мелодии
void setup() {
pinMode(buzzerPin, OUTPUT);
pinMode(buttonPin, INPUT);
pinMode(melodySwitchPin, INPUT);
}
void loop() {
int i, duration;
// Изменение темпа по кнопке
if (digitalRead(buttonPin) == HIGH) {
tempo = 100; // Уменьшаем темп, если кнопка нажата
} else {
tempo = 150; // Иначе возвращаем стандартный темп
}
// Переключение между мелодиями по другой кнопке
if (digitalRead(melodySwitchPin) == HIGH) {
currentSong = (currentSong == 1) ? 2 : 1; // Переключаем мелодию
delay(300); // Антидребезг
}
// Воспроизведение выбранной мелодии
if (currentSong == 1) {
for (i = 0; i < songLength1; i++) {
duration = beats1[i] * tempo;
if (notes1[i] == ' ') {
delay(duration); // Пауза
} else {
tone(buzzerPin, frequency(notes1[i]), duration); // Играть ноту
delay(duration);
}
delay(tempo / 10); // Небольшая пауза
}
} else if (currentSong == 2) {
for (i = 0; i < songLength2; i++) {
duration = beats2[i] * tempo;
if (notes2[i] == ' ') {
delay(duration); // Пауза
} else {
tone(buzzerPin, frequency(notes2[i]), duration); // Играть ноту
delay(duration);
}
delay(tempo / 10); // Небольшая пауза
}
}
while(true) {} // Зацикливаем, чтобы мелодия не повторялась
}
int frequency(char note) {
int i;
const int numNotes = 8; // Количество нот
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int frequencies[] = {262, 294, 330, 349, 392, 440, 494, 523}; // Частоты
// Поиск частоты для заданной ноты
for (i = 0; i < numNotes; i++) {
if (names[i] == note) {
return(frequencies[i]);
}
}
return(0); // Если нота не найдена, возвращаем 0 (тишина)
}