Здраствуйте. столкнулся с функцией random. Посоветуйте как сделать что б вначале скетча допустим переменная А приняла одно единственное случайное значение. Да и ещё вопрос, можно ли создать массив со случайными значениями и что б эти значения не менялись? Работаю в Ide arduino
В setup Код (Text): int val1 = random(0, 1000); Или Код (Text): int val2[]; for(int i; i<10; i++) { val2[i] = random(0, 1000); } Хотя я не знаю, работает ли последнее, или нет..
Проблема в том, что каждый раз после рестарта в val1 будет одно и тоже значение. Так как это генератор псевдослучайных чисел. Что бы получить реально случайное число можно померять напряжение на"висящем" пине и использовать это значение в randomSeed(). Код (Text): void setup() { randomSeed(analogRead(A0)); int val = random(0, 1000); Serial.begin(115200); Serial.println(val); } void loop() {}
Не будет. Оно будет сильно коррелировано с выполнением программы. Да, и что такое псевдослучайное значение?
Можно поподробнее? . Я говорил о псевдослучайных числах. Это элемент псевдослучайной последовательности. Т.е. последовательно чисел распределение которых выглядит похожим на распределение реально случайных чисел но однозначно вычисляемых по предыдущим элементам последовательности. Ну если знать алгоритм, конечно.
Псевдослучайные числа образуют псевдошумовой сигнал. Почему псевдо и почему шумовой? Шумовой - т.к. распределение значений на спектральной плоскости равномерно (в заданном диапазоне). Псевдо - т.к. закономерность значений нам известна. Генератор псевдошума простой, а весь шарм кроется в инициализирующей последовательности. Такие генераторы не редко используются в поточном кодировании, поэтому от инициализирующей последовательности зависит криптостойкость полезного сигнала. При каждом запуске МК выполняет одни и те же действия.Поэтому и воздействие на не подключенный пин одно и то же. Настоящие генераторы случайной последовательности делают из радиотрансиверов с хорошей развязкой от МК по питанию.
Ну да, а дважды два это четыре. А еще Волга впадает в Каспийское море. Значение получамое с АЦП на висящем пине зависит не только от того что делает МК но и от шумов БП, шумов электролитов в цепях питания, шумов на p-n переходах коммутатора аналогового сигнала и даже от наличия рядом человеских тел и влажности воздуха. Может этого и недостаточно для высоконадежной криптографии потому что разрядность небольшая, но с бытовой точки зрения это достаточно хорошее случайное число
Можно сгенерировать любое другое распределение. Хоть треугольное, хоть Гауссово... далеко ходить не будем. Вот было совсем недавно http://forum.amperka.ru/threads/Генератор-случайных-чисел-на-Ардуино.19204/
У ТС не стояло задачи получить истинно белый шум. Нужно было получить на старте случайное число. То что ему посоветовали в #5 давало бы одно и то же число каждый раз при перезапуске. Использование randomSeed(analogRead(<floating pinN>)); Дает достаточно неплохой результат для бытовых целей. Вот результат работы программы на Нано Код (C++): void setup() { Serial.begin(115200); int val= analogRead(A0) & 0x7f; Serial.println(val,BIN); } void loop() {} И многократного нажатия на ресет карандашиком (что бы пины не задевать). Код (Text): 1100000 0001110 0111100 0110111 1110110 0000110 1000111 0111000 1001111 1001001 1010001 0010100 1000010 1010010 1000110 0110010 1001010 0010101 1010010 0000001 0111100 0010111 0011001 0111101 0111001 0111101 0000111 0111010 0110011 0001011 0100101 0011001 0111011 1001110 0010010 0111111 0001011 0011000 0001010