Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

vvr
2024-01-03 22:21:18

https://doc.arduino.ua/ru/prog/Delay

Васятко
2024-01-03 18:24:00
Гiсть пише:
    delay(350.378694444);
 

Да ... уж

Гiсть
2024-01-03 15:44:08
TESLA пише:

Щоб доповнити тему, знайшов конвертер любих міді в код.

Тепер можливо зробити любі звуки для своїх проектів smile

Ось ссилка
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();
}
dimich
2023-12-19 01:06:05
PolArt пише:

Як на активному зуммері можна отримати різні тони (ноти)?

Хе, слушне зауваження. Мені спочатку здалося, що під активним мається на увазі - з вбудованим буферним каскадом.
Якщо ж під активним мається на увазі - з автогенерацією (а судячи по маркуванню на фото, так і є), то звісно що ніяк. Хіба що змінюючи напругу живлення можна отримати якусь непередбачувану невеличку девіацію частоти  hmm

PolArt
2023-12-17 18:43:42

Як на активному зуммері можна отримати різні тони (ноти)?

dimich
2023-12-01 18:25:54

Існують різні методи. Можна відтворювати 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(&note, 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

TESLA
2023-11-30 21:52:49

Ось великий збірник звуків для різних проектів cool

https://wav-library.net/sounds-noises

TESLA
2023-11-30 21:41:47

Щоб доповнити тему, знайшов конвертер любих міді в код.

Тепер можливо зробити любі звуки для своїх проектів smile

Ось ссилка
https://www.extramaster.net/tools/midiToArduino/.content

TESLA
2023-11-30 20:56:50

Дякую
Буду вчитися

Honey
2023-11-30 20:18:48

Спочатку вчитесь, як прочитати ноти, ось знайшов такий матеріал: Як навчитися читати ноти.
Потім перетворюєте кожну ноту на послідовність команд за допомогою таблички, яку Ви знайшли.
Наприклад програти ноту Ля (частота 440Гц) на протязі 1/4 секунди (250мс):
tone(10, 440);
delay(250);
noTone(10);
Коротеньку мелодію можна вставити в тіло функції:

void melody1() {
 tone(...);
 delay(...);
 ...
 tone(...);
 delay(...);
 noTone(...);
}

І потім викликати функцію коли потрібно.
melody1();

Batu
2023-11-30 20:10:26

Есть профессиональные студии на дестопе. https://filmora.wondershare.com.ru/best-audio-recording-software.html
Могут все. И хранить и редактировать и многодорожечные и с микрофона и линейный вход-выход и с нот и на ноты.

TESLA
2023-11-30 19:49:58

Знайшов таку таблицю

Зможете надати приклад, як користуючись нею можливо створити мелодії

TESLA
2023-11-30 19:48:40

f655d5055c794e7166a0f60a61ee8bfd.png

TESLA
2023-11-30 19:25:24

Ще питання в тому як, по цій схемі підключення та командам pinmode, tone, правильно вказати довжину сигналу.
Маю на увазі з чого складається скетч.

Та як прив'язати різні звуки до функцій

Наприклад, температура піднялась вище вказаного, програе мелодія ошибка

TESLA
2023-11-30 19:19:08

Дякую, зараз пошукаю

Підвал форуму