Библиотека кнопки для Arduino

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

Библиотека кнопки для Arduino

Сообщение lorry » 04 ноя 2015, 03:37

Всем привет!
Делаем не большой проект на Arduino и пришлось написать собственную библиотеку для работы с кнопкой.
Казалось бы - такая банальщина! Масса примеров в нете для работы с кнопкой, а вот именно того функционала, что нужен нам не нашел ни в одном из них. В итоге пришлось сесть и написать собственную библиотеку для кнопки. Библиотека умеет гасить дребезг контактов, при чем без задержки основной программы (т.е. без использования delay и подобных функций), считает количество нажатий, так же имеется триггер и импульсный флажок (для каждой итерации цикла) на нажатие и отпускание кнопки. При создании экземпляра кнопки указывается пин к которому подключена кнопка, способ подключения кнопки (нормально замкнутая/разомкнутая), время задержки для гашения дребезга.

Подключение библиотеки стандартное для Arduino.

Пример работы с библиотекой:
Код: Выделить всё
#include <button_coin.h>

// Создать экземпляр класса button
button_coin button(2, 0, 100); // параметры:
//    1-й параметр - номер пина к которому подключена кнопка (0-13)
//    2-й параметр - режим работы кнопки (0-нормально замкнутая на землю; 1-нормальна замкнутая на +5В через сопротивление 1КОм, сопротивление можно не подключать)
//    3-й параметр - время задержки дребезга в миллисекундах

void setup(void) {
  Serial.begin(9600);
}

void loop () {
  button.but(); // обработка кнопки
  Serial.print(button.cur); // текущее состояние кнопки
  Serial.print("  ");
  Serial.print(button.prev); // предыдущее состояние кнопки
  Serial.print("  ");
  Serial.print(button.trigger_push); // триггер кнопки на нажатие
  Serial.print("  ");
  Serial.print(button.trigger_let); // триггер кнопки на отпускание
  Serial.print("  ");
  Serial.print(button.coint); // счетчик нажатий кнопки с запуска библиотеки
  Serial.print("  ");
  Serial.print(button.con); // момент нажатия кнопки
  Serial.print("  ");
  Serial.println(button.discon); // момент отпускания кнопки

}


Этот пример работает с кнопкой подключенной на pin2, кнопка должна быть нормально замкнута на общий провод. Данный пример выводит все переменные экземпляра button в окне монитора порта. Используемый для кнопки вывод подключается с внутренним подтягивающим резистором, так что внешнее сопротивление на +5В можно не подключать.

Библиотека называется button_coin и реализует следующие функции:
1. *.cur - текущее состояние кнопки, возвращает значение нажата или отжата кнопка;
2. *.prev - предыдущее состояние кнопки, возвращает значение состояния кнопки на предыдущей итерации цикла;
3. *.trigger_push - триггер кнопки на нажатие, меняет свое состояние с 1 в 0 и обратно при каждом нажатии кнопки;
4. *.trigger_let - триггер кнопки на отпускание, меняет свое состояние с 1 в 0 и обратно при каждом отпускании кнопки;
5. *.coint - счетчик нажатий кнопки с запуска библиотеки, считает сколько раз была нажата кнопка;
6. *.con - момент нажатия кнопки, на текущей итерации возвращает 1 в момент когда нажата кнопка;
7. *.discon - момент отпускания кнопки, на текущей итерации возвращает 1 в момент когда кнопка отжата.

Все выше указанные переменные экземпляра кнопки доступны как на чтение так и на запись в них значений. Так что вы можете самостоятельно изменить значение любой переменной в ходе выполнения вашего скетча (если конечно в этом есть необходимость).
Так как библиотека не использует прерывания (это сделано специально из за того что прерывания в нашем проекте уже заняты), то если при использовании библиотеки button_coin в вашем скетче происходят задержки более чем время нажатия кнопки, то возможны пропуски в отработке нажатий.
Button_coin.rar
(2.52 КиБ) Скачиваний: 0

Кому может пригодиться скачивайте, пользуйтесь. Если есть вопросы задавайте.
Последний раз редактировалось lorry 07 ноя 2015, 03:51, всего редактировалось 3 раз(а).
Аватара пользователя
lorry
 
Сообщения: 448
Зарегистрирован: 04 фев 2014, 13:53
Откуда: Комсомольск-на-Амуре
прог. языки: машинные коды
ФИО: Иван Иваныч

Re: Библиотека кнопки для Arduino

Сообщение lorry » 04 ноя 2015, 09:28

В ближайшее время опубликуем сам проект. Это так называемая "Самая бесполезная коробка".
Аватара пользователя
lorry
 
Сообщения: 448
Зарегистрирован: 04 фев 2014, 13:53
Откуда: Комсомольск-на-Амуре
прог. языки: машинные коды
ФИО: Иван Иваныч

Re: Библиотека кнопки для Arduino

Сообщение lorry » 05 ноя 2015, 23:29

Проект с использованием данной библиотеки опубликован на робофоруме.
Вот ссылка:

forum10/topic15936.html
Аватара пользователя
lorry
 
Сообщения: 448
Зарегистрирован: 04 фев 2014, 13:53
Откуда: Комсомольск-на-Амуре
прог. языки: машинные коды
ФИО: Иван Иваныч

Re: Библиотека кнопки для Arduino

Сообщение 14k » 16 мар 2017, 13:11

Выглядит привлекательно! :)
Пока не имею возможности испытать

Не мы могли бы Вы привести пример какой-нибудь реальной задачи/алгоритма, вместе с кодом?
14k
 
Сообщения: 1
Зарегистрирован: 16 мар 2017, 10:22


Вернуться в Arduino и другие Xduino

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5