#include <Wire.h>
#include <U8glib.h>  // https://github.com/olikraus/u8glib/
#include "rus10x20.h"
#include "rus9x18.h"
#include "rus8x13.h"

#include "rus5x7.h"
#include "rus6x13.h"
#include "rus6x10.h"
#include "MyDigitsHelveticaBold24.h"

unsigned long last_press = 0;   


int temp  = 35;
int Menu = 0;

byte flag = 0;
int ButtonClick = 0;
int ButtonClick_prew = 1;
int MenuFlag = 0;
const int pin_SW = 3;       // Подключение кнопки

U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI

const uint8_t ArTermometr[]U8G_PROGMEM = {
  0x00,  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x07, 0x0E, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x1F, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x1F, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x07, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x1F, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x1F, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x1F, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x1F, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0C, 0x63, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x1C, 0x63, 0x80, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x3C, 0x63, 0xC0, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x70, 0x60, 0xE0, 0x00, 0x00, 0x00,
  0x00, 0x00, 0xE0, 0x60, 0x70, 0x00, 0x00, 0x00,
  0x00, 0x01, 0xC0, 0xF0, 0x30, 0x00, 0x00, 0x00,
  0x00, 0x01, 0xC3, 0xFC, 0x38, 0x00, 0x00, 0x00,
  0x00, 0x01, 0x87, 0xFE, 0x18, 0x00, 0x00, 0x00,
  0x00, 0x03, 0x87, 0xFE, 0x1C, 0x00, 0x00, 0x00,
  0x00, 0x03, 0x0F, 0xFF, 0x1C, 0x00, 0x00, 0x00,
  0x00, 0x03, 0x0F, 0xFF, 0x0C, 0x00, 0x00, 0x00,
  0x00, 0x03, 0x0F, 0xFF, 0x0C, 0x00, 0x00, 0x00,
  0x00, 0x03, 0x0F, 0xFF, 0x1C, 0x00, 0x00, 0x00,
  0x00, 0x03, 0x8F, 0xFE, 0x1C, 0x00, 0x00, 0x00,
  0x00, 0x03, 0x87, 0xFE, 0x18, 0x00, 0x00, 0x00,
  0x00, 0x01, 0x83, 0xFC, 0x38, 0x00, 0x00, 0x00,
  0x00, 0x01, 0xC1, 0xF8, 0x38, 0x00, 0x00, 0x00,
  0x00, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x00, 0x00,
  0x00, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x78, 0x01, 0xE0, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x3E, 0x0F, 0xC0, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
const unsigned char PROGMEM EnTermometr[] = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00,
  0x06, 0x00, 0x07, 0x82, 0x41, 0xE0, 0x00, 0x20, 0x07, 0xC0, 0x1F, 0xE4, 0x27, 0xFC, 0x01, 0xE0,
  0x01, 0xF0, 0xF8, 0x0C, 0x32, 0x0F, 0x07, 0x80, 0x00, 0x3F, 0xC0, 0x04, 0x20, 0x03, 0xFE, 0x00,
  0x00, 0x06, 0x00, 0x03, 0xC0, 0x00, 0x60, 0x00, 0x04, 0x00, 0x03, 0x80, 0x00, 0xE0, 0x00, 0x20,
  0x07, 0x80, 0x1F, 0xE0, 0x07, 0xFC, 0x01, 0xE0, 0x01, 0xF0, 0xF8, 0x7C, 0x1E, 0x0F, 0x07, 0x80,
  0x00, 0x3F, 0xC0, 0x0F, 0xF8, 0x03, 0xFE, 0x00, 0x00, 0x0F, 0x00, 0x01, 0xC0, 0x00, 0x70, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

const unsigned char PROGMEM batteryV[] = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x00,
  0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x00, 0x00, 0x83, 0x00, 0x00,
  0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00,
  0x00, 0x1F, 0x3F, 0xFF, 0xFF, 0x7F, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
  0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
  0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00,
  0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x01, 0xF0, 0x00,
  0x00, 0x00, 0xC0, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x20, 0x01, 0xF0, 0x00,
  0x00, 0x0C, 0xC0, 0x00, 0x40, 0x01, 0xF0, 0x00, 0x00, 0x0C, 0xC0, 0x00, 0x40, 0x01, 0xF0, 0x00,
  0x00, 0x0C, 0xC0, 0x00, 0xC0, 0x01, 0xF0, 0x00, 0x00, 0x0C, 0xC0, 0x00, 0x80, 0x01, 0xF0, 0x00,
  0x00, 0x0C, 0xC0, 0x01, 0x80, 0x01, 0xF0, 0x00, 0x00, 0x0C, 0xC0, 0x01, 0x80, 0x01, 0xF0, 0x00,
  0x00, 0x0C, 0xC0, 0x03, 0x80, 0x01, 0xF0, 0x00, 0x00, 0x0C, 0xC0, 0x07, 0x80, 0x01, 0xF0, 0x00,
  0x00, 0x0C, 0xC0, 0x07, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x0C, 0x40, 0x0F, 0x38, 0x01, 0xF0, 0x00,
  0x00, 0x0C, 0x00, 0x1F, 0xF0, 0x01, 0xF0, 0x00, 0x00, 0x0C, 0x00, 0x01, 0xE0, 0x01, 0xF0, 0x00,
  0x00, 0x0C, 0x00, 0x01, 0xE0, 0x01, 0xF0, 0x00, 0x00, 0x0C, 0x00, 0x01, 0xC0, 0x01, 0xF0, 0x00,
  0x00, 0x0C, 0x00, 0x01, 0x80, 0x01, 0xF0, 0x00, 0x00, 0x0C, 0xC0, 0x01, 0x80, 0x01, 0xF0, 0x00,
  0x00, 0x0C, 0x00, 0x03, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x0C, 0x00, 0x02, 0x00, 0x01, 0xF0, 0x00,
  0x00, 0x0C, 0x00, 0x02, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x0C, 0x00, 0x04, 0x00, 0x01, 0xF0, 0x00,
  0x00, 0x0C, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00,
  0x00, 0x0C, 0x00, 0x1F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0C, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00,
  0x00, 0x06, 0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
  0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
void battery ()
{
  u8g.setPrintPos(20, 10);
  u8g.setFont(rus6x10);
  u8g.print("НАПРЯЖЕНИЕ СЕТИ");

  u8g.setPrintPos(64, 50);
  u8g.setFont(u8g_font_gdr30r);
  u8g.print(temp);

  u8g.setPrintPos(110, 50);
  u8g.setFont(rus6x10);
  u8g.print("V");

  u8g.drawBitmapP(2, 12, 8, 48, batteryV);
}

void ArTemperature ()
{

  u8g.setPrintPos(6, 10);
  u8g.setFont(rus6x10);
  u8g.print("ТЕМПЕРАТУРА ВОЗДУХА");

  u8g.setPrintPos(64, 50);
  u8g.setFont(u8g_font_gdr30r);
  u8g.print(temp);

  u8g.setPrintPos(110, 23);
  u8g.setFont(rus6x10);
  u8g.print("О");

  u8g.drawBitmapP(12, 4, 8, 64, ArTermometr);

}


void EnTemperature ()
{
  u8g.setPrintPos(1, 10);
  u8g.setFont(rus6x10);
  u8g.print("ТЕМПЕРАТУРА ДВИГАТЕЛЯ");

  u8g.setPrintPos(64, 50);
  u8g.setFont(u8g_font_gdr30r);
  u8g.print(temp);

  u8g.setPrintPos(110, 23);
  u8g.setFont(rus6x10);
  u8g.print("О");

  u8g.drawBitmapP(0, 12, 8, 48, EnTermometr);

}

void Avarika ()
{
  u8g.firstPage();
  do {
    u8g.setPrintPos(6, 10);
    u8g.setFont(rus6x10);
    u8g.print("АВАРИЙНЫЙ СИГНАЛ");
  } while ( u8g.nextPage());

}

void setup() {
  Wire.begin();
  // u8g.setRot180();
  Serial.begin(9600);

  pinMode(pin_SW, INPUT_PULLUP);       //Сенсорная кнопка
}

void loop(void) {
  ButtonClick = digitalRead(pin_SW);

  if (ButtonClick == LOW && flag == 0 && MenuFlag == 0) {
    flag = 1;
  }


  if (ButtonClick == HIGH && flag == 1 && MenuFlag == 0) {
    flag = 0;
    (Menu >= 2 ) ? Menu = 0 : Menu++;
  }



    u8g.firstPage();
    do {
      switch (Menu) {
        case 0:
          battery ();
          break;
        case 1:
          EnTemperature ();
          break;
        case 2:
          ArTemperature ();
          break;
      }

    } while ( u8g.nextPage());
}