Поиск по этому блогу

31 окт. 2016 г.

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



Всем привет!

Делаем не большой проект на Arduino и пришлось написать собственную библиотеку для работы с кнопкой.

Казалось бы - такая банальщина! Масса примеров в нете для работы с кнопкой, а вот именно того функционала, что нужен нам не нашел ни в одном из них. В итоге пришлось сесть и написать собственную библиотеку для кнопки. Библиотека умеет гасить дребезг контактов, при чем без задержки основной программы (т.е. без использования delay и подобных функций), считает количество нажатий, так же имеется триггер и импульсный флажок (для каждой итерации цикла) на нажатие и отпускание кнопки. При создании экземпляра кнопки указывается пин к которому подключена кнопка, способ подключения кнопки (нормально замкнутая/разомкнутая), время задержки для гашения дребезга.
Подключение библиотеки стандартное для Arduino.
#include // Создать экземпляр класса button button_coin button(12, 0, 50); // параметры: // 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.println(" "); // 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