Какие основные операторы используются в Arduino. Как применять арифметические, логические и битовые операторы в скетчах. Какие особенности имеет синтаксис Arduino.
Основные типы операторов в Arduino
Arduino использует синтаксис языка C++, поэтому в нем доступны все стандартные операторы этого языка. Их можно разделить на несколько основных категорий:
- Арифметические операторы
- Операторы сравнения
- Логические операторы
- Битовые операторы
- Операторы присваивания
- Операторы указателей
Рассмотрим подробнее каждую категорию и особенности их использования в Arduino.
Арифметические операторы в Arduino
Арифметические операторы используются для выполнения базовых математических операций:
- + (сложение)
- — (вычитание)
- * (умножение)
- / (деление)
- % (остаток от деления)
Пример использования арифметических операторов:
int a = 10; int b = 3; int sum = a + b; // 13 int diff = a - b; // 7 int prod = a * b; // 30 int quot = a / b; // 3 int rem = a % b; // 1
Важно учитывать, что при делении целых чисел результат округляется до целого. Для получения дробной части нужно использовать числа с плавающей точкой.
Операторы сравнения в Arduino
Операторы сравнения используются для сравнения двух значений. Результатом является булево значение true или false:
- == (равно)
- != (не равно)
- < (меньше)
- > (больше)
- <= (меньше или равно)
- >= (больше или равно)
Пример использования операторов сравнения:
int x = 5;
int y = 10;
bool isEqual = (x == y); // false
bool isNotEqual = (x != y); // true
bool isLess = (x < y); // true
bool isGreater = (x > y); // false
bool isLessOrEqual = (x <= y); // true
bool isGreaterOrEqual = (x > = y); // false
Операторы сравнения часто используются в условных конструкциях для принятия решений в программе.
Логические операторы в Arduino
Логические операторы позволяют объединять или инвертировать булевы выражения:
- && (логическое И)
- || (логическое ИЛИ)
- ! (логическое НЕ)
Пример использования логических операторов:
bool a = true;
bool b = false;
bool result1 = a && b; // false
bool result2 = a || b; // true
bool result3 = !a; // false
Логические операторы часто применяются в условных выражениях для создания сложных условий.
Битовые операторы в Arduino
Битовые операторы выполняют операции над отдельными битами числа:
- & (побитовое И)
- | (побитовое ИЛИ)
- ^ (побитовое исключающее ИЛИ)
- ~ (побитовое НЕ)
- << (сдвиг влево)
- >> (сдвиг вправо)
Пример использования битовых операторов:
int a = 5; // 00000101 в двоичном виде
int b = 3; // 00000011 в двоичном виде
int c = a & b; // 00000001 (1 в десятичном)
int d = a | b; // 00000111 (7 в десятичном)
int e = a ^ b; // 00000110 (6 в десятичном)
int f = ~a; // 11111010 (-6 в десятичном)
int g = a << 1; // 00001010 (10 в десятичном)
int h = a >> 1; // 00000010 (2 в десятичном)
Битовые операторы часто используются для эффективной работы с регистрами микроконтроллера и оптимизации кода.
Операторы присваивания в Arduino
Операторы присваивания используются для присвоения значений переменным:
- = (простое присваивание)
- += (присваивание с прибавлением)
- -= (присваивание с вычитанием)
- *= (присваивание с умножением)
- /= (присваивание с делением)
- %= (присваивание с остатком от деления)
- &= (присваивание с побитовым И)
- |= (присваивание с побитовым ИЛИ)
- ^= (присваивание с побитовым исключающим ИЛИ)
- <<= (присваивание со сдвигом влево)
- >>= (присваивание со сдвигом вправо)
Пример использования операторов присваивания:
int x = 10;
x += 5; // эквивалентно x = x + 5;
x -= 3; // эквивалентно x = x - 3;
x *= 2; // эквивалентно x = x * 2;
x /= 4; // эквивалентно x = x / 4;
x %= 3; // эквивалентно x = x % 3;
x &= 0xF0; // эквивалентно x = x & 0xF0;
x |= 0x0F; // эквивалентно x = x | 0x0F;
x ^= 0xFF; // эквивалентно x = x ^ 0xFF;
x <<= 2; // эквивалентно x = x << 2;
x >>= 1; // эквивалентно x = x >> 1;
Операторы присваивания позволяют сократить код и сделать его более читаемым.
Операторы указателей в Arduino
Arduino также поддерживает работу с указателями, как и стандартный C++. Основные операторы для работы с указателями:
- * (разыменование указателя)
- & (получение адреса переменной)
Пример использования операторов указателей:
int x = 10;
int* ptr = &x; // ptr содержит адрес переменной x
*ptr = 20; // изменяем значение x через указатель
Serial.println(x); // выведет 20
Работа с указателями требует осторожности, но может быть полезна для оптимизации использования памяти и повышения производительности в некоторых случаях.
Особенности использования операторов в Arduino
При работе с операторами в Arduino следует учитывать несколько важных моментов:
- Приоритет операторов. Операторы выполняются в определенном порядке, который может быть изменен с помощью скобок.
- Типы данных. Результат операции зависит от типов операндов. Например, деление целых чисел дает целочисленный результат.
- Переполнение. При работе с числами нужно следить за возможным переполнением, особенно на 8-битных микроконтроллерах.
- Побочные эффекты. Некоторые операторы, например инкремент и декремент, могут иметь побочные эффекты.
Применение операторов в условных конструкциях
Операторы часто используются в условных конструкциях, таких как if-else и switch-case. Рассмотрим пример:
int sensorValue = analogRead(A0);
if (sensorValue > 500 && sensorValue < 800) {
digitalWrite(LED_BUILTIN, HIGH);
} else if (sensorValue >= 800 || sensorValue <= 200) {
digitalWrite(LED_BUILTIN, LOW);
} else {
// Мигаем светодиодом
digitalWrite(LED_BUILTIN, HIGH);
delay(100);
digitalWrite(LED_BUILTIN, LOW);
}
В этом примере мы используем операторы сравнения и логические операторы для создания сложного условия, которое определяет поведение встроенного светодиода в зависимости от значения аналогового входа.
Оптимизация кода с помощью битовых операторов
Битовые операторы могут быть использованы для оптимизации кода и экономии памяти. Например, вместо использования отдельных булевых переменных для хранения состояний, можно использовать биты одной переменной:
#define STATE_A 0x01
#define STATE_B 0x02
#define STATE_C 0x04
byte states = 0;
// Установка состояния
states |= STATE_A;
// Проверка состояния
if (states & STATE_B) {
// Состояние B активно
}
// Сброс состояния
states &= ~STATE_C;
Такой подход позволяет эффективно хранить до 8 булевых значений в одном байте.
Уроки по робототехнике — Урок №4. Условный оператор или "Как Ардуино принимает решения"
Для занятия необходима установленная на компьютерах среда программирования miniBloq и драйвера для Arduino.
Макетные провода папа-папа |
Мин. 8 шт |
Контроллер Arduino UNO |
1 шт |
|
Светодиод |
1 шт |
Беспаечная макетная плата |
1 шт |
|
Резистор 10 кОм |
1 шт |
Резистор 220 Ом |
1 шт |
|
Тактовая кнопка | 1 шт |
Добрый день, ребята.
До сих пор наши устройства работали по заранее созданной линейной программе. Но на этом возможности Arduino, конечно же, не заканчиваются: наши программы можно и разветвлять — Для этого существует блок условие ЕСЛИ-ИНАЧЕ (Рис.1)
Рис. 1 Блок ЕСЛИ-ИНАЧЕ
Давайте установим его в нашу программу. (Рис.2)
Рис.2 Блок Если-Иначе
Работает он следующим образом:
то ардуино обработает все блоки указанные между блоками "если" и "иначе".
Если же условие не выполнится, то ардуино обработает все блоки, указанные между блоками "иначе" и "конец если".
Давайте напишем программу, которая будет в случае выполнения заданного условия будет включать светодиод на пине № 5, а иначе будет его выключать. (Рис.3)
Рис.3
Отлично. Теперь, чтобы протестировать наше устройство надо задать блоку если какое либо условие.
Я предлагаю вам обрабатывать нажатие кнопки, и если кнопка нажата — включать светодиод, иначе — выключать.
Дел в том, что при работе с цифровыми пинами мы можем не только записывать в них логическую единицу или ноль или ШИМ, но и считывать с них значение.
Значения может быть только два: либо логический 0 (земля, минус), либо логическая 1 (5v).
Для того, чтобы в нашем условии получить логическое значение конкретного пина нужно выбрать блок, указанный на рисунке, нажав на красную стрелку в условии (Рис.4):
Рис.4
После этого необходимо выбрать пин, к которому мы в дальнейшем подключим кнопку. Пускай это будет пин № 3. (Рис.5)
Рис.5. Выбор пина для подключения кнопки.
Теперь, когда программа написана, осталось собрать устройство. (Рис. 6)
Рис.6. Обработка нажатия тактовой кнопки
Обратите внимание: при нажатии кнопки она соедняет красную шину (5v) и пином № 3 на ардуино.
Но есть в этой схеме один непонятный момент - это резистор на 10кОм около кнопки. Соединяет пин №3 с минусом и без него ничего не будет работать.
Этот резистор называется подтягивающим. И действительно, без такого резистора, пин № 3 становится как бы подвешенным в воздухе, и в результате внешних наводок не может определиться: быть логической единицей или нулем.
Не забывайте про него и в ваших схемах.
Загрузим нашу программу в Arduino. Все должно работать.
1. Измените программу таким образом, чтобы светодиод светился, когда кнопка отпущена, а когда нажата — выключался.
2. Измените программу таким образом, чтобы после нажатия кнопки сведодиод включался на 5 секунд.
Программирование
ПрограммированиеОператоры- setup()
- loop()
Управляющие операторы
- if
- if..else
- for
- switch case
- while
- do..while
- break
- continue
- return
- goto
Синтаксис
- ; (точка с запятой)
- {} (фигурные скобки)
- // (одностроковый коментарий)
- /* */ (многостроковый коментарий)
- #define
- #include
Арифметические операторы
- = (присваивания)
- + (сложение)
- - (вычитание)
- * (умножение)
- / (деление)
- % (остаток от деления)
Операторы сравнения
- == (равно)
- != (не равно)
- < (меньше)
- > (больше)
- <= (меньше или равно)
- >= (больше или равно)
Логические операторы
- && (И)
- || (ИЛИ)
- ! (НЕ)
Указатели
- * (указатель)
- & (ссылка)
Битовые операторы
- & (побитовое И)
- | (побитовое ИЛИ)
- ^ (побитовое XOR или исключающее ИЛИ)
- ~ (побитовое НЕ)
- << (побитовый сдвиг влево)
- >> (побитовый сдвиг вправо)
Составные операторы
- ++ (инкремент)
- -- (декремент)
- += (составное сложение)
- -= (составное вычитание)
- *= (составное умножение)
- /= (составное деление)
- &= (составное побитовое И)
- |= (составное побитовое ИЛИ)
Константы
- HIGH | LOW
- INPUT | OUTPUT| INPUT_PULLUP
- true | false
- Целочисленные константы
- Константы с плавающей запятой
Типы данных
- void
- boolean
- char
- unsigned char
- byte
- int
- unsigned int
- word
- long
- unsigned long
- short
- float
- double
- string (массив символов)
- array (массив)
Преобразование типов данных
- char()
- byte()
- int()
- word()
- long()
- float()
Область видимости переменных и квалификаторы
- Область видимости переменной
- static (статичная)
- volatile
- const (константа)
Вспомогательные функции
- sizeof()
Библиотеки
- EEPROM
Цифровой ввод/вывод
- pinMode()
- digitalWrite()
- digitalRead()
Аналоговый ввод/вывод
- analogReference()
- analogRead()
- analogWrite()
Только для Due
- analogReadResolution()
- analogWriteResolution()
Расширенный ввод/вывод
- tone()
- noTone()
- shiftOut()
- shiftIn()
- pulseIn()
Работа со временем
- millis()
- micros()
- delay()
- delayMicroseconds()
Математические функции
- min()
- max()
- abs()
- constrain()
- map()
- pow()
- sq()
- sqrt()
Тригонометрические функции
- sin()
- cos()
- tan()
Генераторы случайных чисел
- randomSeed()
- random()
Биты и байты
- lowByte()
- highByte()
- bitRead()
- bitWrite()
- bitSet()
- bitClear()
- bit()
Внешние прерывания
- attachInterrupt()
- detachInterrupt()
Прерывания
- interrupts()
- noInterrupts()
Наши рубрики
Модули
Библиотеки
Авторские статьи
Уроки
Мои поделки
Лучшие проекты на Arduino
Обзоры
Моддинг
Переводы
Сообщение
Если у Вас есть опыт в работе с Arduino и собственно есть время для творчества, мы приглашаем всех желающих стать авторами статей публикуемых на нашем портале. Это могут быть как уроки, так и рассказы о ваших экспериментах с Arduino. Описание различных датчиков и модулей. Советы и наставления начинающим. Пишите и размещайте свои статьи в соответсвующей ветке форума.
Sparkfun Education — видеоресурсы по программированию Arduino
- Главная
- Видеоресурсы
- Программирование
Поток управления Arduino
Давайте рассмотрим, как программа Arduino выполняется последовательно и как ее можно визуализировать в виде блок-схемы, изучив всегда популярный пример Blink. Вы можете следить за Arduino и средой разработки Arduino: Установка Arduino IDE
Синтаксис программирования Arduino
Знание того, как правильно форматировать код, необходимо для правильной компиляции и запуска программы. Набор правил, определяющих, как форматировать, писать и структурировать ваш код, известен как «синтаксис», и именно его мы рассмотрим в этом выпуске «Приключений в науке», продолжая говорить о компьютерных науках. Мы рассмотрим историю языков C и C++ и то, как применять правила синтаксиса к программе Arduino.
Типы данных, литералы и переменные Arduino
В этом выпуске Adventures in Science мы исследуем различные типы данных в Arduino и способы использования литералов и переменных. В то время как в C есть только 3 основных типа данных, Arduino поддерживает гораздо больше. Вы также можете расширить различные типы данных, добавив ключевые слова, такие как «long», чтобы создать «long int», который использует 4 байта (вместо 2 в большинстве систем).
Арифметические операторы Arduino
Теперь давайте углубимся и рассмотрим различные арифметические операторы в C и C++, особенно то, как они используются в среде Arduino.
Основных операций всего 6: присваивание, сложение, вычитание, умножение, деление и модуль. Мы также рассмотрим составные операторы присваивания; как их можно использовать для выполнения математической операции над переменной и последующего сохранения результата в той же переменной.Условные операторы Arduino
Мы исследуем всегда важный условный оператор, который для C принимает форму if/else/then. Чтобы использовать их эффективно, вам нужно знать, как использовать операторы отношения, которые сравнивают два числа (например, равны ли два числа?). Знание этого может помочь вам, например, увидеть, была ли нажата кнопка в Arduino.
Логические операторы Arduino
Мы рассмотрим основные логические операторы в C и способы их использования для создания составных условных операторов. Имея дело с булевой логикой, мы должны исходить из того, что переменные могут иметь только одно из двух значений: истинное или ложное. Отсюда у нас есть три основных оператора: НЕ, И, ИЛИ. Мы можем комбинировать их для выполнения других операций, таких как исключающее ИЛИ (XOR). Используя эти операторы, мы можем создавать составные условные операторы, например, для поиска момента нажатия кнопки.
Петли Arduino
Давайте посмотрим на петли в Arduino. В частности, мы рассмотрим циклы while, do while и for и способы их применения в наших программах. По сути, циклы позволяют многократно выполнять фрагменты кода без необходимости копирования и вставки. Они также изменяют ход программы, и мы можем изменить способ выполнения циклов, изменив их условия, а также используя операторы «break» и «continue».
youtube.com/embed/ECHFxmKUDFQ?showinfo=0&wmode=opaque&rel=0">Начало работы с программированием и оборудованием
Набор изобретателя SparkFun (SIK) — отличный способ начать программирование и взаимодействие с оборудованием на языке программирования Arduino. SIK включает в себя все необходимое для выполнения 16 схем/проектов, которые научат вас считывать показания датчиков, отображать информацию на ЖК-дисплее, управлять двигателями и многому другому.
- Содержит полноцветное руководство с пошаговыми инструкциями, примерами кода и советами по устранению неполадок для 16 проектов
- Включает в себя новую экспериментальную схему Simon Says со всеми необходимыми светодиодами и тактильными кнопками
- Включает все компоненты, необходимые для начала работы
- Рекомендуется для детей от 10 лет и старше 6 лет
- Не требует опыта работы с электроникой, программированием или пайкой
КОМПЛЕКТ-12060 | Набор изобретателя SparkFun — V3.2 (один комплект) | |
ЛАБ-13109 | Лабораторный набор SparkFun Inventor's Kit V3.2 (10 комплектов плюс 2 сменных упаковки) |
Рекомендуется один комплект на каждых двух учеников.
Начало работы с электронным текстилем, электронным шитьем и электронным шитьем
Комплект LilyPad Design Kit (LDK) — отличный способ начать работу с электронным текстилем, электронным шитьем и электронным шитьем. LDK включает в себя все необходимое для выполнения 6 простых экспериментов, которые научат вас сшивать основные схемы, зажигать светодиоды, создавать интерактивные дизайны и многое другое.
- Специально разработаны для того, чтобы их можно было легко вшить в одежду — их даже можно стирать!
- Доступны различные платы ввода, вывода, питания и датчиков
- Онлайн-руководство содержит пошаговые инструкции по подключению каждой цепи с помощью прилагаемых деталей
- Содержит советы, приемы и способы устранения неполадок
- Рекомендуется для новичков любого возраста, умеющих держать иглу
LilyPad — это носимая технология, разработанная Лией Бьючли и совместно разработанная Лией и SparkFun. Часть этой продажи возвращается доктору Лии Бючли для дальнейшего развития и обучения электронному текстилю.
КОМПЛЕКТ-12073 | Дизайнерский комплект Lilypad (один комплект) | |
ДЕВ-11032 | ProtoSnap — набор для электронного шитья LilyPad (один комплект) | |
ДЭВ-11201 | ProtoSnap — LilyPad Development Simple (один комплект) |
Примечание. Из-за требований по доставке батарей в этом комплекте обработка заказов может занять больше времени, поэтому доставка в тот же день не допускается. Приносим извинения за возможные неудобства.
Учебная платформа для аппаратного и программного обеспечения
Думайте об этом как о наборе изобретателя SparkFun в одной плате! Цифровая песочница (DS) — это учебная платформа, в которой задействованы миры как программного, так и аппаратного обеспечения. Он питается от микроконтроллера, который может взаимодействовать с реальными входами, такими как датчики света или температуры, одновременно управляя светодиодами, двигателями и другими выходами.
- Оснащен всем на борту, вам нужно будет выполнить 13 экспериментов/проектов
- Дает учащимся возможность управлять светодиодом, измерять громкость предметов, определять температуру и многое другое
- Легко подключается к компьютеру с помощью USB (входит в комплект) для программирования
- Содержит онлайн-руководство с пошаговыми инструкциями и кодом полного примера .
- Позволяет учащимся программировать все эксперименты с помощью простого графического интерфейса вместо написания кода
- Не требует пайки и рекомендуется для начинающих в возрасте от 8 лет.
Примечание. В руководство DS Guide включены три дополнительных эксперимента со схемами, для которых потребуется дополнительный пакет Digital Sandbox.
ДЭВ-12651 | Цифровая песочница SparkFun (один комплект) | |
ЛАБ-13111 | SparkFun Digital Sandbox Lab Pack (10 комплектов цифровой песочницы; 10 дополнительных пакетов) | |
КОМПЛЕКТ-12963 | Дополнение для цифровой песочницы SparkFun (один комплект) |
Рекомендуется один комплект на каждых двух учеников.
Платформа Интернета вещей и робототехники
J5IK позволяет пользователям создавать подключенные к Интернету аппаратные проекты на основе JavaScript, объединяя вездесущий язык с одноплатным компьютером Tessel 2 и несколькими компонентами, чтобы пользователи могли немедленно приступить к работе. Этот комплект:
- Обеспечивает мощную основу для проектов IoT
- Включает все необходимое для завершения 14 схем/проектов
- Не требует опыта программирования или пайки
- Объединяет пользователей с процветающим сообществом и образцовой документацией
- Поддержка начинающих и более продвинутых проектов
Хотя возможности применения безграничны, комплект позволяет пользователям управлять и считывать данные с внешних датчиков и дисплеев, управлять двигателями, а также использовать и изучать JavaScript.
Рекомендуемый комплект к Международному дню NodeBots 2016!
youtube.com/embed/R6hV60vy4L4?showinfo=0&wmode=opaque">КОМПЛЕКТ-13847 | Набор изобретателя Johnny Five | |
ДЕВ-13841 | Тессель 2 |
Логический и побитовый | Расшифровка странного кода Arduino
Сохранить Подписаться
Пожалуйста, войдите, чтобы подписаться на это руководство.
После входа в систему вы будете перенаправлены обратно к этому руководству и сможете подписаться на него.
Другая ситуация с одинарным и двойным символом возникает между логическими операторами (оценка истинного
/ ложного
условия оператора) и побитовыми операторами (применением математических комбинаций к числам).
if (flag1 || flag2) { // Это оператор ЛОГИЧЕСКОЕ ИЛИ результат = значение1 | значение2; // Это оператор ПОБИТОВОЕ ИЛИ }
Компилятор редко будет жаловаться, если вы их перепутаете, потому что целые числа могут быть оценены как истина
(не ноль) или ложь
(ноль).
||
— это логический оператор ИЛИ , истина, если истинен операнд с любой стороны .
&&
является логическим оператором И , истинным, только если истинны операнды с обеих сторон .
!
- это логическое НЕ , которое отрицает операнд, следующий за ним. true
становится false
и наоборот. Обратите внимание, что это всего лишь 9 и ~
являются побитовыми операторами OR , AND , XOR и NOT . <<
и >>
— это побитовые операции сдвига , гарантирующие, что мы не сможем провести единую всеобъемлющую дифференциацию «один против двух символов». Мы не будем вдаваться в подробности самих операций, которые уже хорошо освещены в другом месте. Как упоминалось на предыдущей странице, любой из них может быть связан с заданием ( =
) как стенографическую операцию.
Побитовые сдвиги обладают интересным свойством деления или умножения целых чисел на степени двойки…
a = b << 1; // Умножить на 2 а = б << 2; // Умножить на 4 а = б << 3; // Умножить на 8 и т.д... а = б >> 1; // Делим на 2 а = б >> 2; // Делим на 4 а = б >> 3; // Деление на 8 и т.д...
В коде старой школы часто используется множество побитовых сдвигов, потому что умножение и деление в то время были относительно дорогостоящими операциями. Но современные компиляторы замечают эту возможность и автоматически выполняют такие оптимизации, если это выгодно, даже при «низких» настройках. Итак… если вам нужно разделить число на 8, просто разделите на 8, читается лучше . В других ситуациях битовые сдвиги по-прежнему очень уместны… например, в графике концептуально может быть более читабельным сдвиг пикселов влево или вправо на определенное количество битов. Все зависит от задачи и идеи, которую вы хотите донести.
Сравнить и назначить Указатели
Это руководство было впервые опубликовано 10 августа 2022 г.