Поиск идеи для реализации
Чтобы как-то продемонстрировать работу программы мне нужна была идея для реализации. Недавно добавил возможность использовать дисплей, и у меня сразу появилось 8 кнопок, 8 светодиодов и дисплей на 8 разрядов (и все это за каких-то 150 руб). В поисках идеи я вспомнил загадку из детства, пару кликов и я нашел ее текст.
Однажды крестьянину понадобилось перевезти через реку волка, козу и капусту. У крестьянина есть лодка, в которой может поместиться, кроме самого крестьянина, только один объект — или волк, или коза, или капуста. Если крестьянин оставит без присмотра волка с козой, то волк съест козу; если крестьянин оставит без присмотра козу с капустой, коза съест капусту.
Как крестьянину перевезти на другой берег всё своё имущество в целости и сохранности?
Кто не знает загадку, то посмотрите здесь.
Назначение кнопок и светодиодов
Если светодиод горит, то соответствующий объект находится на соответствующем берегу; кнопками переправляем объекты на другой берег.
Схема устройства
Питание платы платы VCC, GND - обязательно как указано; остальные выводы можно и по другому, но необходимо скорректировать в свойствах блока tm1638.
Построение программы
Создание программы в "живую" смотреть здесь, итоговым вариант на скриншоте ниже. Необходимо еще продумать как пользователя обрадовать победой и огорчить поражением.
Краткое описание логики
В проекте использованы: блок для работы с дисплеем tm1638 (сверху, в его свойствах задается куда подключаем вывода от tm1638), блок опроса кнопок (слева), и блок управления светодиодами (справа). Тестирование дисплея на контроллере tm1638 можно посмотреть здесь.
Чтобы программа была более читаема, я скрыл большинство соединений и заполнил подсказки соединений. Название писал кратко поэтому получилось не столь понятно. Опрашиваем кнопки
RS триггера хранения положения объектов и блоки инверсии их значений
Вывод состояний объектов на светодиоды
Логика формирования команд взведения и сброса триггеров объектов "Капуста", "Козел", "Волк". Например, команду "Капуста направо" сформируем только тогда, когда объекты "мужик" и "капуста" находятся слева и нажата кнопка переправить "капусту и мужика" направо.
Взведение и сброса триггера для состояния "мужика" формируем по логике или при переправе объектов или просто одного "мужика"
Логика формирования сигнала "Проиграл!". Если берегу остались "Капуста" и "Козел" или "Козел" и "Волк" и при этом нет "Мужика" то формируется сигнал проигрыша на соответствующем берегу. По закону или складываем и управляем свечением дисплея.
Как я уже говорил выше, необходимо еще продумать как пользователя обрадовать победой и огорчить поражением.
Заключение
Спасибо всем за внимание.