Генератор псевдослучайной последовательности 2^8 на Аrduino

Curiosity

✩✩✩✩✩✩✩
2 Ноя 2022
11
0
Всем огромный привет, приобрел себе впервые Ардуино пока не до конца понимаю суть работы скетчей. Кто может помочь сделать генератор ПСП с последовательностью 2^8 вроде как числовая последовательность из 256 чисел. Такое можно сделать на сдвиговом регистре, но как реализовать это на Ардуино программно, помогите :cry:
 

poty

★★★★★★✩
19 Фев 2020
3,261
948
Если вообще ничего не понимаете, то как помочь?
Генератор псевдослучайной последовательности есть во встроенных функциях Ардуино IDE.
 
  • Лойс +1
Реакции: Curiosity

Curiosity

✩✩✩✩✩✩✩
2 Ноя 2022
11
0
Оформи код соответствующим тэгом
@poty,а можно ли как то его функцию узнать или достать из библиотеки ?

у меня была идея пока такая

long randNumber;
void setup(){
Serial.begin(9600);
randomSeed(0);
}
void loop() {
randNumber = random(9); // выбираем случайное число от 0 до 999
Serial.println(randNumber); // выводим число в Serial Port
delay(1000); // ждём одну секунду
}

потом сделать так чтобы через каждые 256 секунд он начинал сначала ( но как это сделать я пока не понимаю )
 

Сотнег

★★★★★★★
15 Янв 2020
4,446
1,520
@Curiosity,
randomSeed(0);
- это и есть "начинал сначала".
Число в скобочках - это где оно начало.
 
  • Лойс +1
Реакции: Curiosity

poty

★★★★★★✩
19 Фев 2020
3,261
948
Вы действительно не понимаете или прикидываетесь?
Почитайте https://www.arduino.cc/reference/en/language/functions/random-numbers/random/
Примеры там тоже есть. Зачем начинать сначала, если каждый вызов функции random будет давать очередное псевдослучайное число?
И посмотрите параметры, которые в функцию передаются, а то Вы пишете "9", а в комментариях -999.

По поводу того, чтобы "разобрать библиотеку" - без проблем, код открытый, никто ничего не прячет. В сети полно программ, которые делают тоже самое, но в целом смысл там один и тот же.
 
  • Лойс +1
Реакции: Curiosity

Curiosity

✩✩✩✩✩✩✩
2 Ноя 2022
11
0
@poty,мне нужна псевдослучайная последовательность из 256 чисел, чтобы после генерации 256-го числа алгоритм начинался заново.

1667416366825.png
я пытаюсь сделать на ардуино генератор псевдослучайной последовательности чисел (2^n n=8)
на схеме примере реализации генератора на регистре сдвига
 

Сотнег

★★★★★★★
15 Янв 2020
4,446
1,520
@poty,мне нужна псевдослучайная последовательность из 256 чисел, чтобы после генерации 256-го числа алгоритм начинался заново.
Звучит так, будто бы вам нужна функция
C-like:
uint8_t my256random(){
  static uint8_t r;
  r = r * 13 + 23; // вместо 13 может быть любое число равное (1 + 4*любое); вместо 23 может быть любое нечётное число
  return r;
}
 
Изменено:
  • Лойс +1
Реакции: Curiosity

poty

★★★★★★✩
19 Фев 2020
3,261
948
@Curiosity, нагенерите 256 чисел, запишите в массив и используйте.
Можно и имитировать схемотехнику, которую Вы привели, только зачем? Во-первых, это пример. Во-вторых, имитировать цифру цифрой, честно говоря, нонсенс. Я бы ещё понял, если бы это было с улучшением, а так...
 
  • Лойс +1
Реакции: Curiosity

Curiosity

✩✩✩✩✩✩✩
2 Ноя 2022
11
0
@poty,я просто не знаю, как ещё можно реализовать генератор псевдослучайной последовательности 2^8, на Ардуино
 

poty

★★★★★★✩
19 Фев 2020
3,261
948
А то, что предложил @Сотнег, да и я, @poty, тоже чем не подходит? Зачем Вы собираетесь что-то эмулировать или разбирать библиотеку, если не можете реализовать готовые решения?
 
  • Лойс +1
Реакции: Curiosity

Curiosity

✩✩✩✩✩✩✩
2 Ноя 2022
11
0
@poty,вечером приду попробую, а по поводу разбора библиотеки, можете рассказать как это сделать, интересно просто как это работает. P.S.если вас не затруднит.
 

poty

★★★★★★✩
19 Фев 2020
3,261
948
Так как всё есть в исходных кодах, то никакого "разбора" не потребуется. Нужно просто найти, где этот исходный код запрятан.
Можно начать с исследования папки ArduinoData, если у Вас установлен Arduino IDE.
Исходные коды того, что в этой папке представлено hex-ами, скорее всего, лежат на гитхабе. Посмотрите на arduino.cc, там тоже много подсказок есть.
Конкретно random() может браться и из стандартной библиотеки C/C++ (stdlib?), тогда нужно искать её. Труднее, но не безнадёжно.
 
  • Лойс +1
Реакции: Curiosity

Геннадий П

★★★★★★✩
14 Апр 2021
1,975
634
45
  • Лойс +1
Реакции: Curiosity

Curiosity

✩✩✩✩✩✩✩
2 Ноя 2022
11
0
@Сотнег,
C:\Users\yno\AppData\Local\Temp\ccj9XrAM.ltrans0.ltrans.o: In function `main':
C:\Users\yno\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino/main.cpp:43: undefined reference to `setup'
C:\Users\yno\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino/main.cpp:46: undefined reference to `loop'
collect2.exe: error: ld returned 1 exit status

exit status 1

Compilation error: exit status 1
 

Сотнег

★★★★★★★
15 Янв 2020
4,446
1,520
@Curiosity,
а я причём?
Начните с компиляции демонстрационных скетчей из папки с примерами.
И обновите версию хотя бы до 1.8.13...
 
  • Лойс +1
Реакции: Curiosity

poty

★★★★★★✩
19 Фев 2020
3,261
948
@Curiosity, Вам же @Сотнег дельную мысль сказал: сначала посмотрите хотя бы blink в примерах как устроен. Ну не смешно уже, правда!
 

Curiosity

✩✩✩✩✩✩✩
2 Ноя 2022
11
0
Последний вопрос и я больше не буду докучать.(

The max parameter should be chosen according to the data type of the variable in which the value is stored. In any case, the absolute maximum is bound to the long nature of the value generated (32 bit - 2,147,483,647). Setting max to a higher value won’t generate an error during compilation, but during sketch execution the numbers generated will not be as expected.

вот тут говорится, что генератор (встроенная функция Rand) на ардуино (32 bit - 2,147,483,647), а мне надо (8 bit - 256), как его подрезать ?
 

poty

★★★★★★✩
19 Фев 2020
3,261
948
@Curiosity, перевод первого предложения:
"Параметр max должен соответствовать типу данных переменной, в которой он будет сохранен."
Напомнить Вам предельное значение переменной типа uint8_t (byte, unsigned char...)?
Далее, даже если Вы будете сохранять значения в uint16_t, long и т.п. параметр max будет ограничивать верхнюю границу генерируемого числа. (Я так понял реализацию функции random Вы так и не посмотрели, иначе эти вопросы не задавали бы). То есть этот абзац вообще не имеет отношения к вопросу, который Вы задавали.
Какова причина того, что Вы взялись за программирование? Не то, чтобы я был против (с чего бы это мне было нужно?), но смущает то, что Вы даже не пытаетесь изучить основы.
 
Изменено:

Curiosity

✩✩✩✩✩✩✩
2 Ноя 2022
11
0
@poty,фельдшер решил сменить сферу деятельности так скажем (
 

Curiosity

✩✩✩✩✩✩✩
2 Ноя 2022
11
0
@Геннадий согласен, теперь я это понимаю, прыгнул может от того, что думал это легкая тема и я все понял, а оказывается все немного сложнее...
 

poty

★★★★★★✩
19 Фев 2020
3,261
948
@Curiosity, а почему такой странный первый проект? Ничего страшного нет в ошибках на первых шагах, и в том, что многое непонятно. Просто есть масса интересных проектов, которые можно относительно легко модифицировать для первого "своего" проекта. Эти наработки потом легче использовать при более глубоких изменениях.
Это не отменяет изучения основ, просто не наваливается большим комом без видимой отдачи на первых (иногда достаточно длинных) порах.
 

Curiosity

✩✩✩✩✩✩✩
2 Ноя 2022
11
0
@poty, для меня интересна тема криптографии и шифрования информации в частности на ТВ, а там как раз используются ГПСП, как я понял, а в интернете распространены генераторы на регистре сдвига, вот я и решил сделать это на ардуино, как раз пришла с китая )
 

poty

★★★★★★✩
19 Фев 2020
3,261
948
У криптографии - значительный математический аппарат, вряд ли Вам помогут здесь рекомендации из Интернета. Как модель, разве что. И прежде чем что то делать, надо понимать, как проверить то, что получилось в результате. Иначе Вы получите набор чисел, которые использовать невозможно. То есть стандартный научный процесс: постановка задачи, поиск путей решения, эксперимент, анализ/проверка результатов, а дальше - либо сначала, либо достигли удовлетворительного результата.