roboforum.ru

Технический форум по робототехнике.
Текущее время: 26 ноя 2024, 17:20

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Библиотека кнопки для Arduino
СообщениеДобавлено: 04 ноя 2015, 03:37 
Не в сети
Аватара пользователя

Зарегистрирован: 04 фев 2014, 13:53
Сообщения: 448
Откуда: Комсомольск-на-Амуре
прог. языки: машинные коды
ФИО: Иван Иваныч
Всем привет!
Делаем не большой проект на 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 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека кнопки для Arduino
СообщениеДобавлено: 04 ноя 2015, 09:28 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека кнопки для Arduino
СообщениеДобавлено: 05 ноя 2015, 23:29 
Не в сети
Аватара пользователя

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

forum10/topic15936.html


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека кнопки для Arduino
СообщениеДобавлено: 16 мар 2017, 13:11 
Не в сети

Зарегистрирован: 16 мар 2017, 10:22
Сообщения: 1
Выглядит привлекательно! :)
Пока не имею возможности испытать

Не мы могли бы Вы привести пример какой-нибудь реальной задачи/алгоритма, вместе с кодом?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO