Amateur Radio Station R9AL

      На прошлом уроке мы научились создавать различные звуки. Также мы научились создавать ноты генерируя звук определенной частоты. Какая частота какой ноте соответвует можно посмотреть здесь: Таблица соотношения нот и частот

Для экспериментов будем использовать схему из прошлого урока:



Ну и попробуем запрограммировать простую мелодию:



Частота ноты - ближайшее целое значение, а длительность целой ноты возьмем равной 2400 мс, тогда полвина ноты - 1200 мс, четвертная - 600 мс, а восьмая - 300 мс.

Попробуйте скопировать в Tinkercad следующий код:
void setup() {
pinMode(13, OUTPUT);
}

void loop() {
tone(13, 294, 300);
delay(300);
tone(13, 349, 300);
delay(300);
tone(13, 440, 300);
delay(300);
tone(13, 349, 300);
delay(300);
tone(13, 392, 600);
delay(600);
tone(13, 349, 300);
delay(300);
tone(13, 329, 300);
delay(300);
tone(13, 440, 600);
delay(600);
tone(13, 392, 600);
delay(600);
tone(13, 294, 1200);
delay(1200);
tone(13, 349, 300);
delay(300);
tone(13, 440, 300);
delay(300);
tone(13, 523, 300);
delay(300);
tone(13, 523, 300);
delay(300);
tone(13, 587, 600);
delay(600);
tone(13, 523, 300);
delay(300);
tone(13, 466, 300);
delay(300);
tone(13, 440, 1200);
delay(60000);
  
}
После нажатия на кнопку "начать моделирование" вы услишите мелодию "Подмосковные вечера". Попробуйте запрограммиоровать какую-нибудь другую мелодию.

Функции random() и RandomSeed()

random()

Функция random() возвращает псевдослучайное число.

Синтаксис:
random(max)
random(min, max)
где параметр min - это нижняя граница случайных значений, включительно, параметр max = верхняя граница случайных значений, не включительно. Таким образом функция random возвращает псевдослучайное число из диапазона от min до max-1. Если минимальное значение не указано, то выводится число из диапазона от 0 до max-1.

Рассмотрим программу, которая генерирует случайную частоту каждые 0,6 секунды.
void setup()
{
  pinMode(13, OUTPUT);
}

void loop()
{
 tone(13, random(100,1000), 500);
 delay(600); 
}


В этой программе частота задается случайным образом, с помощью функци random из диапазона от 100 до 1000 Гц. Конечно, то что выдает эта программа трудно назвать музыкой, но теоретически, если ввести ряд ограничений и музыкальных правил, то из этого может что-нибудь получиться :)



randomSeed()

Функция RandomSeed() инициализирует генератор псевдослучайных чисел.

Если при каждом запуске программы необходимо получать разные последовательности значений, генерируемых функцией random(), то необходимо инициализировать генератор псевдослучайных чисел со случайным параметром. Например, можно использовать значение, отдаваемое функцией analogRead() c неподключенного порта вход/выхода.

В некоторых случаях необходимо получать одинаковую последовательность при каждом запуске программы на Arduino. В этом случае инициализировать генератор псевдослучайных чисел следует вызовом функции randomSeed() с фиксированным параметром.

Пример
long randNumber;
 
void setup(){
  Serial.begin(9600);
 
  // если порт 0 неподключен, то генератор псевдослучайных чисел
  // будет инициализироваться функцией randomSeed() со случайного
  // значения при каждом запуске программы из-за "шума" на порту
  randomSeed(analogRead(0));
}
 
void loop() {
  // выводим случайное число из диапазона 0..299
  randNumber = random(300);
  Serial.println(randNumber); 
 
  delay(500);
}




Copyright © R9AL 2021 Все права защищены

Рейтинг@Mail.ru Яндекс цитирования