Страница 1 из 1

Блок RANDOM

Добавлено: 08 апр 2018, 00:42
Rishelie
Ребята, подскажите плиз.
В штатном блоке RANDOM, можно ли сделать так, что бы выбор следующего случайного числа не совпадал с предыдущим?
Я понимаю, что случайно, значит что угодно, но мне в гирлянде получается некрасиво, когда подряд мигают одни и те же LEDы. А такое очень часто происходит. Я перебираю 8 чисел, вроде как есть из чего выбирать, а оно лепит подряд одно и тоже число время от времени.
Есть рецепт?

Блок RANDOM

Добавлено: 08 апр 2018, 07:10
nalnik
В штатном не получится.
Если есть свободный аналоговый вход -
https://doc.arduino.ua/ru/prog/Random
https://arduinoplus.ru/coding-arduino/f ... rs/random/
попробуйте, или попросите помочь с созданием блока, думаю вам помогут.

Блок RANDOM

Добавлено: 08 апр 2018, 07:46
AlexCrane
Чисто теоретически, если генерировать случайное число не 1 до 8, а 1 до 32768 и через блок SCALE привести к 1 до 8, то результат будет получше :crazy:

Блок RANDOM

Добавлено: 08 апр 2018, 10:41
brig62
AlexCrane писал(а): 08 апр 2018, 07:46то результат будет получше
Это вряд ли))
Напрашивается вариант с запоминанием последних нескольких значений и не пропусканием их через блоки сравнения. Как реализовать пока не знаю. Видимо через массив. Гуры подскажут.
Просто не использовал массив еще ни разу. Но копать начал бы с него.

Блок RANDOM

Добавлено: 08 апр 2018, 10:47
Fuji1604
Генерируйте числа до 7 и к предыдущему прибавляйте новое, тогда подряд два одинаковых числа небудет

Блок RANDOM

Добавлено: 08 апр 2018, 11:00
Phazz
Поставить компаратор и сравнивать с предыдущим числом а выход с компаратора на вход блока вместе с кнопкой рандома. Если числа будет равные перебор продолжится.

Блок RANDOM

Добавлено: 08 апр 2018, 13:41
Rishelie
nalnik писал(а): 08 апр 2018, 07:10попросите помочь с созданием блока, думаю вам помогут.
Оставим этот рецепт на потом. :) Программирование, это не я.
AlexCrane писал(а): 08 апр 2018, 07:46Чисто теоретически, если генерировать случайное число не 1 до 8, а 1 до 32768 и через блок SCALE привести к 1 до 8, то результат будет получше
Думаю вряд-ли. Мы же через SCALE будем приводить к 8ми числам некий диапазон. А вероятность выпадения числа в диапазоне, по идее, будет даже выше, чем среди 8 чисел. Трудно сказать, но мне кажется будет даже хуже.
Fuji1604 писал(а): 08 апр 2018, 10:47Генерируйте числа до 7 и к предыдущему прибавляйте новое, тогда подряд два одинаковых числа небудет
Что то не понял алгоритм.
Phazz писал(а): 08 апр 2018, 11:00оставить компаратор и сравнивать с предыдущим числом а выход с компаратора на вход блока вместе с кнопкой рандома. Если числа будет равные перебор продолжится
Сейчас буду пробовать. Наворот конечно получится. :)

Блок RANDOM

Добавлено: 08 апр 2018, 14:28
nalnik
Помню очень давно делал для "синклера" потом для 486 компа -
RANDOM с любой математикой делал одно и тоже.
Заполнял экран монитора точками с инверсией, где Х и У координаты выбирались RANDOM.
В начале весь экран равномерно зажигал пиксели - затем точно также их тушил до чистого экрана и так по кргу,
и дополнительная математика только влияла на скорость появления точек --
Аналоговый вход не я придумал - и это реально вам поможет

Блок RANDOM

Добавлено: 08 апр 2018, 14:46
Rishelie
nalnik писал(а): 08 апр 2018, 14:28Аналоговый вход не я придумал - и это реально вам поможет
Я не программист. Я с блоками то начал совсем недавно.
Мне с кубиками хоть что-то понятно. :)

Блок RANDOM

Добавлено: 08 апр 2018, 15:36
dizzyy
рандом это и есть случайное число и могут быть некоторые подряд..
тут задача как бы выборка чисел от 1 до 8 в случайном порядке
как здесь функция лотто https://www.planetaexcel.ru/techniques/2/94/

Блок RANDOM

Добавлено: 08 апр 2018, 16:39
whitevip
Выложите проект, без проекта найти решение нам трудно. :crazy:

Блок RANDOM

Добавлено: 08 апр 2018, 18:32
Rishelie
dizzyy писал(а): 08 апр 2018, 15:36рандом это и есть случайное число и могут быть некоторые подряд..
Ну это я понимаю, сразу же и написал.
whitevip писал(а): 08 апр 2018, 16:39Выложите проект, без проекта найти решение нам трудно.
Phazz писал(а): 08 апр 2018, 11:00Поставить компаратор и сравнивать с предыдущим числом а выход с компаратора на вход блока вместе с кнопкой рандома. Если числа будет равные перебор продолжится.
Кажись получилось. Правда долго ломал голову, как одновременно переключать и сравнивать. Но вроде заработало. Платы 5,6,7.

Теперь подскажите пожалуйста, как делается эффект падающей капли? Принцип? На 3й плате сделал бегущий огонек. Хотелось бы добавить эффект "сосульки".
Панель-В19 тест RANDOM.flp

Блок RANDOM

Добавлено: 08 апр 2018, 18:49
pony sonata
Rishelie писал(а): 08 апр 2018, 00:42Есть рецепт?
если гирлянда, не проще ли юзать заранее заданные алгоритмы? будет и красиво и симметрию/асимметрию легко сделать
ну или пойти путем ледкуба :)

Блок RANDOM

Добавлено: 08 апр 2018, 19:06
Rishelie
pony sonata писал(а): 08 апр 2018, 18:49если гирлянда, не проще ли юзать заранее заданные алгоритмы? будет и красиво и симметрию/асимметрию легко сделать
Не совсем гирлянда. Алгоритмы там уже есть, просто хочется перебор их сделать случайным.
Ну и повторение одного и того же алгоритма - раздражает. :) Ну это я уже решил.
Теперь бег по кругу, после нажатия кнопки, хочу сделать с затуханием, "сосулька".

https://youtu.be/kG1juzj_Q6Q

Блок RANDOM

Добавлено: 08 апр 2018, 19:07
Labu559
brig62 писал(а): 08 апр 2018, 10:41Как реализовать пока не знаю. Видимо через массив
Полностью согласен, но пока делал пример нашлось другое решение. Тем не менее, можно заполнять массив результатами блока рандом и при выпадении числа, которое уже есть в массиве, заменить его числом что находится под самым старшим индексом (4 или 0 в блоке GetFromArray) в этом массиве. Здесь помогут штатные блоки (см.проект). Делать блок на Си нецелесообразно, но если есть необходимость, то можно за счёт оптимизации типов переменных съэкономить 10 байт Flash и 4 байта SRAM заменив их байтовыми прямо в ИДЕ.
Колличество элементов массива на мой взгляд оптимально. Пробуйте (не проверено в железе) и удачи!
nalnik писал(а): 08 апр 2018, 14:28Аналоговый вход не я придумал - и это реально вам поможет
Похоже он в штатном блоке используется (см. код) randomSeed(analogRead(0));

Блок RANDOM

Добавлено: 08 апр 2018, 19:30
Rishelie
Спасибо ребята!
Повторение того же самого числа в блоке Рандом, я поборол. См. проект выше.

Теперь буду с сосулькой воевать. :)