CraftDuino v2.0
  • - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!

Практическое программирование Arduino/CraftDuino - цифровой ввод - кнопка

0. Начало

1. Цифровой ввод — кнопка

Настало время попробовать поработать с вводом :)
Для начала, возьмём обычную кнопку и соберём такую простую схему:

как видно – это просто дополненная схема Blink-а :)
Что же происходит на 12-м цифровом порту? Если к порту ничего не подключено – его состояние меняется между 0V и 5V (LOW & HIGH).
Подключая резистор между портом и землёй — мы тем самым «прижимаем» порт к 0 (LOW), а при нажатии кнопки происходит соединение с напряжением питания и тем самым порт «подтягивается» к 5V (HIGH).
Тем самым мы узнаём – нажата кнопка или нет – просто считывая значение на входе 12 цифрового порта и проверяя – HIGH это или LOW.

код скетча прост:

/*
 * LED with button
 */

int ledPin = 13;                // сетодиод
int btnPin = 12;                // кнопка
int val=0;

void setup()                     
{
  pinMode(ledPin, OUTPUT);      // это выход - светодиод
  pinMode(btnPin, INPUT);       // а это вход - кнопка
  Serial.begin(9600);           // будем записывать в COM-порт
}

void loop()                      
{
  val = digitalRead(btnPin);    // узнаём состояние кнопки
  if(val==HIGH)                 // кнопка нажата
  {
    digitalWrite(ledPin, HIGH); // зажигаем светодиод
    Serial.println("H");
  }
  else                          // кнопка не нажата
  {
    digitalWrite(ledPin, LOW);  // гасим светодиод
    Serial.println("L");
  }
  delay(100);
}



а вот что увидим в мониторе последовательного порта:


Вот и всё. А теперь можно проявить фантазию и использовать вместо обычной кнопки что-нибудь поинтереснее, например — геркон :)

читать далее: 2. Аналоговый вывод — Fading

По теме:
Arduino, термины, начало работы
КМБ для начинающих ардуинщиков
Состав стартера (точка входа для начинающих ардуинщиков)
  • 0
  • 4 августа 2009, 12:48
  • admin

Комментарии (19)

RSS свернуть / развернуть
+
0
Где-то читал, что ATmega уже содержит «подтягивающие» резисторы включаемые программно… а как это можно сделать? никто не знает? ведь тогда бы, насколько я понял не нужен бы был R1
avatar

ManLee

  • 17 мая 2010, 15:30
+
+1
Почитать как включается подтяжка можно здесь (абзац после слов «схема включения») — это на Wiring-е, на С зависит от компилятора (тут для WinAVR-а).
Только резистор этот подтягивает ногу к питанию — чтение будет возвращать 1, значит кнопкой пин нужно прижимать к земле.НО! тут вылезает один нюанс — если «кто-то что-то перепутает» и пин будет сконфигурирован как OUTPUT, HIGH то кнопка ему устроит КЗ на землю — можно подпалить МК. И пришлось бы снова, «на всякий случай», ставить резистор.
Эта схема включения выбрана как наиболее безопасная и простая в программной реализации=)
avatar

Zoltberg

  • 17 мая 2010, 16:15
+
0
Вопрос про подключение кнопки

Что же происходит на 12-м цифровом порту? Если к порту ничего не подключено – его состояние меняется между 0V и 5V (LOW & HIGH).
Подключая резистор между портом и землёй — мы тем самым «прижимаем» порт к 0 (LOW), а при нажатии кнопки происходит соединение с напряжением питания и тем самым порт «подтягивается» к 5V (HIGH).


Почему нельзя просто поставить кнопку между пин12 и землёй? На пин12 вроде бы как есть своё напряжение?
avatar

lfway

  • 5 июля 2011, 13:56
+
0
Т.е. напрямую ногу садить на землю со «своим напряжением»?
avatar

Tickat

  • 5 июля 2011, 20:46
+
0
Да. Может, с резистором ещё? На пин12 вроде бы напряжение тоже 5 вольт.

Не совсем ясно, зачем использовать 3 выхода, когда вроде бы можно обойтись двумя? Хочется разобраться в этом вопросе.
avatar

lfway

  • 6 июля 2011, 06:35
+
0
Этот вопрос мучает меня. В чём смысл этого «подтягивания» почему не делают как я спросил? А-а-а! Panic!
avatar

lfway

  • 7 июля 2011, 11:24
+
+2
Вот смотри, когда к нему ничего не подцеплено, то значения на нем непредсказуемы. Когда мы садим на землю то мы получаем ноль, и можем быть уверены в том что на этой ноге нет ничего кроме ноля. А через кнопку мы помимо земли садим на ногу +5, и значение будет уже не 0 (low) a High, резистор нужен что бы не замыкать напрямую землю и +5. Если делать как предложил ты, то ты просто выжжешь ногу, посадив ногу с +5 напрямую, без нагрузки к земле
avatar

Tickat

  • 7 июля 2011, 19:09
+
0
Этот резистор не есть ли то, что называют «делителем напряжения»? Где можно о подобных приёмах почитать поподробнее?
avatar

lfway

  • 26 июля 2011, 08:00
+
+2
ненене делитель это два резистора между каким-нить напряжением:
ru.wikipedia.org/wiki/%C4%E5%EB%E8%F2%E5%EB%FC_%ED%E0%EF%F0%FF%E6%E5%ED%E8%FF
Почитать можно у хальта easyelectronics.ru/osnovy-na-palcax-chast-2.html
avatar

Zoltberg

  • 26 июля 2011, 10:04
+
0
А по какому принципу рассчитан номинал резистора? Какой диапазон?
avatar

Ryo

  • 25 ноября 2011, 10:02
+
0
Для кнопки то?
Как обычоно, по закону ома=)
Задача прижать PIN12 к земле так(таким сопротивлением), чтоб витающие в эфире помехи не повлияли на устойчивое чтение нуля пока кнопка не нажата(не навели напряжение достаточное для признание его еденицей)- то есть чем меньше сопротивление тем лучше.
С другой стороны не хочется получить короткое замыкание(ну или просто увеличение потребления) в момент когда кнопка будет нажата (мыж фактически "+" с "-" соеденияем через резистор) — то есть чем больше сопротивление тем лучше.
Нужно высчитать компромиссное значение!
Но так как всем лень искать по датащитам значения внутреннего сопротивления пина в режиме чтения (тока потребления) и прикидывать интенсивность помех наводимых на этот пин, ставят то что под рукой есть.
Обычно 1к до 100к. (часто можно видеть на схемах такие номиналы — 1к, 10к, 100к)
Можно даже от 500ом, в данном случае не принципиально.
avatar

Zoltberg

  • 25 ноября 2011, 11:33
+
0
Ну вот на Ардуино Uno насколько я помню рекомендуемый максимальный ток — 40мА (или путаю)
Вольтаж тут — 5В
Итого минимальное сопротивление, чтобы не превысить ток — 125 Ом. Получается 200 омного с головой бы хватало?
avatar

Ryo

  • 25 ноября 2011, 15:50
+
0
угу, хватит, чтоб посадить батарейку(«крону»)за несколько десятков нажатий на кнопку =D
Вы не так поняли,
речь о ПОТРЕБЛЯЕМОМ ПИНОМ токе и о напряжении ПОМЕХИ.
А если говорить о «критерии ДОПУСТИМОГО потребления при нажатой кнопке», то тогда конечно, да, и 10ом хватит =D
Ведь стабилизатор на плате может дать до 0.8-1А =D
Только зачем на кнопку такой вообще ток расходовать?!
И вообще не забивайте себе голову,
ставьте 1к, и не парьтесь =)
avatar

Zoltberg

  • 25 ноября 2011, 16:45
+
0
А как будет вести себя плата если схема не собрана, а прграмма залита и выполняется?
avatar

raphtor

  • 5 февраля 2012, 16:48
+
0
Никак:-)
avatar

daitel

  • 4 марта 2012, 21:14
+
0
привет всем.
не знал куда задать свой вопрос, решил здесь.помогите кто нибудь. как сделать так чтобы пока нажата клавиша на клаве светодиод горит, отпускаешь — тухнет. понимаю надо будет писать прогу под винду. (чуть понимаю с++, лучше с#) плюс скетч к ардуино. подскажите, пожалуйста, на примерах. или где об этом можно больше почитать? читал тут с# + ардуино, как-то не то.
надеюсь на вашу помощь.
avatar

pentium

  • 2 апреля 2012, 07:09
+
0
Программное управление светодиодом
PS. для вопросов, напрямую не относящихся к тематике статей есть форум.
avatar

admin

  • 2 апреля 2012, 07:37
+
0
жесть. долго мучался и не понимал, почему все не работает. оказывается кнопка нужно было перевернуть на 90 градусов (facepalm)
avatar

prefer211

  • 16 апреля 2012, 17:08

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.