Управление одной кнопкой разными режимами ардуино. Подключение кнопки

Вам понадобится

  • Arduino;
  • тактовая кнопка;
  • резистор 10 кОм;
  • макетная плата;
  • соединительные провода.

1 Виды кнопок

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

Со всей этой информацией мы можем добиться нашей приверженности. И Выкл. Нам нужно переименовать имена кнопок. Если мы запускаем программу, интерфейс выглядит следующим образом. Теперь давайте программируем. Мы щелкаем желтым значком слева и выбираем первый вариант. Это устранит ошибку. Нам нужно запрограммировать кнопки. Что мы сделаем, так это то, что когда мы нажимаем кнопку питания, он будет отключен, и будет активна только кнопка питания. Мы дважды щелкаем кнопкой «Включить питание» в интерфейсе проектирования и вставляем программирование.

Некоторые кнопки после нажатия оставляют проводники соединёнными (фиксирующиеся кнопки ), другие - сразу же после отпускания размыкают цепь (нефиксирующиеся кнопки ).

Также кнопки делят на:

  • нормально разомкнутые ,
  • нормально замкнутые .
Первые при нажатии замыкают цепь, вторые - размыкают.

Сейчас нашёл широкое применение тип кнопок, которые называют «тактовые кнопки» . Тактовые - не от слова «такт», а от слова «тактильный», т.к. нажатие хорошо чувствуется пальцами. Но этот ошибочный термин устоялся, и теперь эти кнопки у нас повсеместно так называют. Это кнопки, которые при нажатии замыкают электрическую цепь, а при отпускании - размыкают, т.е. это нефиксирующиеся, нормально разомкнутые кнопки.

Когда вы нажмете кнопку включения, кнопка погаснет и изменит цвет на серый. Кнопка выключения будет активирована и изменится на золото. На кнопке отключения копируется один и тот же код, но выполняются некоторые незначительные изменения. Первый вопрос, который возникает у кого-либо, заключается в том, что у него есть четыре ноги, если он делает, чтобы закрыть схему только двух потоков? и второй вопрос: какой из этих ног вам нужно подключить провода для управления коммутатором. Очевидные вопросы, но для которых нелегко найти ответ, потому что, как всегда, информация, отличная от разброса, обычно не находится на таком уровневом уровне, который вам нужен, и когда они что-то находят, все считают, что вы знаете что-то простое который есть и как работает кнопка, и поэтому никто не тратит время, объясняя это.

2 Дребезг контактов

Кнопка - очень простое и полезное изобретение, служащее для лучшего взаимодействия человека и техники. Но, как и всё в природе, она не идеальна. Проявляется это в том, что при нажатии на кнопку и при её отпускании возникает т.н. «дребезг» ("bounce" по-английски). Это многократное переключение состояния кнопки за короткий промежуток времени (порядка нескольких миллисекунд), прежде чем она примет установившееся состояние. Это нежелательное явление возникает в момент переключения кнопки из-за упругости материалов кнопки или из-за возникающих при электрическом контакте микроискр.

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

Аналогично, если мы соединяем две ноги с левой стороны, ток течет постоянно, поэтому левые боковые ножки также соединены внутри. Наконец, если мы поместим кабели так, чтобы, если один соединяет одну часть левой стороны, другой соединяет одну из правой или наоборот, кнопка работает правильно. И это безразлично, какие ноги мы используем всякий раз, когда кто-то из правой части, а другой один из левых.



В следующей статье мы подробно рассмотрим способы борьбы с «дребезгом» при замыкании и размыкании контактов. А пока что рассмотрим варианты подключения кнопки к Arduino.

3 Некорректное подключение кнопки

Чтобы подключить нормально разомкнутую тактовую кнопку к Arduino, можно поступить самым простым способом: один свободный проводник кнопки соединить с питанием или землёй, другой - с цифровым выводом Arduino. Но, вообще говоря, это неправильно. Дело в том, что в моменты, когда кнопка не замкнута, на цифровом выводе Ардуино будут появляться электромагнитные наводки, и из-за этого возможны ложные срабатывания.

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

Более логичное использование коммутатора - использовать его для указания карты, когда мы хотим начать или закончить определенное действие. Например, когда мы хотим включить свет и когда хотим отключить его. При таком использовании коммутатор как аппаратное обеспечение должен сопровождаться программным обеспечением условной команды типа «Если вы нажмете кнопку, выполните такую ​​вещь»: Тогда первое, что мы должны знать, - это найти карту, на которую мы нажали кнопку.



Чтобы избежать наводок, цифровой вывод обычно подключают через достаточно большой резистор (10 кОм) либо к земле, либо к питанию. В первом случае это называется «схема с подтягивающим резистором» , во втором - «схема со стягивающим резистором» . Давайте рассмотрим каждую из них.

В этой схеме мы можем измерить напряжение между кнопкой и сопротивлением, когда цепь разомкнута, будет 0 или пять вольт в том порядке, в котором мы разместили наши компоненты. В этой схеме мы можем измерить напряжение между кнопкой и сопротивлением, когда цепь разомкнута, будет пять вольт в том порядке, в котором мы поставили наши компоненты.

Вопросы программы

В программе есть пример чего-то очень общего, необходимость дифференцировать выполнение первого цикла, который выполняется в других циклах, потому что в первом случае обычно приходится делать то, что мы повторяем в следующем. Контроль состояний. Мы часто хотим действовать по-разному в зависимости от состояния объекта, на котором мы хотим выполнить действие, холодное или горячее, сухое или влажное, или как в этом случае, вкл. Или выкл. Не всегда это только два возможных состояния, они могут быть множественными состояниями, но всегда имеют конкретное число возможных состояний.

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

Сначала подключим к Arduino кнопку по схеме с подтягивающим резистором. Для этого один контакт кнопки соединим с землёй, второй - с цифровым выходом "2". Цифровой выход "2" также подключим через резистор номиналом 10 кОм к питанию +5 В.



Напишем вот такой скетч для обработки нажатий на кнопку и загрузим в Arduino.

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

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

// Задаём номера выводов: const int buttonPin = 2; const int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); } void loop() { int buttonState = digitalRead(buttonPin); // считываем состояние кнопки if (buttonState == HIGH) { digitalWrite(ledPin, HIGH); // зажигаем светодиод при нажатии кнопки } else { digitalWrite(ledPin, LOW); // гасим светодиод при отпускании кнопки } }

Встроенный светодиод на выводе "13" постоянно горит, пока не нажата кнопка. Т.е. на порте "2" Arduino всегда присутствует высокий логический уровень HIGH. Когда нажимаем кнопку, напряжение на "2" порте принимает состояние LOW, и светодиод гаснет.

В этом случае у меня была проблема, которая заставила меня немного сходить с ума, чтобы решить эту проблему. Функция кнопки, кнопка сигнализирует о желании фазового изменения процесса. Посмотрите короткое видео с характеристиками программы. Моментальный переключатель - это компонент, который соединяет две точки цепи, нажимая ее.

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

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

Теперь соберём схему со стягивающим резистором. Один контакт кнопки соединим с питанием +5 В, второй - с цифровым выходом "2". Цифровой выход "2" подключим через резистор номиналом 10 кОм к земле. Скетч менять не будем.



При включении схемы на цифровом порте "2" Arduino низкий уровень LOW, и светодиод не горит. При нажатии на кнопку на порт "2" поступает высокий уровень HIGH, и светодиод загорается.

Наши ссылки будут выглядеть так. Что-то, что может остаться незамеченным для новичков в электронике, состоит в том, что механические переключатели не работают абсолютно «чистым» способом. Простым способом, когда нажата кнопка, металлические контакты не замыкают цепь сразу из-за микроскопических условий контактных поверхностей, и между состояниями между кратковременными микросекундами между ними возникают небольшие колебания. На следующем рисунке показана эта деталь, представляющая изменение состояния кнопки со временем.

Автоматическая установка библиотеки

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

И Arduino здесь не является исключением, после того, как помигает светодиодом пробует подключать кнопку и управлять с ее помощью миганием этого самого светодиода. Особенно сложного здесь ничего нет, но есть один нюанс, называемый «дребезг контактов». О том как правильно подключать кнопку к Arduino , что такое «дребезг контактов», как этот эффект проявляется и методах борьбы с ним и пойдет сегодня речь.

Код основной функции программы начинается с записи значения переменной яркости. Статус кнопок определяется функцией обновления, если это значение истинно, оно проверяется, нажата ли кнопка. В этом случае он используется для повторения состояния кнопки каждые 250 миллисекунд при нажатии кнопки. Если вы нажмете кнопку, она загорится, если вы нажмете снова, она отключится. Этот резистор называется выталкиванием и служит для шумоподавления и не позволяет приемнику получать сигнал. Постарайтесь обойтись без него, и вы увидите, что он будет работать в полтора раза, а в другой половине он будет бугаром!

Простейшая схема подключения кнопки к микроконтроллеру выглядит следующим образом:

Если ключ S 1 разомкнут (кнопка отпущена), то на цифровом входе D in микроконтроллера мы будем иметь напряжение 5В, соответствующее логической единице. При нажатой кнопке вход D in подключается к земле, что соответствует уровню логического нуля и все напряжение у нас упадет на резисторе R 1 , величину которого выбирают исходя из того, чтобы при нажатой кнопке через него протекал не слишком большой ток (обычно порядка 10÷100 кОм).

Различие происходит справа налево и наоборот, когда кнопка не нажата, клавиша будет открыта, при нажатии она будет закрыта. Какой-то плохой, чтобы объяснить, извините. Третий провод идет от цифрового штыря 2 к одной ноге кнопки. Другая ножка кнопки подключается к источнику питания 5 вольт. Вот почему вам нужен подтягивающий или выпадающий резистор в цепи.

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

Если же просто подключить кнопку между цифровым входом и землей (без резистора R 1 , подключенного к +5В) или между входом и +5В, то в положении, когда кнопка не нажата на цифровом входе микроконтроллера будет присутствовать неопределенное напряжение (может соответствовать уровню 0, а может и 1) и мы бы считывали случайные состояния. Поэтому используется резистор R 1 , который, как говорят, «подтягивает» вход к +5В при отпущенной кнопке.

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

Мы видим четыре ноги, которые соединены парами. Один из способов узнать, какие из них являются частью одной и той же пары, - использовать мультиметр. Но просто соедините две ноги по диагонали, чтобы обязательно взять одну ногу каждой пары, и поэтому нет необходимости в мультиметре. Тем не менее, еще лучше проверить!

Считывая состояние цифрового входа микроконтроллера, мы сможем определить нажата кнопка (состояние логического 0) или же нет (будем получать на входе логическую единицу).

Подключение кнопки к Arduino

Микроконтроллеры Atmel AVR ATmega (на базе которых и строится Arduino ) имеют встроенные программно подключаемые нагрузочные резисторы R н величиной 20 кОм и мы можем воспользоваться ими, упростив схему подключения.

Кнопки, которые нет, но работают одинаково

Этот странный заголовок служит только для того, чтобы привлечь ваше внимание к другим устройствам, которые будут управляться вашим программным обеспечением, например кнопками: эта статья гораздо более общая, чем выглядит! Без сомнения, вы найдете других.

И к чему подключен другой шпиндель? Существует несколько возможностей. И когда контакт разомкнут, «контакт 5» должен быть вытащен на 0 В с резистором. Он называется «сопротивление выпадению». Цель никогда не оставлять шпиндель Ардуино «в воздухе», т.е. не подключен, поскольку он определяется как вход: он тогда будет вести себя как антенна, которая будет захватывать все окружающие паразиты, ваша программа будет плохо себя чувствовать, и вы не поймете, почему.


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

Пример скетча Arduino , который включает и выключает встроенный светодиод на 13 пине, в зависимости от того, нажата или отпущена кнопка, подключенная ко второму пину, используя внутренний нагрузочный резистор:

Это не мой любимый образец! Подтяжное сопротивление - это сопротивление, подобное другим. Это позволяет вам установить цифровой вход в высокое состояние, когда ничего не подключено, чтобы не оставаться «в воздухе», как указано выше. Поэтому мы можем избежать сопротивления.

В этом случае для использования этого подтягивающего резистора запись должна быть объявлена ​​следующим образом. Но между двумя состояниями переход не является мгновенным, и существует фаза подборов, которая длится несколько миллисекунд и которая вызвана ударом между металлическими контактами, несколько эластичными.

void setup() { pinMode(13, OUTPUT); //светодиод на 13 пине pinMode(2, INPUT); //2 пин - в режиме входа. Кнопка подключена к земле. digitalWrite(2, HIGH); //подключаем подтягивающий резистор } void loop() { digitalWrite(13, !digitalRead(2)); // считываем состояние кнопки и переключаем светодиод }

Здесь мы инвертируем значение, считанное с входного порта, путем использование логического НЕ , обозначаемого восклицательным знаком перед функцией digitalRead , так как при нажатой кнопке мы считываем 0, а для включения светодиода в порт нам нужно отправить 1.

Дребезг контактов

Все бы ничего, если бы мы жили в идеальном мире с идеальными кнопками. Реальные механические контакты, которые присутствуют в кнопках никогда не замыкаются и не размыкаются мгновенно. В течении непродолжительного промежутка времени происходит многократное замыкание и размыкание контактов ключа (кнопки) в результате чего на вход микроконтроллера поступает не единичный перепад напряжения, а целая пачка импульсов. Это явление носит название «дребезг контактов».

В примере выше, когда при помощи кнопки мы просто включали и выключали светодиод мы не заметили это, так как включение/выключение светодиода в момент «дребезга» происходило очень быстро и мы просто не увидели это глазом.

Эта библиотека включает следующие методы:

  • Bounce () — инициализация объекта Bounce
  • void interval (unsigned long interval) — устанавливает время антидребезга в миллисекундах
  • void attach (int pin) — устанавливает пин, к которому подключена кнопка и подключает на этом выводе встроенный подтягивающий резистор
  • int update () — поскольку Bounce не использует , вы «обновляете» объект до того, как считываете его состояние и это нужно делать постоянно (например, внутри loop ). Метод update обновляет объект и возвращает TRUE (1), если состояние пина изменилось (кнопка была нажата или же, наоборот, отпущена) и FALSE (0) в противном случае. Вызов метода update внутри loop необходимо производить только один раз.
  • int read () — возвращает обновленное состояние пина

По умолчанию, библиотека Bounce использует интервал стабилизации (stable interval ) для реализации антидребезга. Это проще для понимания и позволяет не знать длительность дребезга.


Параметр stable interval библиотеки Bounce

Определив

#define BOUNCE_LOCK-OUT

#define BOUNCE_LOCK-OUT

в файле Bounce.h можно включить альтернативный метод борьбы с дребезгом. Этот метод позволяет быстрее реагировать на изменение состояния кнопки, однако, требует установить продолжительность дребезга, а эта величина, как я отметил выше увеличивается с течением времени, а значит, потребуется вносить изменения в код, либо установить заведомо большее значение.


Приведу пример использования этой библиотеки:

#include Bounce bouncer = Bounce(); //создаем экземпляр класса Bounce void setup() { pinMode(2 ,INPUT); // кнопка на пине 2 digitalWrite(2 ,HIGH); // подключаем встроенный подтягивающий резистор bouncer .attach(2); // устанавливаем кнопку bouncer .interval(5); // устанавливаем параметр stable interval = 5 мс Serial.begin(9600); //установка Serial-порта на скорость 9600 бит/сек } void loop() { if (bouncer.update()) { //если произошло событие if (bouncer.read()==0) { //если кнопка нажата Serial.println("pressed"); //вывод сообщения о нажатии } else Serial.println("released"); //вывод сообщения об отпускании } }

#include

Bounce bouncer = Bounce () ; //создаем экземпляр класса Bounce

void setup ()

pinMode (2 , INPUT ) ; // кнопка на пине 2

digitalWrite (2 , HIGH ) ; // подключаем встроенный подтягивающий резистор

bouncer . attach (2 ) ; // устанавливаем кнопку

bouncer . interval (5 ) ; // устанавливаем параметр stable interval = 5 мс

Serial . begin (9600 ) ; //установка Serial-порта на скорость 9600 бит/сек

void loop ()

if (bouncer . update () )

{ //если произошло событие

if (bouncer . read () == 0 )

Вверх