If arduino. Сравнения, условия и выбор в Arduino: полное руководство по использованию операторов if-else

Как работают условные операторы в Arduino. Какие типы условных операторов существуют. Как правильно использовать if, if-else и if-else-if в своих скетчах. Какие ошибки нужно избегать при работе с условиями.

Содержание

Основы условных операторов в Arduino

Условные операторы — это важнейший инструмент в программировании микроконтроллеров Arduino. Они позволяют программе принимать решения и выполнять различные действия в зависимости от заданных условий. Разберемся подробнее, как работают основные типы условных операторов в Arduino.

Для чего нужны условные операторы?

Условные операторы в Arduino выполняют следующие ключевые функции:

  • Проверяют истинность или ложность заданного логического условия
  • Сравнивают значения переменных между собой или с константами
  • Позволяют программе выбирать различные пути выполнения кода в зависимости от результата проверки условий
  • Делают программу гибкой и способной реагировать на изменение входных данных

Оператор if в Arduino

Простейшим условным оператором является if. Его структура выглядит следующим образом:


if (условное выражение) { // Код, который выполнится, если условие истинно }

Как работает оператор if:

  1. Проверяется условное выражение в скобках
  2. Если выражение истинно (true), выполняется код внутри фигурных скобок
  3. Если выражение ложно (false), код внутри скобок пропускается

Пример использования if в Arduino

Рассмотрим простой пример использования if для проверки оценки студента:

int studentGrade = 75; if (studentGrade > 60) { Serial.println(«Студент сдал экзамен»); }

В этом примере, если оценка студента больше 60, на серийный монитор будет выведено сообщение о сдаче экзамена. Если оценка 60 или меньше, никакого вывода не произойдет.

Оператор if-else в Arduino

Оператор if-else расширяет возможности простого if, позволяя задать альтернативное действие, если условие ложно. Его структура:

if (условное выражение) { // Код, если условие истинно } else { // Код, если условие ложно }

Как работает if-else?

Алгоритм работы if-else следующий:

  1. Проверяется условное выражение в if
  2. Если оно истинно, выполняется код в блоке if
  3. Если ложно, выполняется код в блоке else

Это позволяет программе всегда выполнять какое-то действие, независимо от результата проверки условия.


Пример использования if-else

Улучшим наш пример с оценкой студента, добавив else:

int studentGrade = 55; if (studentGrade > 60) { Serial.println(«Студент сдал экзамен»); } else { Serial.println(«Студент не сдал экзамен»); }

Теперь программа выведет соответствующее сообщение и в случае несдачи экзамена.

Оператор if-else-if в Arduino

Оператор if-else-if позволяет проверить несколько условий последовательно. Его структура:

if (условие1) { // Код, если условие1 истинно } else if (условие2) { // Код, если условие1 ложно, а условие2 истинно } else { // Код, если все предыдущие условия ложны }

Принцип работы if-else-if

Оператор if-else-if работает следующим образом:

  1. Проверяется первое условие (условие1)
  2. Если оно истинно, выполняется соответствующий блок кода
  3. Если ложно, проверяется следующее условие (условие2)
  4. Этот процесс продолжается, пока не будет найдено истинное условие
  5. Если все условия ложны, выполняется код в блоке else (если он есть)

Пример использования if-else-if

Расширим наш пример с оценками, добавив градации:


int studentGrade = 85; if (studentGrade >= 90) { Serial.println(«Отлично»); } else if (studentGrade >

= 80) { Serial.println(«Хорошо»); } else if (studentGrade >= 70) { Serial.println(«Удовлетворительно»); } else { Serial.println(«Неудовлетворительно»); }

Этот код выведет оценку «Хорошо» для значения 85.

Вложенные условные операторы в Arduino

В Arduino можно использовать вложенные условные операторы, помещая один оператор if внутрь другого. Это позволяет создавать более сложную логику принятия решений.

Структура вложенных условных операторов

Вложенные условные операторы могут иметь следующую структуру:

if (условие1) { if (условие2) { // Код, если оба условия истинны } else { // Код, если условие1 истинно, а условие2 ложно } } else { // Код, если условие1 ложно }

Пример использования вложенных условий

Рассмотрим пример с проверкой температуры и влажности:

int temperature = 25; int humidity = 60; if (temperature > 20) { if (humidity > 50) { Serial.println(«Тепло и влажно»); } else { Serial.println(«Тепло и сухо»); } } else { Serial.println(«Холодно»); }


В этом примере сначала проверяется температура, а затем, если она выше 20 градусов, проверяется влажность.

Логические операторы в условиях Arduino

Для создания более сложных условий в Arduino используются логические операторы. Основные из них:

  • && (AND) — истинно, если оба условия истинны
  • || (OR) — истинно, если хотя бы одно условие истинно
  • ! (NOT) — инвертирует значение условия

Пример использования логических операторов

Улучшим наш пример с температурой и влажностью:

int temperature = 25; int humidity = 60; if (temperature > 20 && humidity > 50) { Serial.println(«Тепло и влажно»); } else if (temperature > 20 || humidity > 50) { Serial.println(«Либо тепло, либо влажно»); } else { Serial.println(«Холодно и сухо»); }

Здесь мы используем && для проверки обоих условий и || для проверки хотя бы одного из них.

Оптимизация условных операторов в Arduino

При работе с условными операторами в Arduino важно помнить о производительности. Вот несколько советов по оптимизации:

Сортировка условий по вероятности

Расположите условия в порядке убывания вероятности их истинности. Это позволит программе быстрее находить нужное условие и экономить время на проверках.


Использование switch вместо множественных if-else

Если у вас много взаимоисключающих условий, основанных на значении одной переменной, используйте оператор switch вместо длинной цепочки if-else-if. Это сделает код более читаемым и может быть более эффективным.

Пример использования switch

int sensorValue = analogRead(A0); int range = map(sensorValue, 0, 1023, 0, 3); switch (range) { case 0: Serial.println(«Низкий уровень»); break; case 1: Serial.println(«Средний уровень»); break; case 2: Serial.println(«Высокий уровень»); break; default: Serial.println(«Ошибка чтения»); }

Этот код более эффективен, чем эквивалентная серия if-else-if для проверки значения range.

Типичные ошибки при использовании условных операторов в Arduino

При работе с условными операторами легко допустить ошибки. Вот несколько распространенных проблем и способы их избежать:

Использование = вместо ==

Одна из самых распространенных ошибок — использование оператора присваивания (=) вместо оператора сравнения (==) в условиях. Это может привести к неожиданному поведению программы.


Неправильно:

if (x = 5) { // Этот код всегда будет выполняться }

Правильно:

if (x == 5) { // Этот код выполнится только если x равно 5 }

Забытые фигурные скобки

Если вы пропустите фигурные скобки в однострочном условном операторе, только первая строка после if будет выполняться условно. Остальной код будет выполняться всегда.

Неправильно:

if (x > 5) Serial.println(«x больше 5»); Serial.println(«Это всегда напечатается»);

Правильно:

if (x > 5) { Serial.println(«x больше 5»); Serial.println(«Это напечатается только если x > 5»); }

Неправильный порядок условий

В цепочке if-else-if важен порядок условий. Неправильный порядок может привести к тому, что некоторые условия никогда не будут проверены.

Неправильно:

if (x >= 0) { Serial.println(«x неотрицательное»); } else if (x > 10) { Serial.println(«x больше 10»); } else { Serial.println(«x отрицательное»); }

В этом примере условие x > 10 никогда не будет истинным, так как оно уже покрывается первым условием.


Правильно:

if (x > 10) { Serial.println(«x больше 10»); } else if (x >= 0) { Serial.println(«x неотрицательное»); } else { Serial.println(«x отрицательное»); }

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


Arduino IDE: Условные операторы (if-else-if) — STEMpedia

Введение

Условные операторы проверяют, является ли заданное программистом логическое условие истинным или ложным. Они позволяют проверять переменную по значению/сравнивать переменную с другой переменной и заставляют программу действовать одним образом, если условие выполняется, и другим, если нет. Они делают программу очень мощной и могут использоваться для самых разных целей.

В этом руководстве обсуждаются следующие условные операторы:

  • если выписка
  • оператор if-else
  • оператор if-else-if .

Оператор

if

Ниже представлена ​​структура оператора if :

 If (условное выражение) {
Тело оператора if
}

которое может быть результатом6 либо в истинном, либо в ложном. Если оператор истинен, код в теле оператора выполняется.

Однако, если выражение оказывается ложным, код в теле просто пропускается.

Ниже приведен пример использования оператора if :

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

Оценка студента1 больше 33. Он сдал экзамен.

Оценка студента2 меньше или равна 33. Он провалил экзамен.

В приведенном выше коде Student1 имеет оценки выше 33; следовательно, первое утверждение истинно и выполняется. Для Student2 верно второе утверждение; следовательно, выполняется второй оператор.

Попробуйте поменять местами номера и посмотреть, что получится.

Убедитесь, что ваш ребенок в достаточной мере знакомится с такими футуристическими технологиями, как искусственный интеллект, с помощью практического опыта использования наборов искусственного интеллекта для детей, таких как Quarky. Зарегистрируйтесь сегодня, чтобы воспользоваться специальными предложениями на этот набор для искусственного интеллекта, которые появятся в ближайшее время.

Оператор if-else

При использовании оператора if код в его теле выполняет только , когда оператор if оценивается как истина. Если он оценивается как false, выполнение программы пропускает код в теле оператора if и переходит к оператору в теле 9.0003, если оператор .

При добавлении оператора else код в теле оператора else будет выполняться, но

будет выполняться только , когда соответствующий оператор if оценивается как ложный.

If (условное выражение)  {
Тело оператора if, если условное выражение истинно
}
else {
Тело оператора else, если условное выражение ложно
}

Когда условное выражение оценивается как true :

  • Код в теле инструкции , если выполняется оператор .
  • Код в теле инструкции else не выполняется.

Когда условное выражение оценивается как false :

  • Код в теле оператора , если оператор не выполняется.
  • Код в теле инструкции else выполняется.

Ниже приведен пример использования оператора if-else

:

Результат на серийном мониторе:

Оценка студента 1 выше 33. Он сдал экзамен.

Оценка студента2 меньше или равна 33. Он провалил экзамен.

Оператор if-else-if

Оператор if-else-if позволяет вычислять более одного условного выражения, чем оператор if-else .

Ниже приведена основная структура:

if (условное выражение 1) {
Тело оператора if, если условное выражение 1 истинно
}
else if (условное выражение 2)  {
Тело оператора else-if, когда условное выражение 1 ложно, а условное выражение 2 верно
}
else {
Тело оператора else, когда условное выражение 1 и 2 оба ложны
}

Когда условное выражение 1 оценивается как истинное:

  • Код в теле first , если выполняется оператор .
  • Коды в теле инструкции else-if и инструкции else не выполняются.

Когда условное выражение 1 оценивается как false и условное выражение 2 оценивается как true :

  • Выполняется код в теле оператора else-if .
  • Коды в теле инструкции if и else 9Оператор 0004 не выполняется.

Когда оба условного выражения 1 и 2 оцениваются как ложные:

  • Выполняется код в теле оператора else .
  • Коды в теле инструкции if и инструкции if-else не выполняются.

Ниже приведен пример использования оператора if-else-if :

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

Ваша оценка: A

Попробуйте поменять местами отметки и посмотрите, что получится.

 

10 способов уничтожить Arduino — защищенные схемыЗащищенные промышленные микроконтроллеры Arduino

Используйте кувалду, выстрелите в него пулей, бросьте в бассейн… Мы говорим не об этом. Мы собираемся показать вам, как электрически разрушить ваш Arduino, хотя многие из вас, похоже, уже знают, как это сделать, благодаря неудачному опыту. Вы понимаете, что мы имеем в виду… этот забавный запах, подпалина на компоненте или страшное сообщение об ошибке «программист не синхронизирован» — все это признаки того, что вы только что усвоили урок на собственном горьком опыте.

Зачем мы это делаем? Если у вас есть Arduino, полезно знать, что с ней можно делать, а что нельзя. Мы также хотим, чтобы вы подумали о покупке нашего Ruggeduino, который переживет все пытки, описанные ниже.

КАК

Настройте контакт ввода-вывода как выход, затем установите для него высокий уровень. Замкните контакт на землю. Теперь вы создали состояние перегрузки по току на контакте ввода-вывода, и оно будет уничтожено.

ПОЧЕМУ

Вот путь прохождения тока (схема для Arduino Uno, которую можно найти здесь):

В техническом описании микроконтроллера указан абсолютный максимальный ток на вывод 40 мА. При типичном внутреннем сопротивлении всего 25 Ом на вывод полное замыкание на землю может позволить протекать току до 200 мА, что более чем достаточно для разрушения вывода микроконтроллера.

ИСПРАВЛЕНИЕ

Ruggeduino защищает от этого разрушения, последовательно устанавливая сбрасываемый предохранитель (PTC) на 30 мА с каждым контактом ввода-вывода. Мало того, что ток надежно ограничен до 30 мА при любых условиях (подробнее об этом ниже), но и встроенное сопротивление предохранителя 220 Ом естественным образом сразу же ограничивает ток до 5 В/220 = 23 мА.

КАК

Настройте два контакта ввода/вывода в качестве выходов, затем установите один высокий, а другой низкий. Теперь соедините штифты вместе. Теперь вы создали состояние перегрузки по току на обоих выводах ввода-вывода, и они будут уничтожены.

ПОЧЕМУ

Путь протекания тока аналогичен методу № 1, описанному выше, за исключением того, что обратный путь заземления проходит через микроконтроллер.

ИСПРАВЛЕНИЕ

Так же, как и в методе № 1, Ruggeduino защищает от этого разрушения, последовательно подключая сбрасываемый предохранитель (PTC) на 30 мА к каждому контакту ввода-вывода.

HOW

Подайте напряжение более 5,5 В на любой контакт ввода/вывода. Контакт ввода/вывода разрушен.

ПОЧЕМУ

Этот метод разрушения смещает в прямом направлении диод защиты от электростатического разряда, встроенный в микроконтроллер. Вот модель каждого вывода ввода-вывода микроконтроллера из таблицы данных Atmel ATmega328P:

Как только напряжение на выводе ввода-вывода превышает напряжение питания (5 В) примерно на 0,5 В, верхний диод начинает проводить ток. Это нормально для отвода кратковременного перенапряжения, такого как ESD (электростатический разряд), но этот диод не предназначен для постоянного включения. Он просто сгорит и перестанет защищать штифт.

На этой диаграмме показано протекание тока при приложении перенапряжения к контакту ввода/вывода.

Если внутренний защитный диод не открывается, то перенапряжение разрушает контакт ввода/вывода. Если защитный диод выходит из строя из-за короткого замыкания, это еще хуже, потому что теперь перенапряжение применяется ко всему источнику питания +5 В на Arduino. Это означает, что он достигнет других компонентов, таких как микросхема интерфейса USB, и уничтожит их.

THE FIX

На Ruggeduino каждый контакт ввода-вывода защищен сбрасываемым предохранителем на 30 мА (со встроенным сопротивлением 220 Ом) и стабилитроном на 5,1 В, которые вместе служат для ограничения напряжения на выводе до 5,5 В, независимо от приложенного перенапряжения (до 24В).

Теперь вместо тока, протекающего через внутренний защитный диод микроконтроллера, он безопасно течет через стабилитрон, на землю и обратно к источнику перенапряжения. Предохранитель PTC ограничивает этот ток до 30 мА, поэтому стабилитрон 5,1 В не рассеивает чрезмерную мощность.

КАК

Подайте питание на Arduino через штырь разъема Vin, но поменяйте полярность подключения питания Vin/GND. Вы уничтожите несколько устройств на Arduino.

ПОЧЕМУ

Отсутствует защита от обратного напряжения при подаче напряжения на контакт разъема Vin. Ток будет течь от контакта GND ATmega328P обратно через контакт 5V, обратно через регулятор 5V и на Vin. То же самое будет и с микроконтроллером ATmega16U2. И микроконтроллеры, и регулятор 5В будут уничтожены.

ИСПРАВЛЕНИЕ

На Ruggeduino контакт Vin защищен 30-вольтовым блокирующим диодом, как показано на схеме.

Вы можете подать до 30 В напряжения обратной полярности на контакт Vin без каких-либо повреждений.

КАК

Подайте напряжение 6 В или выше на контакт разъема 5 В. Многие компоненты Arduino будут разрушены, и это напряжение также может появиться на USB-порте вашего компьютера, что может привести к его повреждению.

ПОЧЕМУ

На контакте разъема 5 В нет защиты. Это напряжение напрямую подключено к микроконтроллеру ATmega328P, микроконтроллеру USB-интерфейса ATmega16U2 и регулятору 5 В, которые могут быть повреждены напряжением, превышающим 6 В, и возникающими в результате токами. Вот пример пути тока через микроконтроллер ATmega328P.

Распространено заблуждение, что регулятор Arduino 5V гарантирует, что напряжение 5V останется на уровне 5V, несмотря ни на что. ОН НЕ БУДЕТ! Единственное, что может сделать регулятор 5V, это управлять током, поступающим от USB-порта или внешнего разъема питания постоянного тока. Если ток поступает от внешнего источника питания, напрямую подключенного к контакту разъема 5V, регулятор ничего не может с этим поделать.

Другим последствием подачи напряжения более 5 В на контакт разъема 5 В является возможное повреждение USB-порта ПК. Если Arduino питается от USB, то это чрезмерное напряжение может привести к обратному протеканию тока через переключающий напряжение MOSFET T1 и обратно к USB-порту ПК.

ИСПРАВЛЕНИЕ

В Ruggeduino схема отключения напряжения гарантирует, что штырь разъема 5 В отсоединен, если оно превышает 5,5 В.

Вы можете подать напряжение до 24 В на контакт разъема 5 В, и компоненты Ruggeduino никогда его не увидят, и ничего не будет повреждено.

КАК

Подайте напряжение 3,6 В или выше на контакт разъема 3,3 В. Любые подключенные экраны 3,3 В или другие устройства, питающиеся от этого контакта, будут уничтожены. Если подается не менее 9 В, это напряжение может разрушить регулятор Arduino 3,3 В, а также вернуть ток в USB-порт ПК.

ПОЧЕМУ

Контакт разъема 3,3 В не имеет схемы защиты. Это напряжение напрямую подключено к регулятору Arduino 3,3 В и любым другим шилдам или устройствам, которые питаются от этого контакта разъема. Если напряжение превысит 9 В, регулятор 3,3 В выйдет из строя и может позволить току течь обратно к узлу 5 В, а затем обратно к USB-порту ПК. Чрезмерное напряжение также выведет из строя два устройства, подключенных к узлу 5V: микроконтроллеры ATmega328P и ATmega16U2.

THE FIX

Подобно схеме защиты 5 В, Ruggeduino имеет схему отключения напряжения для контакта разъема 3,3 В. Любое напряжение, подаваемое на этот контакт выше 3,6 В, отключает контакт от узла Ruggeduino 3,3 В.

КАК

Подайте питание на Arduino от разъема питания постоянного тока и закоротите контакт разъема Vin на GND. Блокировочный диод Arduino будет разрушен, а дорожки на плате Arduino могут расплавиться и разрушиться.

ПОЧЕМУ

На контакте разъема Vin отсутствует защита от ограничения тока. Короткое замыкание между Vin и GND эффективно замыкает вход разъема питания постоянного тока и превышает номинальный ток блокировочного диода.

Величина протекающего тока ограничена только сопротивлением дорожек платы Arduino и допустимым током источника питания. Если оно достаточно большое, диод D1 выйдет из строя, а дорожки на печатной плате могут расплавиться из-за нагрева, вызванного этим большим током.

THE FIX

Ruggeduino имеет сбрасываемый предохранитель PTC на 500 мА, включенный последовательно с входной цепью питания постоянного тока (так же, как тот, который защищает вход питания USB). Этот предохранитель ограничивает ток до безопасного уровня, даже если Vin замкнут на GND.

КАК

Если вы питаете плату напряжением 5 В, подаваемым на контакт разъема 5 В, и у вас есть схема, подключенная к контакту Vin (или замыкание Vin на GND), то ток потечет в обратном направлении через регулятор 5 В и разрушит его.

ПОЧЕМУ

На регуляторе 5 В нет защиты от обратного напряжения, поэтому ток может течь от штырька разъема 5 В, обратно через регулятор и ко всему, что подключено к Vin.

ИСПРАВЛЕНИЕ

Ruggeduino имеет блокирующий диод прямо на входе стабилизатора 5 В, что гарантирует, что ток не может течь назад через регулятор, даже если цепь подключена к контакту Vin.

КАК

Подайте напряжение >13 В на контакт разъема сброса. Микроконтроллер ATmega328P будет поврежден.

ПОЧЕМУ

Контакт разъема сброса напрямую подключен к контакту сброса на ATmega328P. Хотя этот контакт выдерживает 13 В, более высокое напряжение повредит устройство.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *