Блок RANDOM

Нужно маленькое изменение.

Вопросы по встроенным блокам
Ответить
Rishelie
Сержант
Сообщения: 150
Зарегистрирован: 18.12.2017{, 03:16}
Репутация: 6
Откуда: Питер

Блок RANDOM

#1

Сообщение Rishelie » 08.04.2018{, 00:42}

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

Аватара пользователя
nalnik
Подполковник
Сообщения: 1324
Зарегистрирован: 14.05.2016{, 17:12}
Репутация: 100
Откуда: Кисловодск
Имя: Александр

Блок RANDOM

#2

Сообщение nalnik » 08.04.2018{, 07:10}

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

Аватара пользователя
AlexCrane
Капитан
Сообщения: 895
Зарегистрирован: 20.10.2017{, 13:22}
Репутация: 294
Откуда: Ульяновск
Имя: Александр

Блок RANDOM

#3

Сообщение AlexCrane » 08.04.2018{, 07:46}

Чисто теоретически, если генерировать случайное число не 1 до 8, а 1 до 32768 и через блок SCALE привести к 1 до 8, то результат будет получше :crazy:
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....

Аватара пользователя
brig62
Лейтенант
Сообщения: 469
Зарегистрирован: 13.05.2016{, 16:37}
Репутация: 13
Откуда: Казань
Имя: Игорь

Блок RANDOM

#4

Сообщение brig62 » 08.04.2018{, 10:41}

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

Аватара пользователя
Fuji1604
Сержант
Сообщения: 282
Зарегистрирован: 19.01.2016{, 06:09}
Репутация: 40
Откуда: Березники
Имя: Сергей

Блок RANDOM

#5

Сообщение Fuji1604 » 08.04.2018{, 10:47}

Генерируйте числа до 7 и к предыдущему прибавляйте новое, тогда подряд два одинаковых числа небудет
когда мастерю обычно подсматриваю,
не рыли ли окоп в том же направлении,
не изобретали ли велосипед с такими-же квадратными как у меня колёсами,
а уже потом - не торопясь, торю свою лыжню

Аватара пользователя
Phazz
Полковник
Сообщения: 2560
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Блок RANDOM

#6

Сообщение Phazz » 08.04.2018{, 11:00}

Поставить компаратор и сравнивать с предыдущим числом а выход с компаратора на вход блока вместе с кнопкой рандома. Если числа будет равные перебор продолжится.

Rishelie
Сержант
Сообщения: 150
Зарегистрирован: 18.12.2017{, 03:16}
Репутация: 6
Откуда: Питер

Блок RANDOM

#7

Сообщение Rishelie » 08.04.2018{, 13:41}

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

Аватара пользователя
nalnik
Подполковник
Сообщения: 1324
Зарегистрирован: 14.05.2016{, 17:12}
Репутация: 100
Откуда: Кисловодск
Имя: Александр

Блок RANDOM

#8

Сообщение nalnik » 08.04.2018{, 14:28}

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

Rishelie
Сержант
Сообщения: 150
Зарегистрирован: 18.12.2017{, 03:16}
Репутация: 6
Откуда: Питер

Блок RANDOM

#9

Сообщение Rishelie » 08.04.2018{, 14:46}

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

Аватара пользователя
dizzyy
Капитан
Сообщения: 752
Зарегистрирован: 24.11.2017{, 16:25}
Репутация: 37
Откуда: Червоноград
Имя: Марьян

Блок RANDOM

#10

Сообщение dizzyy » 08.04.2018{, 15:36}

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

whitevip
Лейтенант
Сообщения: 492
Зарегистрирован: 01.04.2017{, 20:25}
Репутация: 5
Имя: Имя

Блок RANDOM

#11

Сообщение whitevip » 08.04.2018{, 16:39}

Выложите проект, без проекта найти решение нам трудно. :crazy:
:smile37:

Rishelie
Сержант
Сообщения: 150
Зарегистрирован: 18.12.2017{, 03:16}
Репутация: 6
Откуда: Питер

Блок RANDOM

#12

Сообщение Rishelie » 08.04.2018{, 18:32}

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

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

pony sonata
Лейтенант
Сообщения: 373
Зарегистрирован: 25.02.2018{, 17:56}
Репутация: 24
Имя: sonata

Блок RANDOM

#13

Сообщение pony sonata » 08.04.2018{, 18:49}

Rishelie писал(а):
08.04.2018{, 00:42}
Есть рецепт?
если гирлянда, не проще ли юзать заранее заданные алгоритмы? будет и красиво и симметрию/асимметрию легко сделать
ну или пойти путем ледкуба :)

Rishelie
Сержант
Сообщения: 150
Зарегистрирован: 18.12.2017{, 03:16}
Репутация: 6
Откуда: Питер

Блок RANDOM

#14

Сообщение Rishelie » 08.04.2018{, 19:06}

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

https://youtu.be/kG1juzj_Q6Q

Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25.01.2018{, 22:23}
Репутация: 95
Откуда: Bukovyna
Имя: Василий

Блок RANDOM

#15

Сообщение Labu559 » 08.04.2018{, 19:07}

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

Rishelie
Сержант
Сообщения: 150
Зарегистрирован: 18.12.2017{, 03:16}
Репутация: 6
Откуда: Питер

Блок RANDOM

#16

Сообщение Rishelie » 08.04.2018{, 19:30}

Спасибо ребята!
Повторение того же самого числа в блоке Рандом, я поборол. См. проект выше.

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

Ответить

Вернуться в «Штатные блоки»