У меня в скетче нужно избавиться от функции delay() в строке 48. Она во встроенной функции, так что осторожно. Код (C++): #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <Strela.h> // подключаем библиотеку для работы с платформой "Strela" boolean butt_flag = LOW; // флажок кнопки boolean lamp_flag = LOW; // флажок ламп unsigned long last_press = 0; // время последнего нажатия byte lamps[] = {L4, L3, L2, L1}; // порты ламп int pin = 0; // переменная для бегущего огонька LiquidCrystal_I2C lcd(LC_ADDR, LCEN, LCRW, LCRS, LC4, LC5, LC6, LC7); void setup() { uPinMode(S1, INPUT); // кнопку - на вход uPinMode(BUZZER, OUTPUT); // настройка всех ламп на выход for (int i = 0; i <= 3; i++) uPinMode(lamps[i], OUTPUT); lcd.begin(8, 2); lcd.setCursor(1, 0); lcd.print("Hello,"); lcd.setCursor(1, 1); lcd.print("friend"); delay(2000); lcd.clear(); } void loop() { // если кнопка нажата и нажата не была if (uDigitalRead(S1) && butt_flag == LOW && millis() - last_press > 200) { lamp_flag = !lamp_flag; // инвертируем флажок лампы butt_flag = HIGH; // записываем, что кнопка была нажата last_press = millis(); // записываем время последнего нажатия } // если кнопка не нажата и нажата была if (uDigitalRead(S1) == LOW && butt_flag) butt_flag = LOW; // записываем, что кнопка нажата не была // если флажок лампы if (lamp_flag) { tone(BUZZER, 350); lcd.clear(); lcd.setCursor(2, 0); lcd.print("True"); // бегущий огонёк с 4-мя лампами... uDigitalWrite(lamps[pin], HIGH); delay(125); uDigitalWrite(lamps[pin], LOW); pin++; if (pin > 3) pin = 0; } // иначе else { noTone(); lcd.setCursor(1, 0); lcd.print("False"); // выключаем все лампы for (int i = 0; i >= 3; i++) { uDigitalWrite(lamps[i], LOW); } } }