
// Этот скетч использует зуммер для воспроизведения мелодий.
// Команда Arduino tone() будет издавать звуки определенной частоты.
// Мы создаем функцию, которая сопоставляет символ нотной гаммы
// ("До-ре-ми-фа...До") соответствующей частоте из следующей таблицы:
// note frequency
// c 262 Hz
// d 294 Hz
// e 330 Hz
// f 349 Hz
// g 392 Hz
// a 440 Hz
// b 494 Hz
// C 523 Hz
const int buzzerPin = 9;
// Мы создали массив с нотами, которые хотим воспроизвести, измените эти значения, чтобы создать свои мелодии!
// Длина должна равняться общему количеству нот и пауз
const int songLength = 18;
// Обозначение нот представляет собой массив из текстовых символов,
// соответствующим нотам в песне. Пробел означает паузу (пустую ноту)
char notes[] = "cdfda ag cdfdg gf "; // пробелы означают паузы
// Ритм задается массивом из длительности нот и пауз между ними.
// "1" - четвертная нота, "2" - половинная, и т.д.
// Не забывайте, что пробелы должны быть тоже определенной длинны.
int beats[] = {1,1,1,1,1,1,4,4,2,1,1,1,1,1,1,4,4,2};
// "tempo" это скорость проигрывания мелодии.
// Для того, чтобы мелодия проигрывалась быстрее, вы
// должны уменьшить следующее значение.
int tempo = 150;
void setup()
{
pinMode(buzzerPin, OUTPUT);
}
void loop()
{
int i, duration;
for (i = 0; i < songLength; i++) // пошаговое воспроизведение из массива
{
duration = beats[i] * tempo; // длительность нот/пауз в ms
if (notes[i] == ' ') // если нота отсутствует?
{
delay(duration); // тогда не большая пауза
}
else // в противном случае играть
{
tone(buzzerPin, frequency(notes[i]), duration);
delay(duration); // ждать пока проигрывается
}
delay(tempo/10); // маленькая пауза между нотами
}
// Мы хотим, чтобы мелодия проиграла всего один раз, так что здесь остановимся окончательно:
while(true){}
// Если же вы хотите, чтобы мелодия играть снова и снова, Удалить вышеуказанное заявление
}
int frequency(char note)
{
// Эта функция принимает символ ноты (a-g), и возвращает
// частоту в Гц для функции tone().
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.
}
Музыкальная пищалка
Töö kirjeldus:
Klaver, mis töötab summeri ja nuppudega. Nuppude vajutamine esitab konkreetse noodi heli.
Komponendid:
Arudino Uno
Juhtmed (16)
Nupp(6)
Buzzer
https://www.tinkercad.com/things/0IHHPF4vWpm?sharecode=rJPNBM8C06nIsa6iLF5G0oYh2iQZKbWGTHk4y_O7-IA

https://youtube.com/shorts/OMNZAy0R8mo?feature=share
Tööpõhimõte:
Kui vajutate mõnda nuppu, kostab sumisti konkreetse nupu külge kinnitatud noodi heli. Kõrgest noodist madalani.
Kuidas seda kasutada saab?
Sumisti saab kasutada ka kõlarina või alarmina, kui sumistiga kasutatakse liikumisandurit.
Programm:
const int buzzerPin = 13;
int sensorPoten = 0;
const int C = 12;
const int D = 11;
const int E = 10;
const int G = 9;
const int A = 8;
const int B = 7;
#define T_C 262
#define T_D 294
#define T_E 330
#define T_G 392
#define T_A 440
#define T_B 493
void setup()
{
pinMode(C, INPUT);
digitalWrite(C,HIGH);
pinMode(D, INPUT);
digitalWrite(D,HIGH);
pinMode(E, INPUT);
digitalWrite(E,HIGH);
pinMode(G, INPUT);
digitalWrite(G,HIGH);
pinMode(A, INPUT);
digitalWrite(A,HIGH);
pinMode(B, INPUT);
digitalWrite(B,HIGH);
}
void loop()
{
while(digitalRead(C) == LOW)
{
tone(buzzerPin,T_C);
}
while(digitalRead(D) == LOW)
{
tone(buzzerPin,T_D);
}
while(digitalRead(E) == LOW)
{
tone(buzzerPin,T_E);
}
while(digitalRead(G) == LOW)
{
tone(buzzerPin,T_G);
}
while(digitalRead(A) == LOW)
{
tone(buzzerPin,T_A);
}
while(digitalRead(B) == LOW)
{
tone(buzzerPin,T_B);
}
noTone(buzzerPin);
}