Как написать программу для включения и выключения светодиода?
-
-
Эту статью я уже видел. Но мне совершенно непонятно как сделать чтоб светодиод загорался по нажатию на кнопку и выключался при повторном нажатии
-
Ваш вопрос относится не к схемотехнике, а к программированию. Т.к. не важно, нажимаете ли вы кнопку, или клавиатуру, и загорается ли при этом светодиод, либо выполняются любые другие действия. Вам просто нужно последовательно изучать программирование и тогда вы сможете с лёгкостью решать такие простые задачи. Сейчас ваша проблема заключается в неумении составить алгоритм действий. Это из-за недостатка опыта, даже самого минимального.
Что касается непосредственно вашего вопроса:
В данном случае вам нужно модифицировать обработку события нажатия кнопки. Для этого надо задать переменную-флаг, значение которой будет соответствовать текущему режиму работы светодиода. Например, если светодиод горит, это переменная должна равняться 1, а если погашен, то 0. При инициализации светдиод не горит, по этому в начале программы присваиваем ей значение 0.
Теперь в том месте, где программа будет реагировать на нажатую кнопку, вы должны поставить условные операторы if, или switch-case, и в них уже проверять, если флаг=0, то светодиод включить и присвоить флагу значение 1. Если флаг=1, то светодиод выключить и присвоить флагу значение 0. Далее опять возвращаемся к месту ожидания нажатия на кнопку.
И так безконца. -
Добрый вечер! Помогите разобраться, пожалуйста: после компиляции gcc -o GPIO-test GPIO-test.c -lrt -lbcm2835 пишет ошибку: undefined reference to 'bcm2835_delay'
collect2: error: ld returbed 1 exit status
Я новичок, проверка показала, что ревизия платы = 1 -
Компилятор не может найти определение для функции bcm2835_delay().
Обновите библиотеку bcm2835.
Просто установите последнюю версию (как описано в 1-й части статей), старую можно не удалять, она поверх неё встанет.
В последних версиях библиотеки изменились названия некоторых функций. Раньше эта функция называлась просто delay(), а теперь её название изменилось на bcm2835_delay().
И проверьте листинг ваших программ. Я уже успел поправить первые 3 статьи "GPIO для чайников" в соответствии с последней версией библиотеки. Остальные части чуть позже исправлю. -
Довольно любопытно, но версия библиотеки последняя - только вчера скачивал и устанавливал. В листинге записано bcm2835_delay(1000); - но все равно ошибка. Заменил функцию delay на стандартную usleep(1000000) - в микросекундах, и все заработало - диод начал загораться! Еще ревизия все-таки оказалась 2-я, хотя при проверке cat /proc/cpuinfo hardware revision выдал 0002
-
Сегодня вечерком проверю на новой и чистой системе.
-
Хмм...
Только что загрузил и установил последнюю сборку 2013-02-09-wheezy-raspbian, установил bcm2835-1.17, скопировал и вставил листинг GPIO-test.c.
Всё скомпилировалось без ошибок.
Даже не знаю что и сказать. -
Я устанавливал через fedora-arm-installer-1.0.0 - ссылка с этого сайта в разделе Документация на флешку из Windows 7. Пришлось помучаться, т.к. с linux вообще никак знаком не был), но там даже gcc не было - пришлось устанавливать через yum-утилиту. Может что-нибудь криво встало...
-
Возможно.
А зачем вам Федора? Она явно не для начинающих. Там всё самому делать надо.
А Разбиан какраз для тех, кому нужно "включил- и работай". -
Они для меня все были на одно лицо на момент установки) Прочитал хорошие отзывы о fedora - вот разбираюсь, думаю надо осваивать, да и интересно. Спасибо Вам за полезные статьи по GPIO, перехожу к 3й части... Думаю скоро начать пробовать строить автоматизированные системы по принципу умного дома