Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:aruno:exp4 [2020/05/22 19:27] alexnikproducts:aruno:exp4 [2020/11/05 12:52] (текущий) – [Подключение кнопки] alexnik
Строка 6: Строка 6:
  
 ==== Подключение кнопки ==== ==== Подключение кнопки ====
-Из предыдущих экспериментов мы помним, что, микроконтроллер на пины может подавать //логический нуль// или //логическую единицу//,подробнее можно ознакомиться в базе наний по [[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. Неправильная схема подключения кнопки//
  
Строка 15: Строка 15:
 Но как подключить кнопку, чтобы в одном состоянии она соединяла ножку с питанием, а в другом— с землей, ведь у нее только один контакт, который либо замкнут, либо разомкнут? В таком случае используют резистор, с помощью которого ножку микроконтроллера //подтягивают// к противоположному уровню. Но как подключить кнопку, чтобы в одном состоянии она соединяла ножку с питанием, а в другом— с землей, ведь у нее только один контакт, который либо замкнут, либо разомкнут? В таком случае используют резистор, с помощью которого ножку микроконтроллера //подтягивают// к противоположному уровню.
  
-{{ :products:esp-iot:exp3.3.png?nolink |}}+{{ :products:ardu:exp3.3.png?nolink |}}
 //Рисунок 3. Правильные схемы подключения кнопки// //Рисунок 3. Правильные схемы подключения кнопки//
  
Строка 28: Строка 28:
 ==== Схема эксперимента ==== ==== Схема эксперимента ====
  
-{{ :products:esp-iot:exp3.4.png?nolink |}}+{{ :products:ardu:exp3.4.png?nolink |}}
 //Рисунок 4. Электрическая принципиальная схема эксперимента// //Рисунок 4. Электрическая принципиальная схема эксперимента//
  
Строка 45: Строка 45:
    pinMode(keyPin,INPUT);//установки режима пина кнопки на "вход"    pinMode(keyPin,INPUT);//установки режима пина кнопки на "вход"
    pinMode(ledPin,OUTPUT);//установки режима пина светодиода на "выход"    pinMode(ledPin,OUTPUT);//установки режима пина светодиода на "выход"
-}+ }
  
 void loop() { void loop() {
Строка 54: Строка 54:
      digitalWrite(ledPin,LOW);      digitalWrite(ledPin,LOW);
    }    }
-}+ }
 </file> </file>
  
Строка 64: Строка 64:
 </code> </code>
  
-разберем на составляющие строку с объявлением переменной ''keyPin''+разберем на составляющие строку с объявлением переменной ''keyPin''\\
 ''int'' - тип переменной для хранения чисел,\\ ''int'' - тип переменной для хранения чисел,\\
 ''keyPin'' - имя переменной,\\ ''keyPin'' - имя переменной,\\
Строка 77: Строка 77:
 после инициализации переменных начинается выполнение функции ''setup()'', в которой настраиваются режимы работы пинов контроллера, пин 12 на "вход" сигнала, а пин 2 на "выход"\\ после инициализации переменных начинается выполнение функции ''setup()'', в которой настраиваются режимы работы пинов контроллера, пин 12 на "вход" сигнала, а пин 2 на "выход"\\
  
-<code python[enable_line_numbers="2", start_line_numbers_at="11"]> +в функции ''loop()'' программа проверяет в каком положении находится кнопка\\ 
-    button_value = Button.value() +<code cpp[enable_line_numbers="15", start_line_numbers_at="9"]> 
-    if button_value == 1: +void loop() { 
-        Led.on() +   if(digitalRead(keyPin) == HIGH) { 
-    else: +     digitalWrite(ledPin,HIGH); 
-        Led.off()+    
 +   else { 
 +     digitalWrite(ledPin,LOW)
 +    } 
 + }
 </code> </code>
-Тело цикла. Этот код повторяется бесконечное количество раз, пока программа не будет прервана пользователем с помощью кнопки {{ :products:2020-05-04_12-35-46.png?nolink |}} +Здесь мы впервые сталкиваемся с условным оператором. Оператор ''if'' проверяет выполнение условия и исполняет код в зависимости от того выполнено условие или нет. Если условие выполняется, то выполняется код в блоке прямо под ним. Если условие ложно, то исполняется код в блоке ''else''
- +В нашем случае условием является ''(digitalRead(keyPin) == HIGH)''. Символ двойного равенства ''=='' это оператор сравнения. Он сравнивает значение выражения слева от себя со значением выражения справа от себя. Если эти значения равны, то равенство выполняется, иначе— нет. 
-<code python[enable_line_numbers="2", start_line_numbers_at="12"]> +
-    button_value = Button.value() +
-</code> +
-Сначала мы считываем состояние вывода, к которому подключена кнопка, с помощью вызова функции ''Button.value()'' и записываем это состояние в переменную ''button_value''. Если кнопка нажата, то (в соответствии со схемой на рисунке 4) на выводе микроконтроллера состояние логической единицы, значит в переменную ''button_value'' запишется ''1''. А если кнопка не нажата, на ножке логический ноль, в переменную запишется 0.  +
- +
-<code python[enable_line_numbers="2", start_line_numbers_at="12"]> +
-    if button_value == 1: +
-</code> +
- +
-Здесь мы впервые сталкиваемся с //условным оператором//. Оператор if проверяет выполнение условия и исполняет код в зависимости от того выполнено условие или нет. Если условие выполняется, то выполняется код в блоке прямо под ним. Если условие ложно, то исполняется код в блоке ''else''. +
- +
-В нашем случае условием является ''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+Например  
-    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> 
-который гасит светодиод. 
  
 Теперь, когда мы разобрали каждую строку программы, взглянем опять на алгоритм целиком: программа постоянно, бесконечное количество раз, проверяет нажата ли кнопка. Если кнопка нажата, то на светодиод зажигается, если же кнопка не нажата то светодиод выключается. Теперь, когда мы разобрали каждую строку программы, взглянем опять на алгоритм целиком: программа постоянно, бесконечное количество раз, проверяет нажата ли кнопка. Если кнопка нажата, то на светодиод зажигается, если же кнопка не нажата то светодиод выключается.