Различия

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

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

Следующая версия
Предыдущая версия
products:aruno:exp10 [2020/05/29 12:35] – создано alexnikproducts:aruno:exp10 [2020/06/01 12:28] (текущий) alexnik
Строка 1: Строка 1:
 ===== Эксперимент 10. Программный выключатель=====  ===== Эксперимент 10. Программный выключатель===== 
  
 +Монитор порта можно использовать не только для вывода значения, но и управлять платой контроллера, отправляя команды.\\ 
 +Соберем проект в котором будем управлять включением и выключением светодиода посредством отправки команд через монитор порта.\\
 ==== Схема эксперимента ==== ==== Схема эксперимента ====
 {{ :products:ardu:exp2.1.png?nolink&400 |}} {{ :products:ardu:exp2.1.png?nolink&400 |}}
Строка 9: Строка 10:
  
 ==== Программный код эксперимента ==== ==== Программный код эксперимента ====
-<file python Exp2 [enable_line_numbers="2", start_line_numbers_at="1"]> +<file cpp Exp10 [enable_line_numbers="2", start_line_numbers_at="1"]> 
-  void setup() {                 +const int Led = 2;
-       pinMode(2, OUTPUT)     +
-  } +
-  +
-  void loop() { +
-      digitalWrite(2, HIGH); +
-    delay(1000);                +
-    digitalWrite(led, LOW); +
-    delay(1000); +
-  } +
-</file>+
  
-Убедитесь, что вы собрали схему как показано на Рисунке 2.\\ +void setup() { 
-Перепишите код программы (либо скопируйте в главное окно Arduino IDE) и нажмите кнопку **Загрузить** на панели быстрого доступа, если код программы введен верно в строке статуса над консолью появится надпись: **Загрузка завершена** и светодиод на макетной плате начнет мигать.\\+   Serial.begin(9600); 
 +   Serial.println("Введите ON для включения и OFF для выключения светодиода"); 
 +   pinMode(Led, OUTPUT); 
 + }
  
-Наша программа состоит из двух стандартных функций **//setup()//** , в теле которой расположено одно выражение и функции **//loop()//** с четырьмя выражениями.\\ +void loop() 
-Каждое выражение — это приказ процессору что — то сделать.\\ +  // Получаем команды на включение-выключение светодиода на 2 пине
-Выражения в рамках одного блока заключенного в фигурные скобки **“{“ “}”**, исполняются одно за другим, строго по порядку без всяких пауз и переключений. То есть, если мы говорим об одном конкретном блоке кода, его можно читать сверху вниз, чтобы понять что делается.\\ +   String str = Serial.readString(); 
-Как только Arduino включается, перепрошивается или нажимается кнопка RESET, начинает выполнятся функция **//setup()//**. То есть заставляет исполняться выражения в ней.\\ +  // Если команда «ON» то включаем светодиод. 
-После завершения работы **//setup()//** вызывается функция **//loop()//**, которая выполняется в бесконечном цикле.\\+   if (str == "ON" or str == "on"digitalWrite(Led, HIGH); 
 +  // Если команда «OFF» то выключаем светодиод. 
 +   if (str == "OFF" or str == "off"digitalWrite(Led, LOW);   
 + } 
 +</file>
  
-Теперь давайте попробуем понять почему написанная программа приводит в итоге к миганию светодиода.\\ +Для взаимодействия с монитором порта в функции ''setup()'' вызываем метод **begin** класса **Serial** и указываем скорость соединения. 
-Как известно, пины могут работать как выходы и как входы. Когда мы хотим чем-то управлять, то есть выдавать сигнал, нам нужно перевести управляющий пин в состояние работы на выход.\\ +Для удобства пользователяздесь же выводим в монитор инструкциикакие команды нужно вводить для управления. 
-В нашем примере мы управляем светодиодом на 2-ом пине, поэтому 2-ой пин перед использованием нужно сделать выходом. +В основном цикле программы при помощи метода ''readString()'' класса ''Serial'' считываем введенные команды в переменную ''str'' типа **String**. 
-Это делается выражением в функции setup(): +В условиях операторов **if** проверяем какая команда была введенаи соответственно включаем или выключаем светодиод.
-pinMode(2, OUTPUT); +
-<WRAP center round tip 60%> +
-Предназначение функция setup(): настроить плату как нужно, чтобы затем с ней работать. +
-</WRAP> +
-В функции setup() вызывается функция с именем pinMode(), которая устанавливает заданный по номеру пин в определенный режим: вход или выход. О каком пине и о каком режиме идёт речь указывается нами в круглых скобках, через запятую, сразу после имени функцииВ нашем случае мы хотим, чтобы 2-ой пин работал как выход. (`OUTPUT` означает выход, `INPUT`— вход.)\\ +
-<WRAP center round tip 60%> +
-Уточняющие значения, расположенный в скобках после имени функции - называются аргументами функции.  +
-</WRAP> +
-Перейдём к функции loop(). +
-<WRAP center round tip 60%> +
-Функция loop() называется основным циклом программы и предназначена для выполнения всех заложенных в программу действий. +
-</WRAP> +
-Пройдёмся по выражениям по порядку.\\ +
-Первое выражение — это вызов встроенной функции digitalWrite().\\ Она предназначена для подачи на заданный пин логической единицы (HIGH, 5 вольтили логического нуля (LOW, 0 вольт). В функцию digitalWrite() передаётся 2 аргумента: номер пина и логическое значение.\\ В итоге, первым делом мы зажигаем светодиод на 2-ом пине, подавая на него 5 вольт.\\ +
-Второе выражение вызов функции delay().\\ Функция delay() — это, встроенная функция, которая заставляет процессор уснуть на определённое время. Она принимает всего один аргумент: время в миллисекундах, которое следует спать.\\ В нашем случае это 1000 мс.\\ +
-Как только 1000 мс истекают, процессор просыпается и переходит к следующему выражению. В нашем примере это снова вызов знакомой нам встроенной функции digitalWrite(). Правда на этот раз вторым аргументом мы передаём значение `LOW`. То есть устанавливаем на 2-ом пине логический ноль, подаётся 0 вольт и светодиод гаснет.\\ +
-Четвертое выражение снова вызов функции delay() c аргументом 1000 мс.\\ +
-По истечении установленного времени выполнение снова передаётся к первому выражению функции loop().\\ +
-Если коротко описать работу программы, то получится следующий алгоритм:\\ +
-1. Поджигаем светодиод\\ +
-2. Спим 1000 миллисекунд\\ +
-3. Гасим светодиод\\ +
-4. Спим 1000 миллисекунд\\ +
-5. Переходим к пункту 1\\ +
-Таким образом мы получили проект с маячком, мигающим каждые 1000 мс + 1000 мс = 2000 мс = 2 сек.+
  
 ==== Дополнительное задание ==== ==== Дополнительное задание ====
 <WRAP center round tip 60%> <WRAP center round tip 60%>
-Попробуй подключить светодиод к другим контактам и поменяй номер в программе+Попробуй добавить другие команды, к примеру, что бы светодиод начинал мигать.
 </WRAP> </WRAP>