komponeendid:
- Arduino Uno
- Arendusplaat
- Juhtmed
- Piezo

Code:
// 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. }
Ülesanne muusikaline piiksutaja
Komponeendid:
- Arduino Uno
- Arendusplaat
- Juhtmed
- Takisti
- LCD ekraan
- Potentiomeeter
- Nupp
- Piezo

Töö kirjeldus:
Töö alguses käivitub LCD-ekraan, sellel ei kuvata midagi, pärast nupu vajutamist hakkab meloodia mängima ja selle nimi kuvatakse ekraanil, nuppu vajutades muutub meloodia, potentsiomeeter mõjutab LCD-ekraani heledust.
Code:
#include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // LCD ekraani pinide ühendused const int speakerPin = 9; // Kõlari pin const int buttonPin = A0; // Nupu pin const int A = 440; const int B = 494; const int C = 523; const int D = 587; const int E = 659; const int F = 698; const int G = 784; // Määratle meloodiad ja nende nimed const int melody1[] = {C, D, E, F, G, A, B, C}; const int melody2[] = {E, E, F, G, G, F, E, D}; const int melody3[] = {G, A, G, C, B, G, G, A}; const char melodyNames[][16] = {"Melody 1", "Melody 2", "Melody 3"}; int currentMelodyIndex = 0; // Hetkel mängitava meloodia indeks void setup() { lcd.begin(16, 2); // Seadista LCD ekraan 16 tähemärgiga reale ja 2 reale pinMode(buttonPin, INPUT_PULLUP); // Määra nupu pin sisse lülitatud takistusega sisendiks } void loop() { int buttonState = digitalRead(buttonPin); // Loe nupu olekut static int prevButtonState = HIGH; // Eelmise nupu oleku salvestamiseks if (buttonState == LOW && prevButtonState == HIGH) { // Kui nupp on vajutatud ja eelmine olek oli kõrge currentMelodyIndex++; // Suurenda meloodia indeksit if (currentMelodyIndex >= sizeof(melodyNames) / sizeof(melodyNames[0])) { currentMelodyIndex = 0; // Tagasi esimesele meloodiale, kui viimane on saavutatud } playMelody(currentMelodyIndex); // Mängi hetkel valitud meloodiat } prevButtonState = buttonState; // Salvesta nupu olek eelmiseks olekuks } void playMelody(int melodyIndex) { lcd.clear(); // Puhasta LCD ekraan lcd.setCursor(0, 0); lcd.print(melodyNames[melodyIndex]); // Kuva meloodia nimi const int* melody; int melodyLength; switch (melodyIndex) { case 0: melody = melody1; melodyLength = sizeof(melody1) / sizeof(int); break; case 1: melody = melody2; melodyLength = sizeof(melody2) / sizeof(int); break; case 2: melody = melody3; melodyLength = sizeof(melody3) / sizeof(int); break; default: return; } for (int i = 0; i < melodyLength; i++) { int noteDuration = 30000 / melody[i]; // Arvuta noodi kestus antud tempoga tone(speakerPin, melody[i], noteDuration); // Mängi nooti delay(noteDuration * 1.3); // Viivitus nootide vahel noTone(speakerPin); // Lõpeta noodi mängimine } }
püzo-kõlari kasutamisest igapäevaelus:
- Helisignaalid
- Muusika ja heliefektid
- Teadete edastamine
- Meditsiiniseadmed
- Mõõteseadmed