Як на arduino управляти за допомогою однієї кнопки двома навантаженнями

19

Використовуючи програмне забезпечення, можна однією кнопкою включити або включити світло або виконати іншу функцію (завдання). Але що робити, якщо є дві функції, але тільки одна кнопка? багато хто використовує таку кнопку, наприклад, на смартфонах. Це коротке натискання і довге натискання (натискаємо і утримуємо).

У даній невеликій статті майстер розповість, як однією кнопкою управляти двома навантаженнями, а в якості бонусу — управління шістьма навантаженнями, двома кнопками.

Спочатку трохи теорії. Використовувати кнопку для включення світла дуже просто: якщо кнопка показує високе значення (при натисканні), то можна включити світлодіод, також записавши вихідний контакт, до якого він прикріплений. Як тільки кнопка покаже низьке значення, можна знову встановити вихідний контакт на низьке значення, щоб вимкнути світлодіод.

Однак для цієї настройки потрібно включити або вимкнути світлодіод. Це сама по собі є проблемою для простого прикладу вище, оскільки функція циклу в arduino повторюється сотні разів на секунду. Навіть найшвидше натискання може включати і вимикати його багато-багато разів. Ця перша проблема буде вирішена за допомогою одного або двох простих логічних значень.

Друга проблема-це функція тривалого натискання. Як запускається ця функція, не викликаючи спочатку функцію короткого натискання? відповідь проста. Функція тривалого натискання спрацьовує під час натискання кнопки, функція короткого натискання спрацьовує після того, як кнопка відпущена. Це можна спостерігати на смартфоні, відпускаючи об’єкт на екрані безпосередньо перед активацією функції тривалого натискання.апаратне забезпечення дуже просте. Аноди світлодіодів підключаються до контактів 12 і 13 arduino, потім катоди заземлюються.кнопка підключається до виходу 5 в і контакту 3 на arduino, а потім заземлюється через резистор 10 ком.

Тепер детально розглянемо кожен крок коду .спочатку подивимося на змінні, необхідні для цієї настройки, починаючи з прямих посилань на контакти.

int led1 = 12;int led2 = 13; int button = 3;

Далі кілька логічних значень. Вони будуть використовуватися для включення або виключення стану світлодіодів.

boolean led1state = false; boolean led2state = false;

Ще два логічних значення. Перше буде змінено в залежності від стану кнопки; це дозволить коду виявити перший цикл після натискання або відпускання кнопки. Другий фрагмент буде виконувати дві функції: він дозволить коду зупинити активацію тривалого натискання більше одного разу і зупинить активацію функції короткого натискання, коли відпускається кнопка після тривалого натискання.

boolean buttonactive = false;boolean longpressactive = false;

Нарешті, дві останні змінні. Перша змінна використовується для запису часу першого натискання кнопки. Друга змінна-це проміжок часу (в мілісекундах), протягом якого потрібно утримувати кнопку натиснутою, щоб активувати функцію тривалого натискання. Змінну можна змінити за своїм вибором.

long buttontimer = 0; long longpresstime = 250;

Що стосується настройки, просто встановлюємо режими виведення.

void setup () {pinmode (led1, output); pinmode(led2, output); pinmode(button, input);}

Тепер про цикл. Перше, що зробить програма, — це прочитає стан кнопки. Це дасть наведений нижче код і дозволить створювати функції як для не натиснутого, так і для натиснутого стану, (функція короткого натискання відбувається при відпуску кнопки).

if(digitalread (button) == high) {//button pressed} else {//button not pressed}

У розділі, присвяченому натиснутій кнопці, перше, що потрібно зробити, це протестувати змінну buttonactive при налаштуванні це значення дорівнює false. Якщо в даний момент це значення дорівнює false, це означає, що програма виявляє, що кнопка натиснута в перший раз. Це відбувається тому, що після прочитання false відразу ж встановлюється значення true, і тільки відпустивши кнопку, можна повернути значення false. Також записуємо час першого натискання кнопки.

if (buttonactive == false) { buttonactive = true; buttontimer = millis ();}

Наступним кроком у розділі, присвяченому натисненню кнопки, є перевірка того, як довго утримувалася кнопка. Перевіряється поточний час, віднімається час першого натискання в мілісекундах і порівнюється з бажаним проміжком часу до активації тривалого натискання.

Також перевіряється, що логічне значення longpressactive має значення false, тому що після активації функції тривалого натискання це логічне значення встановиться в значення true, щоб зупинити повторну активацію. Після того, як кнопка утримується протягом бажаного часу, змінитися стан логічного значення led1state, яке, в свою чергу, змінить контакт, до якого підключений світлодіод, на high або low відповідно.

if ((millis() — buttontimer>longpresstime)&&(longpressactive == false)) { longpressactive = true; led1state = !led1state; digitalwrite (led1, led1state);}

Тепер про кнопку не натиснутою частини коду. Насамперед перевіряється, чи істинно логічне значення buttonactive. Якщо встановлено значення true, код зациклюється вперше з моменту відпускання кнопки. Потім він знову встановить логічне значення в false, щоб дозволити наведеному вище коду виявити повторне натискання кнопки.

if (buttonactive == true) { buttonactive = false;}

Якщо було активовано довге натискання, встановлюється для longpressactive значення false. Якщо функція не була активована, то змінюється стан другого світлодіода, як це було зроблено з першим.

if (longpressactive == true) { longpressactive = false;} else { led2state = !led2state; digitalwrite(led2, led2state);}

Повний код можна завантажити нижче.

показати / приховати текстщо, якщо буде дві кнопки? тоді є можливість управляти 6 навантаженнямикратковременное натискання кнопки 1кратковременное натискання кнопки 2кратковременное натискання кнопки 1 і 2довременное натискання кнопки 1длітельное натискання кнопки 2длітельное натискання кнопки 1 і 2програма працює так само, як і перший код, з деякими помітними змінами.по-перше, більше світлодіодів, що означає, що є більше змінних, і, звичайно ж, додаткова кнопка. Але найбільша зміна стосується моменту, коли активується довге або коротке натискання. Після досягнення будь-якої з цих двох точок замість включення або виключення світлодіода є три можливих дії для кожної функції. В результаті один з шести можливих світлодіодів загориться або згасне. Щоб визначити, яку дію зробити, перевіряється стан кожної кнопки і цих точок.код для двох кнопок можна завантажити нижче.можна і далі розвивати дану тему. Наприклад, установка трьох кнопок дозволить управляти 14-ю навантаженнями, а установка чотирьох-30-ю. Джерело (source)