Arcade PUB
  • Главная
  • Уроки
  • Датчики
  • Проекты
  • Справочник языка Ардуино
  • Справочник
  • Видео
  • Контакты
  • Поддержать
Уроки  /  2 апреля, 2020

Двойной клик. Урок 9. Ардуино

by valentino
Разные кнопки и Ардуино
Разные кнопки и Ардуино

Привет! Как вы считаете, много ли функций может выполнять одна кнопка? На самом деле, очень много. Кажется даже, столько, сколько нужно. Давайте посмотрим, как можно запрограммировать кнопку более функционально и обработаем на Ардуино двойной клик по кнопке.

Содержание

  • 1 Чтобы выполнить этот урок нам понадобятся.
  • 2 Схема и программа
  • 3 Двойной клик
  • 4 Полный текст программы
  • 5 Заключение
  • 6 Похожее

В предыдущих уроках мы уже рассматривали подключение кнопок и подавление дребезга. Сейчас мы модифицируем функцию подавления дребезга так, чтобы подсчитывать количество кликов по кнопке. Так что, посмотрите предыдущие уроки, если вы пропустили их или уже забыли.

Дребезг кнопки. Урок 2.3. Ардуино

Чтобы выполнить этот урок нам понадобятся.

  • Ардуино UNO
  • Макетная плата
  • Перемычки
  • Резистор номиналом 220 Ом
  • Кнопка
  • Кабель USB

Схема и программа

Как видно на схеме, подключим кнопку через стягивающий резистор, как мы уже это делали ранее.

Подключение кнопки через стягивающий резистор
Подключение кнопки через стягивающий резистор

Пожалуй, подключать светодиод сегодня не обязательно. Давайте вспомним, как выводить данные в com порт и используем его вместо светодиодов.

Задача на сегодня будет такой. Запрограммировать Ардуино на обработку нажатий кнопки. Бесспорно. нажатия могут быть разными.

  • Простое короткое нажатие на кнопку
  • Двойное нажатие на кнопку
  • Неопределенное количество нажатий

Логично будет объединить все пункты задачи и разработать логику программы так, чтобы она подсчитывала количество кликов и выполняла определенные действия в зависимости от него. В том числе и двойной клик и тройной клик.

Двойной клик

Как и в функции debounce нам необходимо подсчитывать время между нажатием на кнопку, чтобы определить количество кликов.

Для этого внутри цикла loop() проверяем состояние контакта Ардуино, на котором подключена кнопка. Если состояние изменилось, то на переменную счетчика повесим таймер millis()

boolean reading = digitalRead(BUTTON_PIN);

if (reading && !lastReading){
    onTime = millis();

Если кнопка была отпущена, и нажатие было достаточно коротким, то посчитаем его за клик. Причем, снова установим таймер и засечем время между нажатиями кнопки в том случае, если их будет много.

  if (!reading && lastReading){
    if (((millis() - onTime) > bounceTime)){
      if ((millis() - lastSwitchTime) >= doubleTime){
        lastSwitchTime = millis();
        buttonSingle = true;
        i=1;
      } else {
        i++;
        lastSwitchTime = millis();
        buttonSingle = false;
        buttonMulti = true;
      }
    }

Счетчик i увеличивается каждый раз, когда клик по кнопке происходит быстрее, чем установленный лимит времени. Переменную этого лимита также можно настроить вручную.

Не забудем обновить значение предыдущего состояния кнопки в конце цикла.

lastReading = reading;

Мы определили, было ли нажатие на кнопку, а в счетчике i записали количество нажатий. Если эти условия выполнялись, то соответствующие переменные находятся в состоянии true. Обработаем их.

  if (buttonSingle && (millis() - lastSwitchTime) > doubleTime){
    isButtonSingle();
  }
  if (buttonMulti && (millis() - lastSwitchTime) > doubleTime){
    isButtonMulti(i);
  }

Таким образом мы вызываем соответствующие функции. И передаем в функцию мультиклика количество этих кликов по кнопке.

Теперь нам осталось только написать функции, которые будут выполнять некие действия в зависимости от количество нажатий.

void isButtonSingle(){
    buttonMulti = false;
    buttonSingle = false;
    Serial.println(1);
}
void isButtonMulti( int count ){
    buttonSingle = false;
    buttonMulti = false;
    Serial.println(count);
}

Как видно из кода, в данном случае мы просто выводим счетчики в монитор последовательного порта. Но не забудьте сбросить управляющие переменные на false, чтобы не испортить управление программой в следующем цикле.

А так же объявить переменные для первоначальной настройки программы.

Монитор последовательного порта и нажатия на кнопку
Монитор последовательного порта и нажатия на кнопку

Полный текст программы

#define BUTTON_PIN 2

int bounceTime = 10;          // задержка для подавления дребезга
int doubleTime = 500;         // время, в течение которого нажатия можно считать двойным
int i = 0;

boolean lastReading = false;  // флаг предыдущего состояния кнопки
boolean buttonSingle = false; // флаг состояния "краткое нажатие"
boolean buttonMulti = false; // флаг состояния "двойное нажатие"

long onTime = 0;              // переменная обработки временного интервала
long lastSwitchTime = 0;      // переменная времени предыдущего переключения состояния

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

void loop(){
  boolean reading = digitalRead(BUTTON_PIN);

  // проверка первичного нажатия
  if (reading && !lastReading){
    onTime = millis();
  }
  
  if (!reading && lastReading){
    if (((millis() - onTime) > bounceTime)){
      if ((millis() - lastSwitchTime) >= doubleTime){
        lastSwitchTime = millis();
        buttonSingle = true;
        i=1;
      } else {
        i++;
        lastSwitchTime = millis();
        buttonSingle = false;
        buttonMulti = true;
      }
    }
  }
  
  lastReading = reading;
  
  if (buttonSingle && (millis() - lastSwitchTime) > doubleTime){
    isButtonSingle();
  }
  if (buttonMulti && (millis() - lastSwitchTime) > doubleTime){
    isButtonMulti(i);
  }
}

void isButtonSingle(){
    buttonMulti = false;
    buttonSingle = false;
    Serial.println(1);
}
void isButtonMulti( int count ){
    buttonSingle = false;
    buttonMulti = false;
    Serial.println(count);
}

Заключение

Мы научились использовать кнопку подключенную к Ардуино для считывания двойного клика и вообще любого количество кликов. Теперь мы можем настроить управление любым устройством на Ардуино только лишь одной кнопкой. В следующий раз попробуем еще больше увеличить функционал и запрограммируем долгие нажатия с определением длительности нажатия кнопки.

Похожее

Tags

  • Программирование

Навигация по записям

Пианино на Ардуино. Проекты. Ардуино.
Долгое нажатие на кнопку. Урок 10. Ардуино

Share your thoughts Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Новое видео на канале

https://youtu.be/bvzX-edTdS0

Свежие записи

  • Много кнопок на одном пине. Урок 20. Ардуино
  • Как управлять Ардуино ДУ пультом. Проекты. Ардуино
  • ИК приемник KY-022. Датчики. Ардуино
  • Фоторезистор KY-018. Датчики. Ардуино
  • Пульсометр KY-039. Датчики. Ардуино

Метки

  • Bluetooth
  • RGB Светодиоды
  • WIFI
  • Двигатели
  • Звук
  • Игры
  • Интернет вещей
  • Лего
  • Основное
  • Программирование
  • Уроки

Купить стартовый набор Ардуино UNO на Aliexpress

Стартовый набор Ардуино Уно

Купить набор датчиков для Ардуино 45 штук на Aliexpress

набор датчиков для Ардуино

arcadepub

Hi there! How to control button debounce without c Hi there! How to control button debounce without code. Lets see.

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Hello there! Let's write a program to control ard Hello there!  Let's write a program to control arduino by ir.

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Hey! How are you doing? How do you think, we can c Hey! How are you doing? How do you think, we can control arduino program by ir? I bet we can. 

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Hello! There is a second video on my youtube chann Hello! There is a second video on my youtube channel. I've just added subtitles, so you can see how to use if and else structures and for() loop in arduino program. Enjoy, and do NOT forget to subscribe. 
https://youtu.be/8AHfAQyNAqU

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #youtube
Hi there! How is it going? Photo resistor and lase Hi there! How is it going? Photo resistor and laser are here. Look at graphics and try to understand how it works!

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Here is ky-039 heart beat arduino module. Do you l Here is ky-039 heart beat arduino module. Do you like it? Write in the comments below!

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Its Magic lights with ky-027 arduino module. Do yo Its Magic lights with ky-027 arduino module. Do you like it?  Write in the comments below!

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Arduino and #laser are together. Please subscribe Arduino and #laser are together.

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Do you know how gyroscope modul works with arduino Do you know how gyroscope modul works with arduino? 

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #rfid #arduinoproject
Do you know how you can use rfid module with ardui Do you know how you can use rfid module with arduino? 

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #rfid #arduinoproject
It is almost done Please subscribe to my youtube It is almost done

Please subscribe to my youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #flower #autowatering #arduinoproject #robot #spiderbot
Begin to make a spider bot. Please subscribe to Begin to make a spider bot. 

Please subscribe to my youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #flower #autowatering #arduinoproject #robot #spiderbot
Hello folks! There are 1000 of us on my instagram Hello folks! There are 1000 of us on my instagram account. And i want to tell thanks to each of you!
I'd like to tell more about this project. And that's why i made a video on youtube channel. 
It is in russian, but i have added english subtitles. 
I'm gonna tell you about many intriguing Arduino projects.
So, please, take a look at video. And subscribe to my youtube channel as well. 

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #flower #autowatering
How can we know that flower needs to be watered. L How can we know that flower needs to be watered. Like and Subscribe to know more.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #flower #autowatering
How to turn light on by clapping. Like and Subscri How to turn light on by clapping. Like and Subscribe to know more.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit
Is it possible to turn light on over the internet? Is it possible to turn light on over the internet? Like and Subscribe to know more.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit
Is communicating vessels for light impossible? Pro Is communicating vessels for light impossible? Probably not. Like and Subscribe to know more.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit
#ky-033 line tracking #arduino sensor. How does #ky-033 line tracking #arduino sensor. How does it work? It is really simple to know. Like and Subscribe to know more.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit
Do you want to know how #wifi module #esp01 for #a Do you want to know how #wifi module #esp01 for #arduino works? Write in the comments below and subscribe.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit
#ky-036 metal touch #arduino sensor. How does it w #ky-036 metal touch #arduino sensor. How does it work? It is really simple to know.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit
Загрузи больше…

ArcadePUB @ 2020

arduino@arcadepub.ru

На сайте вы найдете уроки, проекты и обзоры всего, что связано с ардуино.

Аркадные игры и автоматы.

DIY проекты

Метки

  • Bluetooth
  • RGB Светодиоды
  • WIFI
  • Двигатели
  • Звук
  • Игры
  • Интернет вещей
  • Лего
  • Основное
  • Программирование
  • Уроки

Свежие записи

  • Много кнопок на одном пине. Урок 20. Ардуино
  • Как управлять Ардуино ДУ пультом. Проекты. Ардуино
  • ИК приемник KY-022. Датчики. Ардуино
  • Фоторезистор KY-018. Датчики. Ардуино
  • Пульсометр KY-039. Датчики. Ардуино

Навигация

  • Главная
  • Уроки
  • Датчики
  • Проекты
  • Справочник языка Ардуино
  • Справочник
  • Видео
  • Контакты
  • Поддержать

Дополнительно

Поддержать

Контакты

YouTube
Patreon
VK
Instagram
Twitter