Raspberry Pi:Примеры/Библиотека WiringPi/Gertboard и WiringPi/Кнопки
Содержание | Введение | Продукты | Операционная система | Настройка | Основы 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)