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 — это нормальное поведение.

Полезные материалы