// Библиотека для работы с кнопкой #include // Библиотека для работы с текстовым дисплеем по шине I²C #include // Создаём объект для работы с дисплеем // В параметрах передаём I²C-адрес дисплея, кол-во строк и символов LiquidCrystal_I2C lcd(0x38, 16, 2); // Создаём переменную для хранения тестового числа byte value = 127; // Максимальныое знакоместо на дисплее constexpr int COL_MAX = 11; // Индекс положения курсора int digitIndex = 0; // Создаём объекты кнопок для управления TroykaButton buttonLeft(3); TroykaButton buttonRight(2); TroykaButton buttonSet(A3); void setup() { // Инициализируем кнопки buttonLeft.begin(); buttonRight.begin(); buttonSet.begin(); // Инициализируем дисплей lcd.init(); // Включаем подсветку lcd.backlight(); // Отображаем курсор lcd.cursor(); // Включаем мигание курсора lcd.blink(); // Печатаем данные на дисплей printDataLCD(); lcd.setCursor(COL_MAX - digitIndex, 0); } void loop() { // Считываем состояние кнопок buttonLeft.read(); buttonRight.read(); buttonSet.read(); // Если нажата кнопка «вправо», смещаем курсор на одно знакоместо «вправо» if (buttonRight.isClick() && digitIndex > 0) { digitIndex--; lcd.setCursor(COL_MAX - digitIndex, 0); } // Если нажата кнопка «влево», смещаем курсор на одно знакоместо «влево» if (buttonLeft.isClick() && digitIndex < 7) { digitIndex++; lcd.setCursor(COL_MAX - digitIndex, 0); } // Если нажата кнопка «Установка» // «переворачиваем» значение выбранного курсором бита if (buttonSet.isClick()) { bitInvert(digitIndex); printDataLCD(); lcd.setCursor(COL_MAX - digitIndex, 0); } } // Функция для вывода числа на дисплей в системах счисления BIN и DEC void printDataLCD() { lcd.clear(); lcd.setCursor(0, 0); lcd.print("BIN:"); printByteLCD(); lcd.setCursor(0, 1); lcd.print("DEC:"); lcd.print(value); } // Функция для вывода числа по байтам void printByteLCD() { for (int i = 7; i >= 0; i--) { lcd.print(bitRead(value, i)); } } // Функция для инвертирования значение бита void bitInvert(int bitNumber) { bool bitValue = bitRead(value, bitNumber); bitValue = !bitValue; bitWrite(value, bitNumber, bitValue); }