Raspberry Pi:Примеры/Библиотека WiringPi/Gertboard и WiringPi/Кнопки: различия между версиями
Myagkij (обсуждение | вклад) Нет описания правки |
Нет описания правки |
||
Строка 17: | Строка 17: | ||
Итак, если '''Gertboard''' подключена так же, как в примере '''«12 светодиодов»''' (т.е. '''12''' выходных контактов, подключенных ко всем '''12''' светодиодам), в командной строке можно написать следующее: | Итак, если '''Gertboard''' подключена так же, как в примере '''«12 светодиодов»''' (т.е. '''12''' выходных контактов, подключенных ко всем '''12''' светодиодам), в командной строке можно написать следующее: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
gpio mode 0 in | gpio mode 0 in | ||
gpio mode 0 up | gpio mode 0 up | ||
Строка 24: | Строка 24: | ||
Затем, чтобы прочесть данные с первой кнопки, пишем следующее: | Затем, чтобы прочесть данные с первой кнопки, пишем следующее: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
gpio read 0 | gpio read 0 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 42: | Строка 42: | ||
Аналогично предыдущим программам, компилируем и запускаем программу: | Аналогично предыдущим программам, компилируем и запускаем программу: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
cd Gertboard | cd Gertboard | ||
gcc -Wall -o buttons buttons.c -lwiringPi | gcc -Wall -o buttons buttons.c -lwiringPi | ||
Строка 50: | Строка 50: | ||
Или используем '''Makefile''': | Или используем '''Makefile''': | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
make buttons | make buttons | ||
sudo ./buttons | sudo ./buttons |
Версия от 18:20, 14 мая 2023
Содержание | Введение | Продукты | Операционная система | Настройка | Основы Linux | Аппаратные средства | Неисправности | Типовые проблемы | Часто возникающие вопросы | Библиотеки | Примеры |
Черновик |
Gertboard и WiringPi: Кнопки[1]
На Gertboard есть 3 кнопки, и если мы хотим их использовать, то 3 соответствующих перемычки (имеются в виду перемычки на буферных контактах) нужно либо снять, либо выставить в режим вывода данных. Почему – читайте на 12 странице мануала.
Впрочем, если выставить перемычку на вывод данных, то светодиод хоть и будет отражать состояние кнопки, но это отражение будет инвертированным. То есть, если кнопку нажать, то светодиод потухнет, а если отпустить, то светодиод загорится.
Если вы хотите использовать 3 буферных контакта для ввода данных от внешних источников, то эти перемычки нужно выставить на ввод данных (и помните – не следует нажимать на кнопки одновременно!).
Чтобы в данных, считываемых с кнопок, не было помех, нам нужно настроить подтягивающие резисторы на Raspberry Pi. Иначе, если кнопка будет ненажатой, входные данные будут «прыгать» и выдавать случайные значения (тоже самое происходит со светодиодами, когда к ним ничего не подключено – они в случайном порядке то включаются, то выключаются).
Итак, если Gertboard подключена так же, как в примере «12 светодиодов» (т.е. 12 выходных контактов, подключенных ко всем 12 светодиодам), в командной строке можно написать следующее:
gpio mode 0 in
gpio mode 0 up
Затем, чтобы прочесть данные с первой кнопки, пишем следующее:
gpio read 0
Считанным значением должно быть «1».
Теперь нажмите на кнопку, оставьте ее в таком состоянии и снова запустите команду считывания. Результатом должно быть «0».
Также обратите внимание, что при нажатии на кнопку светодиод должен потухнуть. Светодиод отражает состояние входного контакта, которое инвертировано по отношению к состоянию кнопки. Это происходит из-за того, что кнопка, будучи нажатой, подключает входной контакт Pi к «земле» (или, другими словами, к линии с 0 вольт), а будучи ненажатой, благодаря внутреннему резистору остается со значением «1». То есть, с позиции Pi все выглядит наоборот, но это можно легко поправить в самой программе.
Для кнопок в комплекте с WiringPi идет простенькая тестовая программа – она использует три кнопки, чтобы включать и выключать 3 светодиода.
Код
Программа называется «buttons.c». Чтобы найти ее, откройте папку «examples», а затем папку «Gertboard». Примеры с миганием светодиодов находились в главной папке «examples», потому что универсальны, но «buttons.c» (и ряд других программ) – это программа, использующая специфику Gertboard, поэтому и находится в отдельной папке.
Аналогично предыдущим программам, компилируем и запускаем программу:
cd Gertboard
gcc -Wall -o buttons buttons.c -lwiringPi
sudo ./buttons
Или используем Makefile:
make buttons
sudo ./buttons
Когда программа запустится, 3 первых светодиода должны включиться, а остальные – выключиться. Когда вы нажмете на первую кнопку, 4-ый светодиод должен поменять свое состояние. Аналогично вторая кнопка переключает 5-ый светодиод, а третья – 6-ой.
Единственное весомое нововведение здесь – это функция pullUpDownControl(). Она переключает внутренние резисторы на контактах Pi в состояние HIGH, благодаря чему переключатели будут работать правильно.
Итого
- Кнопки служат для ввода данных, однако буферные перемычки на Gertboard должны быть выставлены на вывод данных
- Кнопки работают с инвертированной логикой, т.е. будучи нажатыми, они дают «0» (LOW), а ненажатыми – «1» (HIGH)