PHP код:
	
#include <PCD8544.h>
static PCD8544 lcd;
#define M_SERVIS 1
#define M_OPTION_FAN 2
#define M_FAN 3
#define M_SPEED 
#define M_FUEL_POMP 5
#define M_TIME 6
#define M_ERROR1 7
#define M_RROR2 8
int servis_Limit[4] = {12000, 6000, 3000, 1000};
// переменные включения выключения вентилятора
int ERROR_COOLING_TEMP = 105;
int SET_RUN_FAN = 100;
int IF_OUT_TEMP_MORE_30 = 95;
int FAN_OFF = 80;
int s = 0, s2; // menu
static unsigned long time; 
int NEXT_MENU, NUMBER_WINDOWS_MENU = 1;
static const byte simbol[] = { B11111111, B01111110, B00111100, B00011000, B00011000 };
void setup(){
  lcd.begin(84, 48);
  pinMode(12, INPUT);
  Serial.begin(9600);
  lcd.createChar(9, simbol);
}
void loop(){
  _Button(12);
}
int _Button(int iii){
  if (digitalRead(iii) == LOW) { // нажата кнопка
    time = millis();
    do
    {
    } while ( digitalRead(iii) < 1); // ждём когда кннопка отпустится
    
    if ((millis()-time)>500){
      if (_DispleyAddMenu(NUMBER_WINDOWS_MENU +1 ,s2) && NEXT_MENU == 0);
      else NUMBER_WINDOWS_MENU + 1;
      s2++; 
      if (s2 > 5) s2 = 0;      
    }
  }
}
int _DispleyAddMenu(int fun, int str){ // номер функции, строка функции
  char buff[300];
  lcd.setCursor(0, 0);
  
  switch (fun) 
  {
   case M_SERVIS:
      // 5 максимальное колличество строк, 
      sprintf (buff,"%6s        %s-%7i%s%s-%7i%s%s-%7i%s%s-%5i%s%s", 
      "Servis", // название пункта меню
      " TO2", servis_Limit[0], "Km",
      " TO3", servis_Limit[1], "Km",
      " Oil", servis_Limit[2], "Km",
      " Chain", servis_Limit[3], "Km", // 4 строки меню
      " GO menu?"); //возврат в основно меню
      lcd.print (buff);
      lcd.setCursor(0, str+1); // переключаем символ > на новою строку
      lcd.write(9); // символ >
      Serial.println(str);
       if (str > 5-1){ // Если достигнут конец строк , выходим из цикла, записываем в переменную номер окна меню
        NUMBER_WINDOWS_MENU = M_SERVIS;
        NEXT_MENU = 1;
        return 0;
      }     
      break;
      
   case M_OPTION_FAN:
      // 5 максимальное колличество строк
       sprintf (buff,"%s           %s-%6i%s%s-%5i%s%s-%4i%s%s-%5i%s%s", 
      "Fan",
      " Error", ERROR_COOLING_TEMP, "C",
      " SetRun", SET_RUN_FAN, "C",
      " Temp>30", IF_OUT_TEMP_MORE_30, "C",
      " FanOff", FAN_OFF, "C",
       " GO menu?"); //возврат в основно меню
      lcd.print (buff);
      if (str > 5 - 1){ // Если достигнут конец строк , выходим из цикла, записываем в переменную номер окна меню
        NUMBER_WINDOWS_MENU = M_OPTION_FAN;
        return 0;
      }
      lcd.setCursor(0, str+1); // переключаем символ > на новою строку
      lcd.write(9); // символ >
break;
  }
}