Почему функция random генерирует нерандомные числа?

Функция random() в Arduino является псевдо-случайным генератором чисел, а не истинным случайным генератором. Она основана на алгоритмах генерации псевдослучайных чисел (Pseudorandom Number Generators, PRNGs). Проблема с псевдослучайными генераторами заключается в том, что они используют математический алгоритм для генерации следующего числа в последовательности, и эта последовательность в конечном итоге может стать предсказуемой.

Когда запускается программа Arduino, генератор псевдослучайных чисел инициализируется начальным значением, которое обычно называется "зерном" (seed). Если зерно не изменено вручную, оно будет одним и тем же для каждого запуска программы, что приведет к генерации одной и той же последовательности чисел каждый раз.

Если вам необходимо получить более случайные числа с помощью функции random(), вы можете изменить зерно вручную. Один из способов сделать это - использовать сигнал с аналогового пина как основу для генератора псевдослучайных чисел. Вы можете прочитать значение аналогового пина (например, A0) с помощью функции analogRead(), а затем использовать это значение в качестве зерна. Это увеличит вариативность генерируемых чисел и сделает их более случайными.

Кроме того, вы также можете использовать дополнительные библиотеки, которые предоставляют более надежные методы генерации случайных чисел, такие как библиотека RandomSeed, которая использует встроенный аналоговый пин для генерации случайных зерен.

Однако, если вам действительно нужны истинно случайные числа, вам следует использовать аппаратные методы генерации случайных чисел, такие как использование случайных значений, полученных от сенсоров или других источников шума. Эти методы обеспечат вам более предсказуемую и непредсказуемую последовательность чисел.

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