🎲 Генератор случайных чисел

Генератор случайных чисел на Arduino

Ниже — инструкция, как сделать генератор случайных чисел на Arduino функциями random() и randomSeed(), с примером кода, а также онлайн-генератор, чтобы быстро прикинуть диапазоны и значения. Онлайн-расчёт идёт в браузере.

🎰 Рулетка — одно число из диапазона

Для розыгрышей и жеребьёвки: крутит и останавливается на честном случайном числе.

🔒 Всё генерируется в вашем браузере через crypto.getRandomValues — честная случайность без отправки данных на сервер.

Подробнее

На Arduino случайные числа выдаёт функция random(). В форме random(max) она возвращает число от 0 до max-1, а random(min, max) — от min до max-1 (верхняя граница не включается). Например, random(1, 7) даёт значения 1..6 — как игральный кубик. Главная тонкость: без инициализации последовательность случайных чисел будет одинаковой при каждом включении платы, потому что алгоритм псевдослучайный. Чтобы «перемешать» его, вызывают randomSeed() в setup(). Классический приём — считать шум с неподключённого аналогового входа: randomSeed(analogRead(A0)). Тогда стартовое зерно каждый раз разное, и последовательность не повторяется. Типичный скетч выглядит так: в setup() — Serial.begin(9600); randomSeed(analogRead(A0)); в loop() — long r = random(0, 256); Serial.println(r); delay(500);. Для действительно непредсказуемой (аппаратной) случайности используют внешний шум, специализированные микросхемы или встроенный аппаратный генератор на платах, где он есть (например, на некоторых SAMD/ESP). Онлайн-генератор выше удобен, чтобы быстро проверить, какие значения даёт нужный диапазон (по умолчанию 0–255, как один байт), прежде чем зашивать логику в скетч, или чтобы получить тестовый набор чисел. Он работает в браузере на crypto.getRandomValues и не связан с самой платой.

Частые вопросы

Как получить случайное число на Arduino?

Используйте функцию random(): random(max) даёт 0..max-1, а random(min, max) — min..max-1. Например, random(1, 7) вернёт число от 1 до 6.

Почему числа на Arduino повторяются при перезапуске?

Без инициализации зерна алгоритм выдаёт одну и ту же псевдослучайную последовательность. Вызовите randomSeed() в setup(), чтобы её менять.

Что передавать в randomSeed()?

Часто используют шум с неподключённого аналогового входа: randomSeed(analogRead(A0)). Так стартовое значение каждый раз разное и последовательность не повторяется.

Зачем здесь онлайн-генератор?

Он помогает быстро прикинуть, какие значения даёт диапазон (по умолчанию 0–255, один байт), и получить тестовый набор чисел. Сама плата для этого не нужна.