|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.12.2015, 16:18 | #1 |
Новичок
Джуниор
Регистрация: 22.12.2015
Сообщений: 6
|
Обработка нажатия кнопки в Arduino
Всем привет!
Понимаю что не совсем в тему, но спросить особо негде. Пытаюсь освоить конструктор Arduino. Не гуманитарий, но программировать никогда не умел и не пытался, а тут интересно стало. Небольшая вводная, у Ардуино есть свои нюансы. В обязательном порядке в программе должны быть предусмотрены две функции: void setup() и void loop(). При запуске контроллера один раз выполняется setup(), потом управление передаётся в loop(), которая выполняется по кругу бесконечно. Есть несколько специфичных функций: pinMode(pin, INPUT/OUTPUT) - выставляет состояние контакта (они все нумерованы от 0 до 13) на вывод (подача 5 вольт) или вход (считывание 5 вольт). digitalWrite(pin, STATE) - подаёт или выключает питание 5В на нужном контакте. STATE может быть HIGH или LOW digitalRead (pin) - считывает подано ли напряжение на контакт. Возвращает значение HIGH или LOW millis() - возвращает значение в миллисекундах с момента начала работы контроллера, такой внутренний таймер. Переполняется через 2 месяца непрерывной работы. delay(t) - заморозка работы контроллера на t миллисекунд. При этом состояние удерживается, т.е. если на каком-то пине было 5В, они там останутся. Но вся остальная программа на это время подвисает. Собрана схема, содержащая кнопку, подключённую к выводу №2 и светодиод к выводу №3. Я написал вот такую программу, в которой предусмотрена функция Blink() для мигания диодом и функция debounce() для устранения дребезга контактов Вот листинг с моими комментариями: Код:
Serial.print("current="); Serial.println(current); Выводят в COM-порт (его монитор встроен в IDE) значение переменной current. Так вот, при нажатии кнопки выводится current=1, при отпускании тут же current=0. То есть система нажатие обрабатывает, но почему-то сразу же присваивает кнопке статус ВЫКЛ, а по плану он должен циклически меняться. Понимаю, что это не совсем в тему форума, но на форуме Ардуины помочь не могут P.S. Электрическая схема выглядит вот так, и она точно рабочая. Простейшие программы на ней выполняются. |
22.12.2015, 16:40 | #2 | |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Цитата:
У Вас каждый раз новая переменная. Какое значение у нее здесь? Её никто не инициализировал. Ну и схему лучше нормальную предоставить, а не такой рисунок. |
|
22.12.2015, 16:42 | #3 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Вечером, как приду с работы, могу подробнее рассмотреть код (Arduino имеем в наличии) )))
|
22.12.2015, 17:09 | #4 | ||
Новичок
Джуниор
Регистрация: 22.12.2015
Сообщений: 6
|
Цитата:
boolean LED_STATE; Она ведь и не нужна снаружи, её назначение - принимать значения HIGH/LOW внутри функции Blink, она за её пределами не используется. Наверное, надо ей присвоить какое-то значение, типа вот так: boolean LED_STATE = LOW; Но это по-моему неважно. Или я не прав? Схема вот, но другой программа, кроме Fritzing, у меня всё равно нет. Цитата:
|
||
22.12.2015, 17:14 | #5 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Вы меня немного не так поняли.
Код:
Последний раз редактировалось Croessmah; 22.12.2015 в 17:21. |
22.12.2015, 17:22 | #6 | |
Новичок
Джуниор
Регистрация: 22.12.2015
Сообщений: 6
|
Цитата:
Я пробовал сейчас компилировать с boolean LED_STATE = LOW; и boolean LED_STATE = HIGH; В первом случае диод быстро-быстро мерцает, но не загорается в полную силу. Субъективно, где-то 10 раз в секунду на 1% интенсивности. Во втором случае вообще не включается, ну или этого не видно. Последний раз редактировалось zhenek_kreker; 22.12.2015 в 17:25. |
|
22.12.2015, 17:25 | #7 | |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Цитата:
|
|
22.12.2015, 17:31 | #8 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Вот еще косяк:
Код:
|
22.12.2015, 17:32 | #9 | |
Новичок
Джуниор
Регистрация: 22.12.2015
Сообщений: 6
|
Цитата:
P.S. В листинге косяк, функция Blink при вызове из setMode имеет формат: Код:
Код:
|
|
22.12.2015, 17:33 | #10 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Со смартфона код плохо видно, но попробуйте сделать LED_STATE статической:
Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Последовательная обработка одинарного и двойного нажатия левой кнопки мышкис | KBO | Помощь студентам | 17 | 18.11.2015 18:02 |
Эффект нажатия кнопки | -Jack- | Общие вопросы Delphi | 6 | 14.03.2014 00:55 |
Обработка нажатия динамической кнопки | Mr_freeman | PHP | 10 | 28.11.2011 23:45 |
Обработка события нажатия кнопки | masm | Microsoft Office Access | 6 | 22.08.2011 11:21 |
Обработка нажатия кнопки на форме | myprog | Microsoft Office Access | 8 | 17.12.2010 22:37 |