Андрей Смирнов
Время чтения: ~26 мин.
Просмотров: 125

Как подключить кнопку к arduino

Definições de níveis lógicos: HIGH e LOW

Quando lendo-se ou escrevendo-se o estado de um pino digital há apenas dois valores possíveis que esse pino pode assumir: e .

HIGH

O significado de (em relação a um pino) depende se o pino está configurado como entrada ou saída ( ou ). Qaundo um pino é configurado como com pinMode(), e lido com digitalRead(), o Arduino (ATmega) irá retornar se:

  • uma tensão maior que 3.0V está presente no pino (em placas 5V)

  • uma tensão maior que 2.0V está presente no pino (em placas 3.3V)

Um pino pode também ser configurado como entrada (INPUT) com , e posteriormente colocado em HIGH com digitalWrite(). Isso irá ativar os resistores de 20K internos para pullup, o que irá forçar o estado do pino para a menos que esse seja forçado para por um circuito externo. Isso é exatamente como a opção funciona, sendo descrita abaixo em mais detalhes.

Quando um pino é configurado como saída (OUTPUT) com , e colocado em estado com , a tensão no pino é:

  • 5 volts (em placas 5V)

  • 3.3 volts (em placas 3.3V)

Nesse estado, o pino pode fornecer corrente (ver limites para sua placa, geralmente 40.0mA). Isso pode ser usado, por exemplo, para acender um LED que está conecatdo ao ground através de um resistor limitador de corrente.

LOW

O significado de depende também se o pino está configurado como entrada ou saída ( ou ). Qaundo um pino é configurado como com , e lido com , o Arduino (ATmega) irá retornar se:

  • uma tensão menor que 1.5V está presente no pino (em placas 5V)

  • uma tensão menor que 1.0V (aproxidamente) está presente no pino (em placas 3.3V)

Quando um pino é configurado como com , e colocado em estado com , a tensão no pino é 0 volts (tanto em placas de 5V como 3.3V boards). Nesse estado o pino pode absorver corrente, o que pode ser usado, por exemplo, para acender um LED conectado através de um resistor limitador de corrente aos +5 volts (ou +3.3 volts).

Кнопка ардуино

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

Тактовые кнопки и кнопки-переключатели

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

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

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

Вариантов различных кнопок великое множество, это действительно один из самых распространенных видов электронных компонентов.

Кнопки ардуино для простых проектов

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

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

Для удобства работы в комплекте с тактовой кнопкой обычно идет пластмассовый колпачок какого-то цвета, он достаточно очевидно надевается на кнопку и придает проекту менее хакерский вид.

Как определить полярность светодиода

На данный момент большинство светодиодов делают так, чтоб упростить процесс определения полярности. У светодиода есть две ножки, одна из которых будет длиннее другой. Длинная ножка – это плюс (анод). Короткая ножка — это минус (катод). Но что же делать если выводы светодиода одинакового размера? Иногда вывод катода отмечают точкой или небольшим срезом на корпусе. Также узнать полярность можно путём внимательного рассмотрения кристалла. Плюс имеет гораздо меньший размер внутри линзы по сравнению с минусом. Контакт минуса, в свою очередь, напоминает флажок, на котором размещается кристалл. Также можно определить полярность источником питания. Для этого необходимо источник тока (с напряжением от 3 до 6 вольт), резистор (с сопротивлением 220 – 470 Ом) и сам светодиод. Сначала соедините одну ножку светодиода с резистором. Затем коснитесь светодиодом контактов источника питания. Дотрагиваясь анодом к плюсу, а катодом к минусу, светодиод будет светиться (если он исправен).

Pinlevel: HIGH und LOW

Wenn von einem Digitalpin gelesen oder auf einen Digitalpin geschrieben wird, gibt es nur 2 Möglichkeiten: und .

HIGH

Die Bedeutung von (In Bezug auf den Pin) ist unterschiedlich, je nachdem, ob der Pin als oder definiert ist.
Wenn ein Pin als mit definiert wird und mit
gelesen wird, gibt der Arduino (ATmega) zurück, wenn:

  • eine Spannung größer als 3,0V an dem Pin anliegt (5V-Boards)

  • eine Spannung größer als 2,0V an dem Pin anliegt (3,3V-Boards)

Ein Pin kann mit auch als definiert werden und mit
auf gesetzt werden. Das aktiviert den internen 20K-Pullup-Widerstand,
welcher den Inputpin auf zieht, bis dieser von extern wieder auf gesetzt wird. So funktioniert auch . Die genaue
Definition davon findest du weiter unten.

Wenn ein Pin mit als definiert wird und mit auf gesetzt wird, liegen an dem Pin:

  • 5V an (5V-Boards)

  • 3,3V an (3,3V-Boards)

In diesem Zustand kann z.B. eine LED angeschaltet werden, die über einen Vorschaltwiderstand auf Masse verbunden ist.

LOW

Die Bedeutung von (In Bezug auf den Pin) ist ebenfalls unterschiedlich, je nachdem, ob der Pin als oder definiert ist.
Wenn ein Pin als mit definiert wird und mit
gelesen wird, gibt der Arduino (ATmega) zurück, wenn:

  • eine Spannung kleiner als 1,5V an dem Pin anliegt (5V-Boards)

  • eine Spannung kleiner als 1,0V (circa) an dem Pin anliegt (3,3V-Boards)

Wenn ein Pin mit als definiert wird und mit
auf gesetzt wird, liegen an ihm 0V an (Auf 5V- und 3,3V-Boards).

In diesem Zustand kann z.B. eine LED ausgeschaltet werden, die über einen Vorschaltwiderstand auf Masse verbunden ist.

1 Виды кнопок

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

Виды кнопок, их внешний вид и обозначение на электрической схеме

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

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

  • нормально разомкнутые,
  • нормально замкнутые.

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

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

В этом примеры мы рассмотрим подключение кнопки к контроллеру Arduino. При нажатие кнопки мы будем зажигать встроенный светодиод. Большинство плат Arduino имеют встроенный SMT светодиод, подключенный к выходу 13 (pin 13).

Подключение

Подключаем выход питания (5V) и землю (Gnd), красным и черным проводом соответственно к макетной плате. Обычно на макетных платах для питания и земли используют крайние ряды контактов, как показано на рисунке. Третьим синим проводом мы соединяем цифровой пин 2 контроллера Arduino к контакту тактовой кнопки. К этому же контакту, либо к контакту, постоянно соединенному с ней в 4х штырковом исполнении, подключаем подтягивающий резистор 10 кОм, который в свою очередь соединяем с землей. Другой выход кнопки соединяем с питанием 5 В.

Когда тактовая кнопка не нажата, выход 2 подключен только к земле через подтягивающий резистор и на этом входе будет считываться LOW. А когда кнопка нажата появляется контакт между входом 2 и питанием 5В, и считываться будет HIGH.

Замечание: Чаще всего тактовые кнопки имеют по два контакта с каждой стороны так, как это показано на рисунке подключение. При этом по форме кнопка почти квадратная

ВАЖНО не перепутать при подключении какие контакты соединены, а какие замыкаются при нажатие. Лучше всего прозвонить кнопку если не уверены

Можно также подключить кнопку наоборот — через подтягивающий резистор к питанию и через кнопку к земле. Тогда с входа будет считваться HIGH, а при нажатие кнопки LOW.

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

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

4 Управление яркостью и цветом светодиодас помощью аналогового джойстика и Arduino

Обычно джойстик используют для управления электродвигателями. Но почему бы не использовать его, например, для управления яркостью светодиода? Давайте подключим по приведённой схеме RGB светодиод (или три обычных светодиода) к цифровым портам 9, 10 и 11 Arduino, не забывая, конечно, о резисторах.

Подключение RGB светодиода и джойстика к Arduino

Будем менять яркость соответствующих цветов при изменении положения джойстика по осям, как показано на рисунке.

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

Диаграмма распределения яркости красного, синего и зелёного каналов светодиода в зависимости от положения ручки джойстика

Ориентируясь на приведённую диаграмму, напишем скетч управления Arduino яркостью RGB светодиода с помощью джойстика.

const int pinRed    = 9;
const int pinGreen  = 10;
const int pinBlue   = 11;
const int swPin = 8; 
const int pinX      = A1; // X 
const int pinY      = A2; // Y 
const int ledPin    = 13;
boolean ledOn = false;  // текущее состояние кнопки
boolean prevSw = false; // предыдущее состояние кнопки

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(pinRed, OUTPUT);
  pinMode(pinGreen, OUTPUT);
  pinMode(pinBlue, OUTPUT);
  pinMode(pinX, INPUT);
  pinMode(pinY, INPUT);
  pinMode(swPin, INPUT);  
  digitalWrite(swPin, HIGH); // включаем встроенный подтягивающий резистор
}

void loop() {
  if (isLedOn()) freeMode(); // если нажата кнопка и горит светодиод на пине 13, включаем режим "фонарик"
  else discoMode(); // иначе включаем "цветомузыку"
}

boolean isLedOn() { // Определяем нажатие кнопки
  if (digitalRead(swPin) == HIGH && prevSw == LOW) {
    ledOn = !ledOn;
    prevSw = HIGH;
  }
  else  prevSw = digitalRead(swPin); 
  digitalWrite(ledPin, ledOn); // включаем светодиод на пине 13
  return ledOn;
}

void freeMode() { // Режим "фонарик"
  int X = analogRead(pinX); // считываем положение джойстика
  int Y = analogRead(pinY);
  int RED = map(Y, 512, 1023, 0, 255); // маппинг значений
  int GREEN = map(X, 512, 1023, 0, 255);
  int BLUE = map(X, 511, 0, 0, 255);
  analogWrite(pinRed, RED);     // включение каналов R,G,B
  analogWrite(pinGreen, GREEN);
  analogWrite(pinBlue, BLUE);
}

void discoMode() { // Режим "цветомузыка"
    for (int i=0; i }

Сначала объявим соответствие пинов и две переменные – ledOn и prevSw – для работы с кнопкой. В процедуре setup() назначим пинам функции и подключим к пину кнопки подтягивающий резистор командой digitalWrite(swPin, HIGH).

В цикле loop() определяем нажатие кнопки джойстика. При нажатии на кнопку переключаем режимы работы между режимом «фонарика» и режимом «цветомузыки».

В режиме freeMode() управляем яркостью светодиодов с помощью наклона джойстика в разные стороны: чем сильнее наклон по оси, тем ярче светит соответствующий цвет. Причём преобразование значений берёт на себя функция map(значение, отНижнего, отВерхнего, кНижнему, кВерхнему).

Функция map() очень полезна и удобна в применении. Она переносит измеренные значения (отНижнего, отВерхнего) по осям джойстика в желаемый диапазон яркости (кНижнему, кВерхнему). Можно то же самое сделать обычными арифметическими действиями, но запись с помощью функции map() существенно короче.

В режиме discoMode() три цвета попеременно набирают яркость и гаснут. Чтобы можно было выйти из цикла при нажатии кнопки, каждую итерацию проверяем, не была ли нажата кнопка.

В результате получился фонарик из трёхцветного RGB светодиода, яркость свечения каждого цвета которого задаётся с помощью джойстика. А при нажатии на кнопку происходит включение режима «цветомузыка». Я сделал специальную печатную плату с Arduino Pro Mini и джойстиком, и у меня он используется в качестве ночника для ребёнка 🙂

Управление яркостью и цветом RGB светодиода с помощью аналогового джойстика, подключённого к Arduino

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

Digital Pins

The pins on the Arduino can be configured as either inputs or outputs. This document explains the functioning of the pins in those modes. While the title of this document refers to digital pins, it is important to note that vast majority of Arduino (Atmega) analog pins, may be configured, and used, in exactly the same manner as digital pins.

Properties of Pins Configured as INPUT

Arduino (Atmega) pins default to inputs, so they don’t need to be explicitly declared as inputs with pinMode() when you’re using them as inputs. Pins configured this way are said to be in a high-impedance state. Input pins make extremely small demands on the circuit that they are sampling, equivalent to a series resistor of 100 megohm in front of the pin. This means that it takes very little current to move the input pin from one state to another, and can make the pins useful for such tasks as implementing a capacitive touch sensor, reading an LED as a photodiode, or reading an analog sensor with a scheme such as RCTime.

This also means however, that pins configured as pinMode(pin, INPUT) with nothing connected to them, or with wires connected to them that are not connected to other circuits, will report seemingly random changes in pin state, picking up electrical noise from the environment, or capacitively coupling the state of a nearby pin.

Pullup Resistors with pins configured as INPUT

Often it is useful to steer an input pin to a known state if no input is present. This can be done by adding a pullup resistor (to +5V), or a pulldown resistor (resistor to ground) on the input. A 10K resistor is a good value for a pullup or pulldown resistor.

Properties of Pins Configured as INPUT_PULLUP

There are 20K pullup resistors built into the Atmega chip that can be accessed from software. These built-in pullup resistors are accessed by setting the pinMode() as INPUT_PULLUP. This effectively inverts the behavior of the INPUT mode, where HIGH means the sensor is off, and LOW means the sensor is on.

The value of this pullup depends on the microcontroller used. On most AVR-based boards, the value is guaranteed to be between 20kΩ and 50kΩ. On the Arduino Due, it is between 50kΩ and 150kΩ. For the exact value, consult the datasheet of the microcontroller on your board.

When connecting a sensor to a pin configured with INPUT_PULLUP, the other end should be connected to ground. In the case of a simple switch, this causes the pin to read HIGH when the switch is open, and LOW when the switch is pressed.

The pullup resistors provide enough current to dimly light an LED connected to a pin that has been configured as an input. If LEDs in a project seem to be working, but very dimly, this is likely what is going on.

The pullup resistors are controlled by the same registers (internal chip memory locations) that control whether a pin is HIGH or LOW. Consequently, a pin that is configured to have pullup resistors turned on when the pin is an INPUT, will have the pin configured as HIGH if the pin is then switched to an OUTPUT with pinMode(). This works in the other direction as well, and an output pin that is left in a HIGH state will have the pullup resistors set if switched to an input with pinMode().

Prior to Arduino 1.0.1, it was possible to configure the internal pull-ups in the following manner:

NOTE: Digital pin 13 is harder to use as a digital input than the other digital pins because it has an LED and resistor attached to it that’s soldered to the board on most boards. If you enable its internal 20k pull-up resistor, it will hang at around 1.7V instead of the expected 5V because the onboard LED and series resistor pull the voltage level down, meaning it always returns LOW. If you must use pin 13 as a digital input, set its pinMode() to INPUT and use an external pull down resistor.

Properties of Pins Configured as OUTPUT

Pins configured as OUTPUT with pinMode() are said to be in a low-impedance state. This means that they can provide a substantial amount of current to other circuits. Atmega pins can source (provide positive current) or sink (provide negative current) up to 40 mA (milliamps) of current to other devices/circuits. This is enough current to brightly light up an LED (don’t forget the series resistor), or run many sensors, for example, but not enough current to run most relays, solenoids, or motors.

Short circuits on Arduino pins, or attempting to run high current devices from them, can damage or destroy the output transistors in the pin, or damage the entire Atmega chip. Often this will result in a «dead» pin in the microcontroller but the remaining chip will still function adequately. For this reason it is a good idea to connect OUTPUT pins to other devices with 470Ω or 1k resistors, unless maximum current draw from the pins is required for a particular application.

Defining Pin Levels: HIGH and LOW

When reading or writing to a digital pin there are only two possible values a pin can take/be-set-to: and .

HIGH

The meaning of (in reference to a pin) is somewhat different depending on whether a pin is set to an or . When a pin is configured as an with , and read with , the Arduino (ATmega) will report if:

  • a voltage greater than 3.0V is present at the pin (5V boards)

  • a voltage greater than 2.0V volts is present at the pin (3.3V boards)

A pin may also be configured as an INPUT with , and subsequently made HIGH with . This will enable the internal 20K pullup resistors, which will pull up the input pin to a reading unless it is pulled by external circuitry. This can be done alternatively by passing as argument to the function, as explained in more detail in the section «Defining Digital Pins modes: INPUT, INPUT_PULLUP, and OUTPUT» further below.

When a pin is configured to OUTPUT with , and set to with , the pin is at:

  • 5 volts (5V boards)

  • 3.3 volts (3.3V boards)

In this state it can source current, e.g. light an LED that is connected through a series resistor to ground.

LOW

The meaning of also has a different meaning depending on whether a pin is set to or . When a pin is configured as an with , and read with , the Arduino (ATmega) will report LOW if:

  • a voltage less than 1.5V is present at the pin (5V boards)

  • a voltage less than 1.0V (Approx) is present at the pin (3.3V boards)

When a pin is configured to with , and set to with , the pin is at 0 volts (both 5V and 3.3V boards). In this state it can sink current, e.g. light an LED that is connected through a series resistor to +5 volts (or +3.3 volts).

Подсказки по сборке

  • При соединении проводов с большими металлическим контактами сначала убедитесь, что паяльник нагрелся и какое-то время нагревайте и металлический контакт. Смысл пайки заключается в образовании постоянного соединения созданием сплава, но если горячей является только одна часть соединения, то у вас запросто может получиться «холодное соединение», которое выглядит как соединение, но на самом деле не соединено.
  • При соединении двух проводов наденьте сначала на один из них кусок термоусадочной трубки — после соединения трубку надеть будет нельзя. Это кажется очевидным, но я постоянно это забываю и мне приходится использовать вместо трубки изоленту… Протяните термоусадочную трубку подальше от соединения, чтобы она не нагрелась раньше времени. Проверив паянное соединение сдвиньте на него трубку и нагрейте её.
  • Тонкие маленькие соединительные провода, которые я упоминал в начале, хорошо подходят для соединений без пайки (например, при подключении к Arduino!), но довольно хрупкие. После пайки используйте для их закрепления клеевой пистолет и устраните из самого соединения все напряжения. Например, красные провода на показанном ниже снимке при работе можно случайно потянуть, поэтому после пайки я зафиксировал их каплей горячего клея:

Подключение кнопки к Ардуино

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • 1 светодиод;
  • резисторы на 220 Ом и 10 кОм;
  • 1 тактовая кнопка;
  • провода «папа-папа» и «папа-мама».


Принципиальная схема. Подключение кнопки к Ардуино Уно

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

Обратите внимание, что при отпущенной кнопке на Pin2 поступает логический «0». С помощью кнопки будем выключать и включать встроенный светодиод, подключенный к цифровому 13 порту на плате микроконтроллера Ардуино

Скетч подключение кнопки к цифровому входу

void setup() {
   pinMode(13, OUTPUT); // объявляем пин 13 как выход
   pinMode(2, INPUT); // объявляем пин 2 как вход
}

void loop() {
   if (digitalRead(2) == HIGH) // когда на пин 2 поступает высокий сигнал
   {
      digitalWrite(13, HIGH); // зажигаем светодиод
   }

   if (digitalRead(2) == LOW) // когда на пин 2 поступает низкий сигнал
   {
      digitalWrite(13, LOW); // выключаем светодиод
   }
}

Пояснения к коду:

  1. процедура выполняется один раз, используется процедура для конфигурации портов микроконтроллера (назначение режима работы портов);
  2. процедуры и должны присутствовать в любой программе (скетче);
  3. использованные константы: , , , , пишутся заглавными буквами, иначе компилятор их не распознает и выдаст ошибку.

Скетч подключения кнопки к аналоговому входу

Можно также сделать подключение кнопок к аналоговому входу Ардуино (обозначены, как Analog In на плате). Принципиальное отличие данной схемы — это использование аналогового порта на микроконтроллере. Для включения и выключения светодиода будем также использовать встроенный светодиод на плате. Переключите тактовую кнопку к аналоговому входу A1 и загрузите в плату следующий скетч.

void {
   pinMode(13, OUTPUT); // объявляем пин 13 как выход
   pinMode(A1, INPUT); // объявляем пин A1 как вход
}

void loop() {
   if (analogRead(A1) > 300) // когда аналоговая кнопка нажата
   {
      digitalWrite(13, HIGH); // зажигаем светодиод
   }

   if (analogRead(A1) < 300) // когда аналоговая кнопка отпущена
   {
      digitalWrite(13, LOW); // выключаем светодиод
   }
}

Пояснения к коду:

  1. в данном скетче мы используем функцию для считывания значений с аналогового входа , при этом порт можно использовать, как цифровой;
  2. значения на аналоговом входе могут отличаться (все зависит от сопротивления резистора в схеме) и могут принимать значения в диапазоне от 0 до 1023.

Defining Digital Pins modes: INPUT, INPUT_PULLUP, and OUTPUT

Digital pins can be used as , , or . Changing a pin with changes the electrical behavior of the pin.

Pins Configured as INPUT

Arduino (ATmega) pins configured as with are said to be in a high-impedance state. Pins configured as make extremely small demands on the circuit that they are sampling, equivalent to a series resistor of 100 Megohms in front of the pin. This makes them useful for reading a sensor.

If you have your pin configured as an , and are reading a switch, when the switch is in the open state the input pin will be «floating», resulting in unpredictable results. In order to assure a proper reading when the switch is open, a pull-up or pull-down resistor must be used. The purpose of this resistor is to pull the pin to a known state when the switch is open. A 10 K ohm resistor is usually chosen, as it is a low enough value to reliably prevent a floating input, and at the same time a high enough value to not draw too much current when the switch is closed. See the Digital Read Serial tutorial for more information.

If a pull-down resistor is used, the input pin will be when the switch is open and when the switch is closed.

If a pull-up resistor is used, the input pin will be when the switch is open and when the switch is closed.

Pins Configured as INPUT_PULLUP

The ATmega microcontroller on the Arduino has internal pull-up resistors (resistors that connect to power internally) that you can access. If you prefer to use these instead of external pull-up resistors, you can use the argument in .

See the Input Pullup Serial tutorial for an example of this in use.

Pins configured as inputs with either or can be damaged or destroyed if they are connected to voltages below ground (negative voltages) or above the positive power rail (5V or 3V).

Pins Configured as OUTPUT

Pins configured as with are said to be in a low-impedance state. This means that they can provide a substantial amount of current to other circuits. ATmega pins can source (provide current) or sink (absorb current) up to 40 mA (milliamps) of current to other devices/circuits. This makes them useful for powering LEDs because LEDs typically use less than 40 mA. Loads greater than 40 mA (e.g. motors) will require a transistor or other interface circuitry.

Pins configured as outputs can be damaged or destroyed if they are connected to either the ground or positive power rails.

Подключение кнопки Ардуино

Включение и выключение светодиода с помощью кнопки

Давайте начнем с самого простого способа подключения тактовой кнопки. Рассмотрим схему с Arduino в качестве источника питания, светодиода, ограничительного резистора номиналом 220 Ом и кнопки, которая будет замыкать и размыкать цепь.

При подключении кнопки с двумя парами ножек важно правильно выбрать размыкающие контакты. Посмотрите на изображение внимательно: пары ножек расположены по бокам кнопки

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

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

Сама схема с кнопкой, светодиодом и контроллером Arduino не нуждается в особых пояснениях. Кнопка разрывает цепь, светодиод не горит. При нажатии цепь замыкается, светодиод включается. Если вы перепутаете контакты (включите через замкнутые спаренные контакты кнопки), то кнопка работать не будет, потому что цепь никогда не разомкнется. Просто поменяйте контакты местами.

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

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

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

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

Скетч для кнопки ардуино с подтягивающим резистором:

4Подавление дребезга контактовс помощью задержки

Постараемся исправить ситуацию. Мы знаем, что дребезг контактов проявляет себя в течение нескольких миллисекунд после замыкания контактов. Давайте после изменения состояния кнопки выжидать, скажем, 5 мсек. Это время для человека является практически мгновением, и нажатие кнопки человеком обычно происходит значительно дольше – несколько десятков миллисекунд. А Arduino прекрасно работает с такими короткими промежутками времени, и эти 5 мсек позволят ему отсечь дребезг контактов от нажатия кнопки.

Скетч обработки нажатия кнопки с задержкой для устранения эффекта дребезга контактов

int switchPin = 2; // пин кнопки
int ledPin = 13; // пин светодиода
boolean lastButton = false; // предыдущее состояние кнопки
boolean currentButton = false; // текущее состояние кнопки
boolean ledOn = false; // состояние светодиода

void setup() {  
  pinMode (switchPin, INPUT);
  pinMode (ledPin, OUTPUT);
}

void loop() {
  currentButton = debounce (lastButton); // получаем состояние кнопки без дребезга
  if (lastButton == false && currentButton == true) { // если кнопка была нажата дольше 5 мсек,
    ledOn = !ledOn; // то меняем состояние светодиода
  }
  lastButton = currentButton; // обнуляем состояние нажатия кнопки
  digitalWrite (ledPin, ledOn); // зажигаем/гасим светодиод
}

// Процедура определения нажатия кнопки без дребезга:
boolean debounce(boolean last) { 
  boolean current = digitalRead(switchPin); // считываем текущее состояние кнопки
  if (last != current) { // если состояние изменилось
    delay(5); // делаем задержку на 5 мсек, пока уляжется дребезг
    current = digitalRead(switchPin); // и считываем снова
  }
  return current; // возвращаем текущее состояние кнопки
}

В данном скетче мы объявим процедуру debounce() («bounce» по-английски – это как раз «дребезг», приставка «de» означает обратный процесс), на вход которой мы подаём предыдущее состояние кнопки. Если нажатие кнопки длится более 5 мсек, значит это действительно нажатие. Определив нажатие, мы меняем состояние светодиода.

Загрузим скетч в плату Arduino. Теперь всё гораздо лучше! Кнопка срабатывает без сбоев, при нажатии светодиод меняет состояние, как мы и хотели.

Определение режимов цифровых выводов: INPUT, INPUT_PULLUP и OUTPUT

Цифровые выводы могут использоваться как (вход), (подтянутый вход) или (выход). Изменение вывода с помощью меняет его электрическое поведение.

Выводы, настроенные как входы ()

Выводы Arduino (ATmega), настроенные как входы () с помощью , как говорят, находятся в состоянии высокого импеданса. Выводы, настроенные как входы, предъявляют чрезвычайно малые требования к току в цепи, с которой они считывают данные, и эквивалентны последовательному резистору 100 мегаом перед выводом. Это делает их полезными для считывания показаний датчиков.

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

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

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

Выводы, настроенные как входы с подтягивающим резистором ()

Микроконтроллер ATmega на Arduino имеет внутренние подтягивающие резисторы (резисторы, которые подключены к шине питания внутри микроконтроллера), к которым у вас есть доступ. Если вы предпочитаете использовать их вместо внешних подтягивающих резисторов, то можете использовать аргумент в функции .

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

Выводы, настроенные как выходы ()

Выводы, настроенные как выходы () с помощью , как говорят, находятся в состоянии низкого импеданса. Это означает, что они могут обеспечить значительное количество тока для других цепей. Выводы ATmega быть выдавать (проводить ток через себя от источника) или поглощать (проводить ток через себя к земле) ток до 40 мА (миллиампер) для других устройств/схем. Это делает их полезными для питания светодиодов, поскольку светодиоды обычно используют менее 40 мА. Для нагрузок более 40 мА (например, двигатели) требуется транзистор или другая схема интерфейса.

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

Рейтинг автора
5
Материал подготовил
Максим Иванов
Наш эксперт
Написано статей
129
Ссылка на основную публикацию
Похожие публикации