Пытаюсь сделать меню, вот пример: Код (C): #include <Wire.h>//для часов #include <DS1307new.h>//для часов #include <LiquidCrystal.h> // библиотека экрана LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int lcd_key = 0; int adc_key_in = 0; #define btnRIGHT 0 #define btnUP 1 #define btnDOWN 2 #define btnLEFT 3 #define btnSELECT 4 #define btnNONE 5 bool key_menu=false; void setup(){ lcd.begin(16, 2); // запускаем библиотеку } void loop(){ if (key_menu==false) { printTimeToLCD(); // выводим время на экран lcd_key=read_LCD_buttons(); if (lcd_key==btnSELECT) { key_menu=true; } } else { lcd.print("NaNaNaNaNa"); } } int read_LCD_buttons() { adc_key_in = analogRead(0); if (adc_key_in > 1000) return btnNONE; if (adc_key_in < 50) return btnRIGHT; if (adc_key_in < 250) return btnUP; if (adc_key_in < 450) return btnDOWN; if (adc_key_in < 650) return btnLEFT; if (adc_key_in < 850) return btnSELECT; return btnNONE; } void printTimeToLCD(){ RTC.getTime(); byte static prevSecond=0; if(RTC.second!=prevSecond){ lcd.setCursor(4,0); if (RTC.hour<10) lcd.print("0"); lcd.print(RTC.hour); lcd.print(":"); if (RTC.minute<10) lcd.print("0"); lcd.print(RTC.minute); lcd.print(":"); if (RTC.second<10) lcd.print("0"); lcd.print(RTC.second); prevSecond=RTC.second; } } При нажатии на кнопку "Select" заходит в меню (пока для примера выводится надпись). Вопросы: 1) Почему выводит вместо "NaNaNaNaNa" 10 первых ячеек, весь дисплей заполняется этими буквами? 2) Почему спустя 1-2 минуты (обычно даже меньше) выкидывает из меню обратно на время? (вроде переменная key_menu не должна позволить сделать это, она ведь жестко устанавливается в значение true при нажатии)
1) Потому что после того, как вы делаете `print` курсор сдвигается вправо на количество напечатанных символов и следующий `print` начинает печатать с того места, где всё закончилось прошлый раз. Используйте `lcd.setCursor(0, 0)` для возврата курсора в начало. 2) Похоже на перезагрузку платы и начала скетча заново. Светодиод L в этот момент помаргивает?
Обрати внимание на контрольную лампочку, ее моргание "без причин" в процессе работы, скажет тебе о перезагрузке устройства.