bool
Тип bool хранит логическое значение true или false, занимает один байт и удобен для флагов состояния вроде «включено/выключено».
Полная статья
Описание
Тип bool предназначен для хранения логических значений: true («истина») или false («ложь»). Это самый простой способ отслеживать состояния типа «включено/выключено», «нажато/не нажато», «достигнуто/не достигнуто». Несмотря на то что переменной нужно всего один бит информации, каждая переменная типа bool занимает один байт памяти — такова минимальная адресуемая единица в архитектуре AVR и большинства других платформ Arduino.
В условиях if, while и других управляющих конструкций Arduino любое ненулевое число трактуется как true, а ноль — как false. Тем не менее лучше явно использовать bool-переменные там, где нужно логическое значение: код становится понятнее и меньше шансов допустить ошибку при сравнении.
Синтаксис
bool var = val;
Параметры
var: имя переменной — выбирается произвольно, по правилам именования идентификаторов в Arduino.val: начальное значение —trueилиfalse. Можно также присвоить целое число:0будет воспринято какfalse, любое другое значение — какtrue.
Пример кода
Пример ниже показывает базовое использование типа данных bool.
int LEDpin = 5; // светодиод на пине 5
int switchPin = 13; // кнопка без фиксации на пине 13, другой контакт подключён к GND
bool running = false;
void setup() {
pinMode(LEDpin, OUTPUT);
pinMode(switchPin, INPUT);
digitalWrite(switchPin, HIGH); // включить подтягивающий резистор
}
void loop() {
if (digitalRead(switchPin) == LOW) {
// кнопка нажата — подтяжка в норме удерживает пин HIGH
delay(100); // задержка для подавления дребезга кнопки
running = !running; // переключить переменную running
digitalWrite(LEDpin, running); // индикация через светодиод
}
}
Где применяется
- Флаг состояния кнопки — хранить, была ли кнопка нажата с момента последней проверки.
- Переключатель режима — чередовать два состояния (например, LED включён/выключен) по каждому нажатию.
- Признак завершения операции — сигнализировать в основном цикле, что датчик вернул корректные данные.
- Управление логикой — передавать в функцию флаг, который меняет её поведение, вместо «магических» чисел
0и1.
Практические замечания
- Присвоение
bool-переменной числа, отличного от0и1, технически допустимо: любое ненулевое значение станетtrue. Однако для ясности лучше писатьtrue/falseявно. - Если вы читаете состояние цифрового вывода через
digitalRead(), результат уже имеет типintсо значениемHIGH(1) илиLOW(0) — его можно напрямую присвоитьbool-переменной без дополнительных проверок. - Сравнение
bool-переменной через==сtrueилиfalseработает корректно, но опытные разработчики чаще пишут простоif (var)илиif (!var)— это короче и не менее читаемо. - На платах с ограниченным объёмом ОЗУ (например, Arduino Uno) массив из многих
bool-значений расходует в 8 раз больше памяти, чем теоретически необходимо. Если нужно хранить десятки флагов, рассмотрите побитовые операции сbyteилиuint8_t. - При выводе
bool-значения черезSerial.println()на экран появится1или0, а не словаtrue/false— это нормальное поведение.