#include <TinyWireM.h>
#include <Tiny4kOLED.h>

uint8_t width = 128;
uint8_t height = 64;

char *myStrings[] = {
"1_This","2_This","3_This","4_This",
"5_This","6_This","7_This","8_This",
"9_This","10_This","11_This","12_This",
"13_This","14_This","15_This","16_This",
"17_This","18_This","19_This","20_This",
"21_This","22_This","23_This","24_This"};

const int buttonL =  5;     // вывод для кнопки
const int buttonR =  3;     // вывод для кнопки
const int buttonLR = 4;     // вывод для кнопки

const int  pas_1 = 2;     // 1 цифра пароля (от 0 до 9)
const int  pas_2 = 2;     // 2 цифра пароля (от 0 до 9)
const int  pas_3 = 8;     // 3 цифра пароля (от 0 до 9)
const int  pas_4 = 8;     // 4 цифра пароля (от 0 до 9)


int buttonStateL =  0;         // статус кнопки - нажата или отпущена
int buttonStateR =  0;
int buttonStateLR = 0;


int i=23;

int pas_ST_1 = 0, pas_ST_2 = 0, pas_ST_3 = 0, pas_ST_4 = 0, 
flag_menu = 60, flag_RES_DISP = 0, msecs = 100;
int  account_number = 0, flag_RES_ACC = 0, timer = 0;
int address_FLAG = 1, flag_EEPROM = 125, seconds = 0;
int seconds1 = 10, seconds2 = 20;

void pass_menu(){ //функция для меню ввода пароля, вывод на дисплей
  oled.clear();
  oled.setFont(FONT6X8P);
  oled.setCursor(0,8);
  oled.print(F("Pass:"));
  oled.setCursor(60,8);
  oled.print(pas_ST_1, DEC);
  oled.setCursor(73,8); 
  oled.print(pas_ST_2, DEC);
  oled.setCursor(86,8); 
  oled.print(pas_ST_3, DEC);
  oled.setCursor(99,8); 
  oled.print(pas_ST_4, DEC);
  oled.setCursor(flag_menu,26); 
  oled.print(F("^"));
}

void scan_buttons(){  //функция сканирование кнопок
  buttonStateLR = digitalRead(buttonLR);
  buttonStateR = digitalRead(buttonR);
  buttonStateL = digitalRead(buttonL);
}

//============================================================================================

void setup() {

  oled.begin(width, height, sizeof(tiny4koled_init_128x64br), tiny4koled_init_128x64br);

  oled.clear();
  oled.on();
  oled.setFont(FONT6X8P);
  oled.setCursor(5, 3);
  oled.print("LEDGER");
  delay(2000);

  oled.clear();
  oled.setFont(FONT6X8P);
  pinMode(buttonL, INPUT);        // режим вывода 
  pinMode(buttonR, INPUT);
  pinMode(buttonLR, INPUT);
  pass_menu ();
  

}

void loop() {

  scan_buttons(); //сканирование кнопок
  
  //обновление дисплея при изменении значения пароля
  if(flag_RES_DISP == 1){ pass_menu(); flag_RES_DISP = 0;}
  
  if(buttonStateLR == HIGH && (flag_menu >= 59 && flag_menu < 100)){ //переход к следующему числу пароля
    flag_menu+=13; if(flag_menu < 100){ flag_RES_DISP = 1;} delay(msecs);}
  
  if(flag_menu == 60){ //выбор 1 числа пароля
    if(buttonStateR == HIGH){  pas_ST_1++; flag_RES_DISP = 1; delay(msecs);}
    if(buttonStateL == HIGH){  pas_ST_1--; flag_RES_DISP = 1; delay(msecs);}
    if(pas_ST_1 > 9){ pas_ST_1 = 0;} if(pas_ST_1 < 0){  pas_ST_1 = 9;}
  }
  if(flag_menu == 73){ //выбор 2 числа пароля
    if(buttonStateR == HIGH){  pas_ST_2++; flag_RES_DISP = 1; delay(msecs);}
    if(buttonStateL == HIGH){  pas_ST_2--; flag_RES_DISP = 1; delay(msecs);}
    if(pas_ST_2 > 9){ pas_ST_2 = 0;} if(pas_ST_2 < 0){  pas_ST_2 = 9;}
  }
  if(flag_menu == 86){ //выбор 3 числа пароля
    if(buttonStateR == HIGH){  pas_ST_3++; flag_RES_DISP = 1; delay(msecs);}
    if(buttonStateL == HIGH){  pas_ST_3--; flag_RES_DISP = 1; delay(msecs);}
    if(pas_ST_3 > 9){ pas_ST_3 = 0;} if(pas_ST_3 < 0){  pas_ST_3 = 9;}
  }
  if(flag_menu == 99){ //выбор 4 числа пароля
    if(buttonStateR == HIGH){  pas_ST_4++; flag_RES_DISP = 1; delay(msecs);}
    if(buttonStateL == HIGH){  pas_ST_4--; flag_RES_DISP = 1; delay(msecs);}
    if(pas_ST_4 > 9){ pas_ST_4 = 0;} if(pas_ST_4 < 0){  pas_ST_4 = 9;}
  }
  
  if(flag_menu == 112 && buttonStateLR == HIGH){  //подтверждение пароля
    if(pas_ST_1 == pas_1 && pas_ST_2 == pas_2 && pas_ST_3 == pas_3 && pas_ST_4 == pas_4){
      flag_menu = 125; flag_RES_ACC = 1; delay(msecs);  }
  }

scan_buttons(); //сканирование кнопок

  if(flag_menu == 125){

    if (buttonStateL == HIGH) 
  
    { oled.clear();
      i--;
      oled.setFont(FONT6X8P);
      oled.setCursor(5, 3);
      oled.print(myStrings[i]);
      delay(100);
    }

  // если кнопка R нажата, то её состояние HIGH:
  if (buttonStateR == HIGH)

    { oled.clear();
      i++;
      oled.setFont(FONT6X8P);
      oled.setCursor(5, 3);
      oled.print(myStrings[i]);
      delay(100);
    }

    if (i>22) {i=-1;}

  }
}
ATTINY8520PU