Bool (Boolean) - самый примитивный тип данных, а именно логический. Это говорит о том, что переменная может иметь два значения - 0 и 1 или false и true.
Наглядно это можно представить так:
Истина - true == 1
Ложь - false == 0
В среде Arduino эту переменную часто используют для хранения состояний условного объекта. Например, включен или выключен светодиод либо реле, была нажата кнопка или нет и прочее. Конечно же, в сравнениях, условиях и т.д. и т.п.
Переменная объявляется следующим образом:
bool var = true; // 1
Но есть один нюанс - если при объявлении не указать значение true, то по умолчанию она будет иметь значение false.
bool var; // 0
Так же переменная может принять любое число отличное от 0, что тоже вернет true.
bool var = 10; // 1
Массив:
bool array[2] = { true, false };
В памяти boolean занимает 1 байт, что достаточно много для хранения одного бита. Поэтому bool занимает столько же памяти, как byte и char. Связано это с тем, что архитектура вычислительной системы не способна адресовать один бит памяти. Минимальная единица - байт.
Наглядно true в памяти — это 0b00000001, а false - 0b00000000.
Убедится в этом можно следующим образом:
Serial.print(sizeof(bool)); // - выведет в монитор порта "1"
Как я писал выше - boolean используют для хранения состояния условного объекта. Давайте возьмем за такой объект обычный светодиод и будем включать и выключать его по нажатию на кнопку:
int btnPin = 10; // Пин кнопки
int ledPin = 13; // Пин светодиода
// 13й пин - встроенный на плату светодиод (UNO, Nano, Micro и т.п.)
bool flagLed = false; // Флаг состояния светодиода, будет изменятся при нажатии на кнопку
void setup() {
Serial.begin(9600); // Включаем порт
pinMode(ledPin, OUTPUT); // Пин светодиода
pinMode(btnPin, INPUT_PULLUP); // Пин кнопки
// Подключаем кнопку через встроенный в микроконтроллер подтягивающий к питанию резистор
}
void loop() {
if (!digitalRead(btnPin)) { // Считываем инвертированное состояние пина ,так как при не нажатой кнопке на нем будет высокий уровень
delay(150); // Антидребезг
flagLed = !flagLed; // Если кнопка была нажата, инвертируем состояние флага. Если был false, то в true и наоборот
Serial.println(flagLed); // Выводим в порт состояние флага 0 или 1
}
digitalWrite(ledPin, flagLed); // Задаем высокий или низкий уровень на светодиоде (HIGH или LOW)
}
(HIGH или LOW - литералы аналоги true и false.)
Как думаю, стало понятно - я сделал из кнопки включатель.
Хотелось бы привести простой пример с массивом, код будет выглядеть следующим образом:
void setup() {
Serial.begin(9600); // Включаем порт
bool array[5]; // Объявляем массив в 5 элементов
for (int i = 0; i < 5; i++) { // Пройдемся по массиву 5 раз по кол-ву элементов в массиве
if (i % 2 == 0) { // Пишем в массив true если остаток от деления i % 2 равен 0
array[i] = true;
} else { // Иначе false
array[i] = false;
}
}
for (int i = 0; i < 5; i++) { // В этом цикле последовательно выведем все элементы массив в порт
Serial.print(array[i]);
}
}
void loop() { }
Результатом данного кода будет: 10101