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

Многовыходной переключатель пропускает первый светодиод

Добавлено: 18 фев 2023, 17:35
ertos84
Приветствую уважаемые форумчане!
Решил по тихоньку осваивать Arduino, с FLProg это происходит на много приятнее и проще (но не всегда).
Решил сделать для примера бегущий огонь из пяти светодиодов:генератор, счетчик, переключатель. Вроде бы ничего сложного, но споткнулся на одном неприятном моменте: при запуске программы свечение начинается со второго светодиода. Следующие циклы-как положено, первый участвует.
Подскажите пожалуйста, что я не учел в столь простой схеме?

Многовыходной переключатель пропускает первый светодиод

Добавлено: 18 фев 2023, 18:04
Ingwar
Обратите внимание на последовательность выполнения блоков.
Пока кнопка не нажата на выходе из счетчика "0", соответственно активен выход "0" переключателя. Но на его вход подается "0" из переменной и он не горит.
Когда нажали кнопку, переменная стала "1", но переключатель опрашивает вход после того, как счетчик по переднему фронту с генератора начал счет...
Думаю поняли.
[spoiler]
Безымянный.png
[/spoiler]

Многовыходной переключатель пропускает первый светодиод

Добавлено: 18 фев 2023, 21:06
WildCat
Можно либо считать от -1, либо сдвинуть выходы дешифратора, либо между счётчиком и дешифратором поставить блок вычитания единицы.

Многовыходной переключатель пропускает первый светодиод

Добавлено: 19 фев 2023, 13:42
ertos84
По входу поставил предустановку константу -1 и теперь как положено!
Три дня сидел все ни как допереть не мог. :smile14: :smile14:
Спасибо за помощь! :smile152:

Многовыходной переключатель пропускает первый светодиод

Добавлено: 20 фев 2023, 09:26
rw6cm
[ref]ertos84[/ref],
Как вариант поставить между генератором и счетчиком Ftrig

Многовыходной переключатель пропускает первый светодиод

Добавлено: 20 фев 2023, 12:42
AlexCrane
[ref]ertos84[/ref], [ref=#ff8000]rw6cm[/ref], Или переменную между счетчиком и м.переключателем.

Многовыходной переключатель пропускает первый светодиод

Добавлено: 20 фев 2023, 17:08
Dryundel
ertos84 писал(а): 18 фев 2023, 17:35 Решил по тихоньку осваивать Arduino, с FLProg это происходит на много приятнее и проще
Отличное начинание!
Вот вам еще два примера бегущего огня на дешифраторе и на битовых операциях.
Когда разберетесь как работают оба, можно будет зачесть подъем на целую ступеньку. :)
[spoiler=Примеры бегущего огня]
Primer_forum_New.jpg
Primer_forum_New.flp
[/spoiler]

Многовыходной переключатель пропускает первый светодиод

Добавлено: 21 фев 2023, 05:45
ertos84
Dryundel писал(а): 20 фев 2023, 17:08 Отличное начинание!
Вот вам еще два примера бегущего огня на дешифраторе и на битовых операциях.
Когда разберетесь как работают оба, можно будет зачесть подъем на целую ступеньку.
Спасибо за такие примеры! Обязательно разберусь, но как только закончу начатое!
Мотивацией к изучение послужил сломанный детский аппарат "Хватайка". Приобрел в Детском Мире за символическую плату как "неисправный".
Хватайка.JPG
Так как с паяльником на "Ты", думал обойдусь малой кровью, в надежде на какой нибудь пустяк. Но не тут то было, на плате управления МК (капля) кипела как утюг. Вот тут и пришла в голову идея переделать под управлением Ардуино. В голове сложил картинку последовательности:
в режиме ожидания - бегущий огонек из светодиодов (на верхней части) и бегущие по кругу сегменты на двух разрядном индикаторе (с ОК).
кинул монетку - режим ожидания отключается отсчитывается таймер в 60 секунд, за которые нужно успеть достать игрушку по нажатию кнопки. Ну и в идеале чтобы музыка проигрывалась, когда идет обратный отсчет (на алиэкспресе присмотрел MP3 модуль).
Так как придется задействовать много портов ввода, вывода (кнопки джойстиков, выходы на моторы, концевики, светодиоды и двухразрядный семисегментный индикатор) решил разделить это на две платы Ардуино (Uno и Nano) соединенные по UART.
Задумку буду осуществлять до последнего, так как дочка уже давно мечтала об такой игрушке, да и для саморазвития только плюс (уже составил план дальнейших изобретений).
Но чем дальше в лес тем больше вопросов, на которые я думаю вы мне дадите правильное направление, по крайней мере надеюсь на это:)
С бегущим огнем разобрался благодаря вашим подсказкам. Также сделал бегущий огонь на индикаторе (по кругу) но ни как не могу заставить его работать в цикле (по аналогии со светодиодами).
Режим_ожидания.flp

Многовыходной переключатель пропускает первый светодиод

Добавлено: 21 фев 2023, 09:56
rw6cm
ertos84 писал(а): 21 фев 2023, 05:45 С бегущим огнем разобрался благодаря вашим подсказкам. Также сделал бегущий огонь на индикаторе (по кругу) но ни как не могу заставить его работать в цикле (по аналогии со светодиодами).
Посмотрел Видео про эту игрушку,
но что то там не увидел индикатор по кругу, да и сверху диоды не только в лево/право бегают.
Да и на индикатор по хорошему дешифратор бы поставить

Многовыходной переключатель пропускает первый светодиод

Добавлено: 21 фев 2023, 10:31
ertos84
rw6cm писал(а): 21 фев 2023, 09:56 Посмотрел Видео про эту игрушку,
но что то там не увидел индикатор по кругу, да и сверху диоды не только в лево/право бегают.
У меня цели нет полностью сделать копию заводской модели. Решил что в режиме ожидания круговое свечение двухразрядного семисегментного индикатора будет смотреться интересно.
rw6cm писал(а): 21 фев 2023, 09:56 Да и на индикатор по хорошему дешифратор бы поставить
А с дешифратором можно реализовать последовательное включение сегментов в нужные разряды?

Многовыходной переключатель пропускает первый светодиод

Добавлено: 21 фев 2023, 12:37
Dryundel
ertos84 писал(а): 21 фев 2023, 05:45 А с дешифратором можно реализовать последовательное включение сегментов в нужные разряды?
Последовательное можно, но по одному. Одновременно свечение двух, трех... нельзя. А вот с помощью битовых операций можно что угодно. Возможна любая последовательность и сочетание.
Изучайте примеры. :)

Многовыходной переключатель пропускает первый светодиод

Добавлено: 21 фев 2023, 12:41
WildCat
Dryundel писал(а): 21 фев 2023, 12:37 Одновременно свечение двух, трех... нельзя
Если поставить на выходах дешифратора блоки ИЛИ и последовательно входы завести, то можно включать светодиоды парами. Своего рода аналог диодной развязки.
1|2=d1&d2
2|3=d2&d3
3|4=d3&d4
etc


Ну или использовать командоаппарат и тогда можно вообще в произвольной последовательности диоды включать.

Многовыходной переключатель пропускает первый светодиод

Добавлено: 21 фев 2023, 15:49
Dryundel
WildCat писал(а): 21 фев 2023, 12:41 Ну или использовать командоаппарат и тогда можно вообще в произвольной последовательности диоды включать.
Тяжеловат он в понимании логики для новичка. Да и для моргания светодиодов избыточен.

Ок давайте знакомиться с битами. :)
Это совсем не низкоуровневое программирование, как считают некоторые. На самом деле все просто до банальности.
Сделаем пару-тройку примеров и все станет понятно.

Итак
Есть у нас переменная типа Byte. Это 8 бит. Вот ими то и будем оперировать.
Записав к примеру число 48 в бинарном виде получаем b00110000
Штатный блок Byte->Bits при подаче на вход 48 выдаст логическую единицу на выходах Bit-4 и Bit-5
(Биты считаются с нулевого и справа налево)
Вот и вся наука.

Подавая на вход блока Byte->Bits значения от 0 до 255, получаем разное сочетание единиц и нулей на выходах.
[spoiler=Вывод рандомного числа на светодиоды]
Бинарные Операции Пример 1.jpg
Бинарные Операции Пример 1.flp
[/spoiler]

[spoiler=Вывод счета от 0 до 255 на диоды]
Бинарные Операции Пример 2.jpg
Бинарные Операции Пример 2.flp
[/spoiler]
.
Есть некоторая сложность в переводе десятичного числа в бинарный формат. НО! FLProg легко работает и с бинарным форматом.
На входы блоков и в константы переменных можно вводить b00110000 и все будет точно так же работать.
А если выводить разные числа последовательно, то можно получить абсолютно любой эффект. При этом всё будет достаточно наглядно.

b00000000
b00000001
b00000010
b00000100
b00001000
b00010000
b00100000
b01000000
b10000000

Светящийся светодиод "побежит" именно так, как единица в этой последовательности.
Единственный момент, это то, что при вводе бинарного числа, нули слева удалятся. Точно так же как и в десятичном формате.
[spoiler=Эффект с последовательным вводом]
Бинарные Операции Пример 3.jpg
Бинарные Операции Пример 3.flp
[/spoiler]
.
А огромный блок с большим количеством входов можно заменить на блок "Получение элемента массива", создав в нем всю последовательность.
[spoiler=Прячем программу эффектов в массив]
Бинарные Операции Пример 4.jpg
Бинарные Операции Пример 4.flp
[/spoiler]
.
Конечно же будет лучше, если сохранить такой массив в EEPROM, но штатных средств для этого нет.
Однако можно воспользоваться штатной записью и чтением значений в EEPROM, выполнив запись один раз при старте контроллера.

Многовыходной переключатель пропускает первый светодиод

Добавлено: 21 фев 2023, 17:39
ertos84
Dryundel писал(а): 21 фев 2023, 15:49 Ок давайте знакомиться с битами.
Это совсем не низкоуровневое программирование, как считают некоторые. На самом деле все просто до банальности.
Сделаем пару-тройку примеров и все станет понятно.
На самом деле ничего сложного. Теория в полне понятна. Тем более с такими примерами. Спасибо громадное :smile152: !
Если взять семисегментный двухразрядный индикатор при зажигании сегментов вопросов вообще нет, тем более за сегодняшний день открыл для себя много методов, а вот с разрядами все ни как не могу вникнуть. Это будет являться по сути динамической индикацией.
И нужно подавать 0 на катод, либо первого или второго разряда, в определенный момент времени.

Отправлено спустя 9 минут 25 секунд:
Ааа, вроде понял. Все также игра с битами! Проведу эксперимент и обязательно отпишусь о результате. На самом деле с битами можно творить чудеса :yes:

Многовыходной переключатель пропускает первый светодиод

Добавлено: 26 фев 2023, 15:18
ertos84
На данный момент перешел к следующему шагу, а именно иллюминация в режиме игры. Первая часть программы, иллюминация светодиодов, работает как положено. Нажал - горит, еще раз нажал - погасло. Вторая часть -нажал 60 секунд обратный отсчет. При повторном нажатии - дисплей должен отключиться. Так вот чтобы он отключался от повторного нажатия ни как не получается. Подскажите где я сделал не правильно или не доделал.
Mode_Game.flp

Многовыходной переключатель пропускает первый светодиод

Добавлено: 26 фев 2023, 16:02
Dryundel
[ref]ertos84[/ref], у вас индикаторы с общим катодом. Для того, чтобы все погасло надо на катоды подать "плюс". Т.е. надо на выходы которые идут на катоды подать логическую единицу.
Достаточно подсказки?

Многовыходной переключатель пропускает первый светодиод

Добавлено: 26 фев 2023, 16:59
ertos84
Я понимаю что надо повесить единицу на катоды, чтобы погасить индикаторы. Не могу допетрить какой блок использовать.

Многовыходной переключатель пропускает первый светодиод

Добавлено: 26 фев 2023, 17:10
Dryundel
ertos84 писал(а): 26 фев 2023, 16:59 Не могу допетрить какой блок использовать.
Типа так. И на второй аналогично.
4.jpg