Sumisemise kogemus
Komponentid:
- Pieso element
- Juhe x4
Töö kirjeldus:
See sketš kasutab lugude esitamiseks sumist. Arduino tone() käsk väljastab kindla sagedusega helisid. Loome funktsiooni, mis sobib muusikalise skaala sümboliga. (“Do-re-mi-fa…Do”) vastav sagedus järgmisest tabelist:
Päriselus saab kasutada igas meloodiaväljundiga vooluringis
Skeem:

C++ kood
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.
}
https://www.tinkercad.com/things/4CfaHIDzZ37-funky-maimu/editel?sharecode=9sBzF-mPz4E_BMs1CdxKgRofuIykWqimNHdbYCuRoTk
Ülesanne 6 Sumiseja
Komponentid:
- 3 nuppu
- juhe x10
- Pieso element
- Arduino plaat
- takisti x3
Töö kirjeldus: 3 nuppu imiteerivad miniklaverit, iga nupu vajutamisel väljastatakse piesoelemendiga tweeteri abil teatud sagedusega heli. Tegelikkuses saab seda rakendada näiteks sama süntesaatori loomisel.
Skeem:

C++ kood
#define BUZZER_PIN 13
#define FIRST_KEY_PIN 7
#define KEY_COUNT 3
void setup()
{
pinMode(BUZZER_PIN, OUTPUT);//выводим пин в аутпут
}
void loop()//цикл
{
for (int i = 0; i < KEY_COUNT; ++i) {//создаем нужно нам количество пинов
//задав их количество ранее и первый пин, цикл for выведет каждый поочередно
int keyPin = i + FIRST_KEY_PIN;
boolean keyUp = digitalRead(keyPin);//считываем значение
if (!keyUp) {//высота нот в герцах
int frequency = 3500 + i * 500;
tone(BUZZER_PIN, frequency, 20);//пищит с нужной высотой
}
}
}
Video kuidas töötab:
Kasutanud funktsioonid:
pinMode(pin, mode)
– määrab pinu režiimi (sisend või väljund). See funktsioon võimaldab määrata konkreetsele pinule soovitud režiimi, kasutades parameetreid “pin” (pinu number) ja “mode” (režiim, mis võib olla INPUT või OUTPUT). Näiteks:pinMode(BUZZER_PIN, OUTPUT)
määrab pinu “BUZZER_PIN” väljundrežiimi.digitalRead(pin)
– loeb digitaalse pinu väärtust. See funktsioon loeb konkreetse pinu digitaalset väärtust (HIGH või LOW) ja tagastab selle tulemuse. Näiteks:boolean keyUp = digitalRead(keyPin)
loeb pinu “keyPin” väärtust ja salvestab selle muutujasse “keyUp”.tone(pin, frequency, duration)
– esitab heli konkreetse sageduse ja kestusega. See funktsioon esitab heli konkreetse sagedusega pinu kaudu. Parameetrid “pin” määrab pinu, mille kaudu heli esitatakse, “frequency” määrab helisageduse hertssides ning “duration” määrab heli kestuse millisekundites. Näiteks:tone(BUZZER_PIN, frequency, 20)
esitab heli määratud sagedusega ja kestusega 20 millisekundit.
Aitah tähelepanu eest!