Ви не увійшли.
Доброго дня
Прошу Вашої допомоги розібратися та зібрати інформацію для своїх мелодій по функції ((((tone)))) та зуммер.
1 Можливі програми для переконування midi для Arduino
2 Правильне підключення та команди
3 Таблиці та їх розуміння для нот
Допоможіть будь ласка зрозуміти як цим керувати..
Неактивний
Ось сам зуммер
І підключення до плати....
На пін 8,9 або 3.
Я, так розумію якою командою користуємося, тоді буде різне підключення.
Підключення таке тільки пін 9
Остання редакція TESLA (2023-11-30 13:47:57)
Неактивний
Наприклад, маемо ноти.
Як їх перекласти для Ардуіно, або якийсь конвертор midi , для готових мелодій.
По типу, скачав мелодію яку потрибно і перекодував, потім взяв скільки потрібно мелодіїї....
Неактивний
void setup() {
pinMode(10, OUTPUT); // объявляем пин 10 как выход
}
void loop() {
tone(10, 600); // включаем сигнал с частотой 600 Гц
delay(1000); // ждем 1 секунду
tone(10, 900); // включаем сигнал с частотой 900 Гц
delay(1000); // ждем 1 секунду
noTone(10); // отключаем сигнал
delay(1000); // ждем 1 секунду
}
Написав грубо так, пін моде 9 оутпут
Треба писати
Тоне (потім номер піні (9)) 9,600(включаем сигнал з частотою 600Гц)
Зрозумів правильно???
Потім делай і но тоне, грубо.....
Як завантажити необхідну мелодію??
Неактивний
В чому Ваше запитання? Перекласти нотний запис в частоти і тривалості? Тоді гугліть по ключовим словам "нотний запис", "музична нотація".
Але враховуйте, що ардуіно-пищалка за допомогою tone() може відтворювати одночасно лише одну ноту, тому там, де в записі одночасно має звучати кілька нот, використовуйте найвищу (з найбільшою частотою).
Неактивний
Ще питання в тому як, по цій схемі підключення та командам pinmode, tone, правильно вказати довжину сигналу.
Маю на увазі з чого складається скетч.
Та як прив'язати різні звуки до функцій
Наприклад, температура піднялась вище вказаного, програе мелодія ошибка
Неактивний
Есть профессиональные студии на дестопе. https://filmora.wondershare.com.ru/best-audio-recording-software.html
Могут все. И хранить и редактировать и многодорожечные и с микрофона и линейный вход-выход и с нот и на ноты.
Неактивний
Спочатку вчитесь, як прочитати ноти, ось знайшов такий матеріал: Як навчитися читати ноти.
Потім перетворюєте кожну ноту на послідовність команд за допомогою таблички, яку Ви знайшли.
Наприклад програти ноту Ля (частота 440Гц) на протязі 1/4 секунди (250мс):
tone(10, 440);
delay(250);
noTone(10);
Коротеньку мелодію можна вставити в тіло функції:
void melody1() {
tone(...);
delay(...);
...
tone(...);
delay(...);
noTone(...);
}
І потім викликати функцію коли потрібно.
melody1();
Неактивний
Щоб доповнити тему, знайшов конвертер любих міді в код.
Тепер можливо зробити любі звуки для своїх проектів
Ось ссилка
https://www.extramaster.net/tools/midiToArduino/.content
Неактивний
Існують різні методи. Можна відтворювати PCM-кодований сигнал за допомогою ШІМ або зовнішнього DAC. Але при розрядності 8 біт і частоті дискретизації 8 кГц 1 секунда звуку займатиме 8 кб. На Atmega328p без зовнішньої EEPROM влізе не більше 4 секунд, а там ще код і бутлоадер. Якщо знизити розрядність до 4 біт, то влізе вдвічі більше, але якість буде гіршою.
Одноголосну мелодію можна відтворити "цифровим" методом, генеруючи прямокутний сигнал. tone()/delay() - це найпростіший спосіб.
#define PIN_BUZZER 3
void setup() {
pinMode(PIN_BUZZER, OUTPUT);
}
struct note {
uint16_t frequency;
uint16_t duration;
};
static const PROGMEM note notes[] = {
{ 293, 240 },
{ 329, 240 },
{ 349, 240 },
{ 392, 240 },
{ 329, 480 },
{ 261, 240 },
{ 293, 720 }
};
void loop() {
for (auto *p = notes; p < notes + sizeof(notes)/sizeof(*notes); ++p) {
note note;
memcpy_P(¬e, p, sizeof(note));
if (note.frequency) {
tone(PIN_BUZZER, note.frequency);
} else {
noTone(PIN_BUZZER);
}
delay(note.duration);
}
noTone(PIN_BUZZER);
for (;;) {}
}
Порахувати частоту ноти можна за формулою f=F*2^(n/12), де F - частота базової ноти, n - кількість напівтонів від базової ноти. Додатні значення - вверх, від'ємні - вниз. Зазвичай за базову ноту беруть "ля" першої октави, і її частоту - 440 Гц, але це не обовʼязково.
Але в метода з tone()/delay() є недоліки. По-перше, delay() виконується процесором, і в цей час він не може робити нічого іншого.
По-друге, tone() обчислює дільник таймера по частоті в рантаймі, що не дуже ефективно. Можна розрахувати дільники заздалегідь при компіляції, і в рантаймі завантажувати їх безпосередньо в регістр таймера. Тим більше для низьких нот похибка в половину герца вже становить десятки центів і відчутна вухом.
Можна поєднати відтворення окремих нот з ШІМ і отримати щось схоже на поліфонію. Для апаратного ШІМ в ардуіно скоріш за все доведеться використовувати TIM1 або TIM2, тому що TIM0 ардуіно використовує для своїх потреб.
Вибір оптимального метода залежить від конкретних вимог і можливостей заліза.
UPD: перемикати пін в OUTPUT не потрібно, tone() це робить сама: Tone.cpp:255
Остання редакція dimich (2023-12-02 12:21:13)
Неактивний
Як на активному зуммері можна отримати різні тони (ноти)?
Хе, слушне зауваження. Мені спочатку здалося, що під активним мається на увазі - з вбудованим буферним каскадом.
Якщо ж під активним мається на увазі - з автогенерацією (а судячи по маркуванню на фото, так і є), то звісно що ніяк. Хіба що змінюючи напругу живлення можна отримати якусь непередбачувану невеличку девіацію частоти
Неактивний
Щоб доповнити тему, знайшов конвертер любих міді в код.
Тепер можливо зробити любі звуки для своїх проектів
Ось ссилка
https://www.extramaster.net/tools/midiToArduino/.content
// Credit:
// Midi to Arduino Converter
// - Andy Tran (extramaster), 2015
// https://www.extramaster.net/tools/midiToArduino/
//
// Process:
// Midi -> Midi tracks -> Note mappings -> Frequency
//
// CC0
// Set this to be the pin that your buzzer resides in. (Note that you can only have one buzzer actively using the PWM signal at a time).
int tonePin = 11;
void setup() {
}
void midi() {
tone(tonePin, 698, 315.340825);
delay(350.378694444);
delay(208.333277778);
tone(tonePin, 698, 238.6363);
delay(265.151444444);
delay(165.719652778);
tone(tonePin, 622, 63.9204375);
delay(71.0227083333);
delay(89.9620972222);
tone(tonePin, 698, 55.3977125);
delay(61.5530138889);
delay(123.106027778);
tone(tonePin, 783, 59.659075);
delay(66.2878611111);
delay(241.477208333);
tone(tonePin, 523, 80.9658875);
delay(89.9620972222);
delay(241.477208333);
tone(tonePin, 622, 68.1818);
delay(75.7575555556);
delay(236.742361111);
tone(tonePin, 698, 340.909);
delay(378.787777778);
delay(184.659041667);
tone(tonePin, 698, 204.5454);
delay(227.272666667);
delay(175.189347222);
tone(tonePin, 622, 68.1818);
delay(75.7575555556);
delay(99.4317916667);
tone(tonePin, 698, 63.9204375);
delay(71.0227083333);
delay(104.166638889);
tone(tonePin, 783, 68.1818);
delay(75.7575555556);
delay(232.007513889);
tone(tonePin, 523, 72.4431625);
delay(80.4924027778);
delay(246.212055556);
tone(tonePin, 622, 76.704525);
delay(85.22725);
delay(250.946902778);
tone(tonePin, 932, 59.659075);
delay(66.2878611111);
delay(127.840875);
tone(tonePin, 783, 85.22725);
delay(94.6969444444);
delay(189.393888889);
tone(tonePin, 698, 68.1818);
delay(75.7575555556);
delay(236.742361111);
tone(tonePin, 622, 59.659075);
delay(66.2878611111);
delay(246.212055556);
tone(tonePin, 932, 80.9658875);
delay(89.9620972222);
delay(118.371180556);
tone(tonePin, 783, 72.4431625);
delay(80.4924027778);
delay(189.393888889);
tone(tonePin, 698, 68.1818);
delay(75.7575555556);
delay(213.068125);
tone(tonePin, 622, 59.659075);
delay(66.2878611111);
delay(246.212055556);
tone(tonePin, 698, 532.6703125);
delay(591.855902778);
}
void loop() {
// Play midi
midi();
}
delay(350.378694444);
Да ... уж