При программировании Arduino бывают случаи, когда нужно получить число, которое заранее не будет известно ни программисту, пишущему скетч, ни пользователю, который будет использовать Arduino с такой программой. В данном случае на помощь приходит генератор случайных (а точнее псевдослучайных) чисел.

Для активации этого генератора достаточно использовать функции random() или randomSeed(). В данном материале будет показано, как работать с этими функциями, а также как избавиться от псевдослучайности при генерировании чисел.
Вообще генератор псевдослучайных чисел имитирует хаотичность или случайность появления чисел, но на самом деле, если анализировать ряд этих чисел в течение достаточно длительного периода, то можно заметить определенную закономерность.
Итак, функция random для генерирования псевдослучайных чисел может иметь до двух параметров и записываться как random(max) или random(min, max). Здесь параметр max, который является обязательным, задает верхнюю границу диапазона генерации псевдослучайных чисел. С помощью дополнительного параметра min можно задать нижнюю границу диапазона. В итоге функция вернет какое-то псевдослучайное число в промежутке от min до max-1.
Важно понимать, что при использовании функции random() каждый раз будет сгенерирован точно такой же список псевдо случайных чисел. Например, если вы сделаете игровой автомат, и при первом нажатии рукоятки выпадет выигрышная комбинация, то вы можете быть уверены, что если перезагрузите Arduino и нажмете на рукоятку еще раз, этот игровой автомат покажет такую же выигрышную комбинацию. Действительно, на Arduino не просто реализовать игровой аппарат с полностью случайной генерацией чисел, как это, например, реализовано в игровых аппаратах www.igrovye-apparati-vulcan.com/, но можно частично решить проблему с помощью функции randomSeed().
Эта функция принимает значение (например, целочисленное), и использует число, чтобы изменить случайный список, генерируемый функцией random().Вы можете поместить randomSeed() в функцию настройки setup, а в бесконечном цикле loop использовать функцию random(). Но и в этом случае будет загвоздка, заключающаяся в том, что хотя последовательность случайных чисел будет отличаться при использовании функции randomSeed(),она все равно будет такой же каждый раз, когда будет запускаться скетч.
Единственным решением в таком случае может быть вариант с применением аналоговой периферии (АЦП) и соответствующей функции analogRead(). Если аналоговый ввод ни к чему не подключать, то есть оставить его «висеть» в воздухе, то благодаря шуму на этой линии можно получить действительно случайные числа. Тогда в настройке setup можно записать так randomSeed(analogRead(A0)). При условии, что аналоговый порт A0 никуда не подключен.