Функция random, randomSeed Arduino

Функция random Arduino IDE

Функция random Ардуино возвращает псевдослучайное число, то есть последовательность генерации случайных чисел все таки предсказуема. Функция randomSeed позволяет поместить переменную или константу в функцию random, чтобы генерировать более случайные значения. Разберемся в этой статье, как в языке программирования Arduino IDE задать рандомное число в диапазоне правильно.

random — генерация случайных чисел Ардуино

Функция random (min, max) позволяет вернуть псевдослучайное число в диапазоне, заданном значениями min и max. Разберем примеры с разными типами данных.

Arduino random int

В представленном примере выбран тип данных byte, хранящий целые числа в диапазоне от 0 до 250. Можно использовать и другие типы данных: int, long, unsigned long, unsigned int и другие. Соответственно задается нужный диапазон (min, max).

byte data;

void setup() {
   Serial.begin(9600);
}

void loop() {
   data = random(100, 200); // ардуино рандомное число в диапазоне
   Serial.println(data);
   delay(250);
}

Arduino random float

Генерировать микроконтроллер может только целые числа. Поэтому чтобы получить тип данных float с двумя знаками после запятой, следует отдельно генерировать целое число и добавлять к нему десятичные дроби. Пример такой программы:

float data;
float data1;
float data2;

void setup() {
   Serial.begin(9600);
}

void loop() {
   data1 = random(0, 10);        // генерируем целые числа
   data1 = random(0, 100);      // генерируем числа после запятой
   data = data1 + data2 / 100; // складываем полученные значения
   Serial.println(data);
   delay(250);
}

Arduino random bool

Если нужна случайная переменная boolean, которая может принимать только два значения true или false. То можно генерировать случайное true/false с заданной вероятностью. Просто присваиваем переменной bool результат функции random, в которой указываем число, обратное вероятности получения false. Пример:

bool data;

void setup() {
   Serial.begin(9600);
}

void loop() {
   data = random(5); // переменная data получит значение 0 с вероятностью 1/5
   Serial.println(data);
   delay(250);
}

Случайные числа Ардуино randomSeed

Обратите внимание, что во всех примерах, представленных выше, при каждом перезапуске программы случайная последовательность чисел повторяется. Этого можно избежать, используя функцию randomSeed Arduino. randomSeed позволяет поместить переменную в функцию random. Для этого используют millis, analogRead или другие варианты, позволяющие сделать генерацию чисел более случайной.

int data;

void setup() {
   Serial.begin(9600);
   randomSeed(analogRead(A1)); // к пину A1 ничего не подключается
}

void loop() {
   data = random(100, 200); // ардуино рандомное число в диапазоне
   Serial.println(data);
   delay(250);
}

При каждом перезапуске программы генератор псевдослучайных чисел будет инициализироваться функцией randomSeed(analogRead(A1)); со случайного значения из-за «шума» на порту. Можно использовать любой свободный порт для этого, так как все аналоговые выводы воспринимают случайный шум из окружающей среды — радиоволны, электромагнитные помехи от компьютеров, сотовых телефонов и т.д.

1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5,00 out of 5)
Загрузка...

Подборка на тему: Функция random, randomSeed Arduino

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *