Для подключения светодиода к Arduino, нам нужно:
- Плата Arduino. x1
- Компьютер(для написания и загрузке кода, а так же мы будем брать с него электричество). x1
- Провод для соединения компьютера и платы. x1
- Тактовая кнопка.x1
- Резистор 10 КОм. x1
- Провода . x5
- Макетная плата (для удобства сборки) x1
- В схеме я указываю внешний источник питания, но питание можно брать с платы.
Схем подключения тактовой кнопки несколько, рассмотрим сначала две , схема со стягивающим резистором и схема с подтягивающим резистором.
Схема со стягивающим резистором:
питание берётся с платы Arduino
При использовании внешнего источника питания:
Данная схема работает следующим образом, при нажатии кнопки на штырьке будет напряжение равное напряжению источника питания. При отпускании кнопки, штырёк заземлится и напряжение снимется.
Схема с подтягивающим резистором.
Питание берётся с платы Arduino:
При использовании внешнего источника питания:
Здесь ситуация противоположная схеме со стягивающим резистором. При нажатии на кнопку штырёк заземляется и напряжения нет. При отпускании кнопки на штырьке появляется напряжение равное напряжению на источнике питания.
Скетч:
Для данных схем можно использовать один и тот же скетч. Возьмём стандартный скетч:
Файл -> Примеры ->02.Digital->Button;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
/* Button Turns on and off a light emitting diode(LED) connected to digital pin 13, when pressing a pushbutton attached to pin 2. The circuit: * LED attached from pin 13 to ground * pushbutton attached to pin 2 from +5V * 10K resistor attached to pin 2 from ground * Note: on most Arduinos there is already an LED on the board attached to pin 13. created 2005 by DojoDave <http://www.0j0.org> modified 30 Aug 2011 by Tom Igoe This example code is in the public domain. http://www.arduino.cc/en/Tutorial/Button */ // constants won't change. They're used here to // set pin numbers: const int buttonPin = 2; // the number of the pushbutton pin const int ledPin = 13; // the number of the LED pin // variables will change: int buttonState = 0; // variable for reading the pushbutton status void setup() { // initialize the LED pin as an output: pinMode(ledPin, OUTPUT); // initialize the pushbutton pin as an input: pinMode(buttonPin, INPUT); } void loop() { // read the state of the pushbutton value: buttonState = digitalRead(buttonPin); // check if the pushbutton is pressed. // if it is, the buttonState is HIGH: if (buttonState == HIGH) { // turn LED on: digitalWrite(ledPin, HIGH); } else { // turn LED off: digitalWrite(ledPin, LOW); } } |
Убираем комментарии, и получаем вот такой код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
const int buttonPin = 2; const int ledPin = 13; int buttonState = 0; void setup() { pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); } void loop() { buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } } |
Данный код выполняет следующие действие:
Если на штырьке 2 есть напряжение, загорается светодиод. Если напряжения нет светодиод тухнет. Большинство кода уже разобрано в статье Arduino. Подключение светодиода, по этому сосредоточимся на новых участках кода.
И так в блоке, где задаются глобальные переменные, кроме ledPin на 13 штырьке (не забываем, что на этом штырьке у большенства плат Arduino уже подключен светодиод. Иначе вам придётся его подключить.) Заданы переменные :
1 |
const int buttonPin = 2; |
В buttonPin будет хранится номер штырька, к которому подключена кнопка. Слово const обозначает, что эта переменная является константой, то есть она не будет меняться во время выполнения кода.
Вторая переменная
1 |
int buttonState = 0; |
И в ней будет хранится состояние кнопки, для дальнейшей обработки.
В функции setup инициализируются штырьки, уже известная pinMode(ledPin, OUTPUT); по скетчу «Blinc» и инициализируем штырёк с кнопкой:
1 |
pinMode(buttonPin, INPUT); |
Для инициализации штырька, для получения с него сигнала, так же используется функция pinMode. Первый параметр в нём как и раньше номер штырька, а второй INPUT (можно перевести как вход).
Теперь мы можем снимать с него значения, что мы и делаем в функции loop:
1 2 3 4 5 6 7 8 |
void loop() { buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } } |
Первая команда в этой функции:
1 |
buttonState = digitalRead(buttonPin); |
Мы заносим в переменную buttonState значение штырька. Наличие напряжения = HIGH = 1. Отсутствие напряжения = LOW = 0.
Дальше мы функцией if делаем разветвление в программе:
1 |
if (buttonState == HIGH) |
Если значение buttonState является HIGH, то есть на нашем штырьке есть напряжение, то
1 |
digitalWrite(ledPin, HIGH); |
Включаем напряжение на светодиод.
Иначе (если напряжение на штырьке нет):
1 |
digitalWrite(ledPin, LOW); |
Эта проверка будет бесконечно повторяться в цикле, до перезагрузки платы.
Скетч закончился.
Есть ещё одна схема, которую обычно рисуют перечёркнутым крестом и говорят, что так не правильно, посмотрим на неё, так как эфект очень интересный:
(На видео до нажатия кнопки светодиод моргает, после нажатия кнопки горит ровно.)
На видео видно, что при замыкании схемы, на штырьке есть напряжения. А в разомкнутом состоянии проводник играет роль антены, и происходят ложные срабатывания нажатия кнопки. Тоесть схема в размкнутом состоянии выглядит как то так:
И не известно, поймает она в данный момент сигнал или нет.
Но сделать «простую» схему подключения кнопки можно, суть такова, мы включим на ножку кнопки напряжение, а кнопрой будем заземлять её. На самом деле мы реализуем схему с подтягивающим резистором, только в этот раз мы используем подтягивающий ресистр на самой плате Arduino.
изменим схему подключения:
Теперь поменяем скетч:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
const int buttonPin = 2; const int ledPin = 13; int buttonState = 0; void setup() { pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); digitalWrite(buttonPin,HIGH); } void loop() { buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } } |
В этом скетче мы,в функции setup на штырьке с кнопкой включили напряжение:
1 |
digitalWrite(buttonPin,HIGH); |
И теперь при нажатии кнопки напряжение на штырьке падает и лампочка выключается.
Другие статьи по программированию плат Arduino можно посмотреть здесь.
если ставлю 10 кОм, тогда проскакивают помехи