Raspberry Pi:Примеры/Библиотека WiringPi/Gertboard и WiringPi/Кнопки

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.



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)

См.также

Внешние ссылки