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;
}
}