В этой статье я расскажу как работать с семисегментным светодиодным индикатором и напишем скетч увлекательной игры "Поймай меня".
Что такое семисегментный индикатор? По сути это 8 отдельных светодиодов (8-й это десятичная точка), расположенных в корпусе так, чтобы с их помощью можно было показывать цифры и другие знаки. Обычно одни из выводов соединены вместе и такие индикаторы делят на индикаторы с общим анодом или с общим катодом.
Если индикатор с общим катодом, то его средние ножки подключают к общему проводу (GND), а если с общим анодом, то к напряжению питания. Выводы сегментов через резистор сопротивлением 220 Ом подключаем к выводам портов Arduino Uno.
Это правильная схема, нет риска сжечь порты микроконтроллера, но для нее требуются 8 резисторов. Но в нашей схеме мы будем зажигать сегменты по одному и нет риска сжечь порт при одновременном зажигании нескольких светодиодов. Поэтому экономим как в этой схеме.
Подключим сегменты A,B,C,D,E,F,G,DP (десятичная точка) к выводам GP4-GP11 микроконтроллера. Подавая высокий уровень на порт мы зажигаем, а низкий - гасим соответствующий сегмент.
Давайте попробуем зажигать поочередно все сегменты в цикле для примера. Вот скетч и он очень простой. В основном цикле в операторе for() перебираем порты и командой digitalWrite записываем лог. "1" в порт, зажигая его, а после задержки лог. "0" - гасим его. И так по кругу.
Давайте усложним задачу. Будем зажигать сегменты не автоматически а по нажатии кнопки. Подключим один вывод кнопки к порту GP3 а другой к GND. И все? И все! А как же резистор, "подтягивающий"вывод к напряжению питания. Без него при разомкнутой кнопке на входе будет случайное напряжение и результат чтения будет неопределенный.
Все просто! Вместо внешнего, мы подключим к выводу внутренний или PULLUP резистор. Для этого в команде pinMode() мы определим пин не как INPUT а как INPUT_PULLUP. Дальше все просто.
В цикле loop() мы ждем пока на 3-м пине не появится уровень лог. "0", это будет значит, что кнопка нажата зажигаем и гасим очередной сегмент через секунду. Теперь у нас все готово для нашей игры.
Игра очень простая. Нужно "поймать" заранее заданный сегмент. Его номер мы вычисляем с помощью функции randomize(). Перед началом игры мы его высвечиваем на 1 секунду и затем в цикле поочередно зажигаем сегменты и ждем пока не нажмется кнопка.
И если нажатие кнопки происходит в момент высвечивания "загаданного" сегмента, игра прекращается и сегмент гаснет. Затем игра начинается снова. Вот скетч этой игры.
Конечно, игра примитивна, но она дает представление, как работать с 7-и сегментным светодиодным индикатором. И, кстати, вы можете доработать ее по своему вкусу и написать свой вариант в комментариях.
А вот как это выглядит на видео:
Ну вот как то так! Понравилась статья? Поставьте лайк!
Напишите свое мнение в комментариях!