Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
products:aruno:exp4 [2020/05/22 19:46] – alexnik | products:aruno:exp4 [2020/11/05 12:52] (текущий) – [Подключение кнопки] alexnik |
---|
| |
==== Подключение кнопки ==== | ==== Подключение кнопки ==== |
Из предыдущих экспериментов мы помним, что, микроконтроллер на пины может подавать //логический нуль// или //логическую единицу//,подробнее можно ознакомиться в базе наний по [[theory:logic_1_0|ссылке]], но как получить их с помощью кнопки? Логично подключить кнопку между выводом микроконтроллера и напряжением питания. Когда кнопка нажимается, напряжение питания подается на ножку, что является //логической единицей//. Такая схема изображена на рисунке 2. | Из предыдущих экспериментов мы помним, что, микроконтроллер на пины может подавать //логический нуль// или //логическую единицу//,подробнее можно ознакомиться в базе знаний по [[theory:logic_1_0|ссылке]], но как получить их с помощью кнопки? Логично подключить кнопку между выводом микроконтроллера и напряжением питания. Когда кнопка нажимается, напряжение питания подается на ножку, что является //логической единицей//. Такая схема изображена на рисунке 2. |
| |
{{ :products:esp-iot:exp3.2.png?nolink |}} | {{ :products:ardu:exp3.2.png?nolink |}} |
//Рисунок 2. Неправильная схема подключения кнопки// | //Рисунок 2. Неправильная схема подключения кнопки// |
| |
Но как подключить кнопку, чтобы в одном состоянии она соединяла ножку с питанием, а в другом— с землей, ведь у нее только один контакт, который либо замкнут, либо разомкнут? В таком случае используют резистор, с помощью которого ножку микроконтроллера //подтягивают// к противоположному уровню. | Но как подключить кнопку, чтобы в одном состоянии она соединяла ножку с питанием, а в другом— с землей, ведь у нее только один контакт, который либо замкнут, либо разомкнут? В таком случае используют резистор, с помощью которого ножку микроконтроллера //подтягивают// к противоположному уровню. |
| |
{{ :products:esp-iot:exp3.3.png?nolink |}} | {{ :products:ardu:exp3.3.png?nolink |}} |
//Рисунок 3. Правильные схемы подключения кнопки// | //Рисунок 3. Правильные схемы подключения кнопки// |
| |
==== Схема эксперимента ==== | ==== Схема эксперимента ==== |
| |
{{ :products:esp-iot:exp3.4.png?nolink |}} | {{ :products:ardu:exp3.4.png?nolink |}} |
//Рисунок 4. Электрическая принципиальная схема эксперимента// | //Рисунок 4. Электрическая принципиальная схема эксперимента// |
| |
pinMode(keyPin,INPUT);//установки режима пина кнопки на "вход" | pinMode(keyPin,INPUT);//установки режима пина кнопки на "вход" |
pinMode(ledPin,OUTPUT);//установки режима пина светодиода на "выход" | pinMode(ledPin,OUTPUT);//установки режима пина светодиода на "выход" |
} | } |
| |
void loop() { | void loop() { |
digitalWrite(ledPin,LOW); | digitalWrite(ledPin,LOW); |
} | } |
} | } |
</file> | </file> |
| |
</code> | </code> |
| |
разберем на составляющие строку с объявлением переменной ''keyPin'' | разберем на составляющие строку с объявлением переменной ''keyPin''\\ |
''int'' - тип переменной для хранения чисел,\\ | ''int'' - тип переменной для хранения чисел,\\ |
''keyPin'' - имя переменной,\\ | ''keyPin'' - имя переменной,\\ |
после инициализации переменных начинается выполнение функции ''setup()'', в которой настраиваются режимы работы пинов контроллера, пин 12 на "вход" сигнала, а пин 2 на "выход"\\ | после инициализации переменных начинается выполнение функции ''setup()'', в которой настраиваются режимы работы пинов контроллера, пин 12 на "вход" сигнала, а пин 2 на "выход"\\ |
| |
Сначала мы считываем состояние вывода, к которому подключена кнопка, с помощью вызова функции ''Button.value()'' и записываем это состояние в переменную ''button_value''. Если кнопка нажата, то (в соответствии со схемой на рисунке 4) на выводе микроконтроллера состояние логической единицы, значит в переменную ''button_value'' запишется ''1''. А если кнопка не нажата, на ножке логический ноль, в переменную запишется 0. | в функции ''loop()'' программа проверяет в каком положении находится кнопка\\ |
| <code cpp[enable_line_numbers="15", start_line_numbers_at="9"]> |
<code python[enable_line_numbers="2", start_line_numbers_at="12"]> | void loop() { |
if button_value == 1: | if(digitalRead(keyPin) == HIGH) { |
| digitalWrite(ledPin,HIGH); |
| } |
| else { |
| digitalWrite(ledPin,LOW); |
| } |
| } |
</code> | </code> |
| Здесь мы впервые сталкиваемся с условным оператором. Оператор ''if'' проверяет выполнение условия и исполняет код в зависимости от того выполнено условие или нет. Если условие выполняется, то выполняется код в блоке прямо под ним. Если условие ложно, то исполняется код в блоке ''else''. |
Здесь мы впервые сталкиваемся с //условным оператором//. Оператор if проверяет выполнение условия и исполняет код в зависимости от того выполнено условие или нет. Если условие выполняется, то выполняется код в блоке прямо под ним. Если условие ложно, то исполняется код в блоке ''else''. | В нашем случае условием является ''(digitalRead(keyPin) == HIGH)''. Символ двойного равенства ''=='' это оператор сравнения. Он сравнивает значение выражения слева от себя со значением выражения справа от себя. Если эти значения равны, то равенство выполняется, иначе— нет. |
| |
В нашем случае условием является ''button_value == 1''. Символ двойного равенства ''=='' это оператор сравнения. Он сравнивает значение выражения слева от себя со значением выражения справа от себя. Если эти значения равны, то равенство выполняется, иначе— нет. | |
| |
<WRAP center round info 60%> | <WRAP center round info 60%> |
[[https://pythonworld.ru/osnovy/instrukciya-if-elif-else-proverka-istinnosti-trexmestnoe-vyrazhenie-ifelse.html|Подробнее об операторе if]] | [[http://arduino.ru/Reference/If|Подробнее об операторе if]] |
</WRAP> | </WRAP> |
| |
| функция ''digitalRead(keyPin)'' проверяет, соответствует ли текущий сигнал на заданном пине сигналу ''"HIGH"'',(в аргументе функции записана переменная ''keyPin'', в которую ранее мы записали номер пина к которому подключена кнопка.)\\ |
| если условие верно (кнопка нажата), то функция ''digitalWrite(ledPin,HIGH);'' устанавливает сигнал "HIGH" на пине к которому подключен светодиод и он начинает светиться, а если условие не выполняется (кнопка не нажата), функция digitalWrite(ledPin,LOW); на пин светодиода подает сигнал "LOW" и он гаснет.\\ |
| |
<WRAP center round important 60%> | <WRAP center round important 60%> |
Ранее мы уже сталкивались с оператором присвоения = . Этот оператор предназначен для присвоения значения переменной. Например | Обратите внимание, что оператор присвоения ''='' предназначен для присвоения значения. |
<code python> | Например |
a = 2 | <code cpp> |
| int keyPin = 12; |
</code> | </code> |
присваивает значение 2 переменной ''a''. Теперь же мы использовали оператор сравнения == . Он сравнивает два значения. По виду они похожи, но это совершенно разные операторы и путать их нельзя. | А оператор сравнения ''=='', сравнивает два значения.\\ |
| По виду они похожи, но это совершенно разные операторы и путать их нельзя. |
</WRAP> | </WRAP> |
| |
Итак, в строке 12 с помощью оператора ''if'' мы проверяем выполнение условия равенства переменной button_value цифре 1. По сути это проверка нажата ли кнопка. Если да, если условие выполняется, то выполняется код | |
<code python[enable_line_numbers="2", start_line_numbers_at="13"]> | |
Led.on() | |
</code> | |
который зажигает светодиод. А если условие не верно, а значит кнопка не нажата, то выполняется код в блоке ''else'' | |
<code python[enable_line_numbers="2", start_line_numbers_at="15"]> | |
Led.off() | |
</code> | |
который гасит светодиод. | |
| |
Теперь, когда мы разобрали каждую строку программы, взглянем опять на алгоритм целиком: программа постоянно, бесконечное количество раз, проверяет нажата ли кнопка. Если кнопка нажата, то на светодиод зажигается, если же кнопка не нажата то светодиод выключается. | Теперь, когда мы разобрали каждую строку программы, взглянем опять на алгоритм целиком: программа постоянно, бесконечное количество раз, проверяет нажата ли кнопка. Если кнопка нажата, то на светодиод зажигается, если же кнопка не нажата то светодиод выключается. |