#define FIRST_SEGMENT_PIN 2 #define SEGMENT_COUNT 7 // префикс «0b» означает, что целое число за ним записано в // в двоичном коде. Единицами мы обозначим номера сегментов // индикатора, которые должны быть включены для отображения // арабской цифры. Всего цифр 10, поэтому в массиве 10 чисел. // Нам достаточно всего байта (англ. byte, 8 бит) для хранения // комбинации сегментов для каждой из цифр. byte numberSegments[10] = { 0b00111111, 0b00001010, 0b01011101, 0b01011110, 0b01101010, 0b01110110, 0b01110111, 0b00011010, 0b01111111, 0b01111110, }; void setup() { for (int i = 0; i < SEGMENT_COUNT; ++i) pinMode(i + FIRST_SEGMENT_PIN, OUTPUT); } void loop() { // определяем число, которое собираемся отображать. Пусть им // будет номер текущей секунды, зацикленный на десятке int number = (millis() / 1000) % 10; // получаем код, в котором зашифрована арабская цифра int mask = numberSegments[number]; // для каждого из 7 сегментов индикатора... for (int i = 0; i < SEGMENT_COUNT; ++i) { // ...определяем: должен ли он быть включён. Для этого // считываем бит (англ. read bit), соответствующий текущему // сегменту «i». Истина — он установлен (1), ложь — нет (0) boolean enableSegment = bitRead(mask, i); // включаем/выключаем сегмент на основе полученного значения digitalWrite(i + FIRST_SEGMENT_PIN, enableSegment); } } Ребят, это код 13 эксперимента про секундомер . У меня вопрос почему здесь переменной типа интеджер(mask) присвоили значения byte.каким образом? Получается маина уже не должна это видеть как двличный код, разве нет?
Все числа в памяти записаны в двоичном коде независимо от того, как вы их объявляли в программе - в десятичной, 0b двоичной или 0x шестнадцатеричной. int занимает в памяти два байта (16 бит) и хранит значения от -32768 до 32767. byte занимает, как легко догадаться, один байт и значения от 0 до 255. Так что присвоение int'у значения byte безболезненно и никем не противопоказано.
А могли бы мы маск объявит переменной типа байт же, правильно. Да и байт в начале я мог бы объявить интом? Я просто не дома. Проверить не могу