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 комментариев на «“Практическое программирование Arduino/CraftDuino — цифровой ввод — кнопка”»
Где-то читал, что ATmega уже содержит «подтягивающие» резисторы включаемые программно… а как это можно сделать? никто не знает? ведь тогда бы, насколько я понял не нужен бы был R1
Почитать как включается подтяжка можноздесь (абзац после слов «схема включения») — это на Wiring-е, на С зависит от компилятора (тут для WinAVR-а).
Только резистор этот подтягивает ногу к питанию — чтение будет возвращать 1, значит кнопкой пин нужно прижимать к земле.НО! тут вылезает один нюанс — если «кто-то что-то перепутает» и пин будет сконфигурирован как OUTPUT, HIGH то кнопка ему устроит КЗ на землю — можно подпалить МК. И пришлось бы снова, «на всякий случай», ставить резистор.
Эта схема включения выбрана как наиболее безопасная и простая в программной реализации=)
Вопрос про подключение кнопки
Почему нельзя просто поставить кнопку между пин12 и землёй? На пин12 вроде бы как есть своё напряжение?
Т.е. напрямую ногу садить на землю со «своим напряжением»?
Да. Может, с резистором ещё? На пин12 вроде бы напряжение тоже 5 вольт.
Не совсем ясно, зачем использовать 3 выхода, когда вроде бы можно обойтись двумя? Хочется разобраться в этом вопросе.
Этот вопрос мучает меня. В чём смысл этого «подтягивания» почему не делают как я спросил? А-а-а! Panic!
Вот смотри, когда к нему ничего не подцеплено, то значения на нем непредсказуемы. Когда мы садим на землю то мы получаем ноль, и можем быть уверены в том что на этой ноге нет ничего кроме ноля. А через кнопку мы помимо земли садим на ногу +5, и значение будет уже не 0 (low) a High, резистор нужен что бы не замыкать напрямую землю и +5. Если делать как предложил ты, то ты просто выжжешь ногу, посадив ногу с +5 напрямую, без нагрузки к земле
Этот резистор не есть ли то, что называют «делителем напряжения»? Где можно о подобных приёмах почитать поподробнее?
ненене делитель это два резистора между каким-нить напряжением:
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
Почитать можно у хальта
А по какому принципу рассчитан номинал резистора? Какой диапазон?
Для кнопки то?
Как обычоно, по закону ома=)
Задача прижать PIN12 к земле так(таким сопротивлением), чтоб витающие в эфире помехи не повлияли на устойчивое чтение нуля пока кнопка не нажата(не навели напряжение достаточное для признание его еденицей)- то есть чем меньше сопротивление тем лучше.
С другой стороны не хочется получить короткое замыкание(ну или просто увеличение потребления) в момент когда кнопка будет нажата (мыж фактически "+" с "-" соеденияем через резистор) — то есть чем больше сопротивление тем лучше.
Нужно высчитать компромиссное значение!
Но так как всем лень искать по датащитам значения внутреннего сопротивления пина в режиме чтения (тока потребления) и прикидывать интенсивность помех наводимых на этот пин, ставят то что под рукой есть.
Обычно 1к до 100к. (часто можно видеть на схемах такие номиналы — 1к, 10к, 100к)
Можно даже от 500ом, в данном случае не принципиально.
Ну вот на Ардуино Uno насколько я помню рекомендуемый максимальный ток — 40мА (или путаю)
Вольтаж тут — 5В
Итого минимальное сопротивление, чтобы не превысить ток — 125 Ом. Получается 200 омного с головой бы хватало?
угу, хватит, чтоб посадить батарейку(«крону»)за несколько десятков нажатий на кнопку =D
Вы не так поняли,
речь о ПОТРЕБЛЯЕМОМ ПИНОМ токе и о напряжении ПОМЕХИ.
А если говорить о «критерии ДОПУСТИМОГО потребления при нажатой кнопке», то тогда конечно, да, и 10ом хватит =D
Ведь стабилизатор на плате может дать до 0.8-1А =D
Только зачем на кнопку
такойвообще ток расходовать?!И вообще не забивайте себе голову,
ставьте 1к, и не парьтесь =)
А как будет вести себя плата если схема не собрана, а прграмма залита и выполняется?
Никак:-)
привет всем.
не знал куда задать свой вопрос, решил здесь.помогите кто нибудь. как сделать так чтобы пока нажата клавиша на клаве светодиод горит, отпускаешь — тухнет. понимаю надо будет писать прогу под винду. (чуть понимаю с++, лучше с#) плюс скетч к ардуино. подскажите, пожалуйста, на примерах. или где об этом можно больше почитать? читал тут с# + ардуино, как-то не то.
надеюсь на вашу помощь.
PS. для вопросов, напрямую не относящихся к тематике статей есть
жесть. долго мучался и не понимал, почему все не работает. оказывается кнопка нужно было перевернуть на 90 градусов (facepalm)