Ардуина сходит с ума, обновляется экран

Простейший код но я завис, сначала все работало, но после определённого времени и клацания по кнопка ардуина зависла и постоянно обновляет экран, возможно где то я напартачил с кодом, так как при загрузке других скетчей, все работает стабильно, я конечно не полное дерево но реально не вижу в чем может быть проблема, может кто сможет подсказать, к ардуино подключен драйвер постоянного тока на 24 вольта, управляется 3 пинами, два отвечает за STEP и один за DIR, так же 3 сенсорные кнопки, и один кликер подтягиваю встроенным резистором, да, код ужасен, но это первая версия, ещё не “причесана”, но все ни как не пойму где мог накосячить, что по истечению времени начал сходить с ума. надеюсь на помощь

//***********************************************Проект медогонки, V1****************************************
#include <UTFT.h>
#include <EEPROM.h>
#define klcL 2            //пин левого сенсора
#define klcR 3            //пин правого сенсора
#define klcC 4            //пин центрального сенсора
#define STRBTN 9          //пин главной пускающей кнопки
#define indStart 8        //пин светодиода, в кнопке старт 
#define DIR_R 5
#define DIR_L 7
#define STEP_D 6

//Подключаем и настраиваем дисплей
 UTFT myGLCD (ILI9486,38,39,40,41);
 extern uint8_t BigFont[];
 extern uint8_t SevenSegNumFont[];

// переменные
 boolean buttonC, buttonL, buttonR, batclik, flagr = false, flagl = false, orentir;

 float i;
 float TM, ckl, sdO;
 int pos, str_sdO, strtm, strckl, str_sdO_D;

 uint64_t btnTL, btnTC, btnTR, STBf, otshet; 
 

void setup(){
// настройка пинов  
  pinMode(klcL, INPUT);
  pinMode(klcR, INPUT);
  pinMode(klcC, INPUT);
  pinMode(STRBTN, INPUT_PULLUP);
  pinMode(indStart, OUTPUT);
  pinMode(DIR_R, OUTPUT);
  pinMode(DIR_L, OUTPUT);
  pinMode(STEP_D, OUTPUT);
  	TCCR1A = TCCR1A & 0xe0 | 1;
    TCCR1B = TCCR1B & 0xe0 | 0x09;

//Считываем данные из дампа памяти и записи в переменные
  TM = EEPROM.read(10);
  sdO = EEPROM.read(20);
  ckl = EEPROM.read(30);

//очистка дисплея и заливка фона 
  myGLCD.InitLCD();
  myGLCD.clrScr();
  myGLCD.setBackColor(VGA_BLACK );
  menu_draw();}


void loop(){

if(pos > 4 && strckl != ckl){
             prstart(str_sdO,60);
             prstart(strtm,120);
             prstart(strckl,180);
                                 if(str_sdO < sdO && pos == 5){

                                                                                 str_sdO = str_sdO + ( 10*(sdO / 100));
                                                                                 str_sdO = constrain(str_sdO, 0, sdO);
                                                                                 str_sdO_D = map(str_sdO, 0, 400, 40, 255);
                                                                                 analogWrite(STEP_D, str_sdO_D);}
                                if(str_sdO != 0 && pos == 6){

                                                                                 str_sdO = str_sdO - ( 10*(sdO / 100));
                                                                                 str_sdO = constrain(str_sdO, 0, sdO);
                                                                                 str_sdO_D = map(str_sdO, 0, 400, 40, 255);
                                                                                 analogWrite(STEP_D, str_sdO_D);}                                              
                                 
                                 if(str_sdO == sdO && pos == 5 && strckl != ckl && millis() - otshet > 1000){
                                 otshet = millis();
                                 strtm = strtm-1;
                                 strtm = constrain(strtm, 0,TM);
                                                                if(strtm == 0){
                                                                               pos = 6;
                                                                               strtm = TM;
                                                                               strckl++;}}

                                 if(str_sdO == 0 && strckl != ckl && pos == 6){
                                  delay(2000);
                                  if( strckl%2 ==1){digitalWrite(DIR_R, 1);
                                                    digitalWrite(DIR_L, 0);}        
                                              else {digitalWrite(DIR_R, 0);
                                                    digitalWrite(DIR_L, 1);}
                                 pos = 5;
                                 strtm = TM;}

}if(strckl == ckl){
                   digitalWrite(indStart,0);
                   str_sdO_D = 0;
                   analogWrite(STEP_D, str_sdO_D);
                   menu_draw();
                   strckl = 0;
}else{
      buttonR = digitalRead(klcR);
                                  if(buttonR && !flagr && millis() - btnTR > 150){ 
                                                                                 btnTR = millis();
                                                                                 flagr = true; 
                                                                                 if(pos == 0 ){menu_povtor();
                                                                                               return;}
                                                                                 if(pos == 1 ){TM ++;
                                                                                               TM = constrain(TM, 0,40);
                                                                                               prNom(TM);}
                                                                                 if(pos == 2){sdO ++;
                                                                                              sdO = constrain(sdO, 0,400);
                                                                                              prNom(sdO);}
                                                                                 if(pos == 3){ckl ++;
                                                                                              ckl = constrain(ckl, 0,10);
                                                                                              prNom(ckl);}}

                                  if(buttonR && flagr && millis() - btnTR > 500){ 
                                                                                btnTR = millis(); 
                                                                                if(pos == 1 ){TM = TM + 5;
                                                                                              TM = constrain(TM, 0,40);
                                                                                              prNom(TM);}
                                                                                if(pos == 2){sdO = sdO + 10;
                                                                                             sdO = constrain(sdO, 0,400);
                                                                                             prNom(sdO);}
                                                                                if(pos == 3){ckl = ckl + 3;
                                                                                             ckl = constrain(ckl, 0,10);
                                                                                             prNom(ckl);}}
                               
                                  if(!buttonR && flagr && millis() - btnTR > 150){
                                    flagr = false;
                                    btnTR = millis();
                                  }
                                   



     buttonL = digitalRead(klcL);
                                 if(buttonL && !flagl  && millis() - btnTL >150){ 
                                                                              btnTL = millis();
                                                                              flagl = true; 
                                                                              if(pos == 0){ menu_vremya();
                                                                                           return;}
                                                                              if(pos == 1){TM --;
                                                                                           TM = constrain(TM, 0,40);
                                                                                           prNom(TM);}
                                                                              if(pos == 2){sdO --;
                                                                                           sdO = constrain(sdO, 0,400);
                                                                                           prNom(sdO);}
                                                                              if(pos == 3){ckl --;
                                                                                           ckl = constrain(ckl, 0,10);
                                                                                           prNom(ckl);}}
                                  if(buttonL && flagl && millis() - btnTL > 500){ 
                                                                                btnTL = millis(); 
                                                                                if(pos == 1 ){TM = TM - 5;
                                                                                              TM = constrain(TM, 0,40);
                                                                                              prNom(TM);}
                                                                                if(pos == 2){sdO = sdO - 10;
                                                                                             sdO = constrain(sdO, 0,400);
                                                                                             prNom(sdO);}
                                                                                if(pos == 3){ckl = ckl - 3;
                                                                                             ckl = constrain(ckl, 0,10);
                                                                                             prNom(ckl);}}
                               
                                  if(!buttonL && flagl && millis() - btnTL > 150){
                                    flagl = false;
                                    btnTL = millis();
                                  }



     buttonC = digitalRead(klcC);
                                 if(buttonC == HIGH && millis() - btnTC > 300){ 
                                                                              btnTC = millis(); 
                                                                              if(pos == 0){ menu_oborot();
                                                                                           return;}
                                                                              else{ EEPROM.update(10 ,TM);
                                                                                    EEPROM.update(20 ,sdO);
                                                                                    EEPROM.update(30 ,ckl);
                                                                                    menu_draw();}}}
batclik = !digitalRead(STRBTN);
                               if(batclik == HIGH && millis() - STBf > 400){
                                                                            strtm = TM;
                                                                            str_sdO = 0;
                                                                            STBf == millis();
                                                                            if(pos < 5){
                                                                                        digitalWrite(indStart,1);
                                                                                        star_med();} 
                                                                            else{
                                                                                 digitalWrite(indStart,0);
                                                                                 str_sdO_D = 0;
                                                                                 analogWrite(STEP_D, str_sdO_D);
                                                                                 menu_draw();}}
}

void prstart(int peremen, int posi){
  myGLCD.setBackColor(VGA_BLACK);
  myGLCD.setColor(VGA_SILVER);
  myGLCD.setFont(SevenSegNumFont);
  myGLCD.printNumI(peremen, CENTER, posi,3,'0');}

// вывод числа на дисплей для настроек
  void prNom(int peremen){
  myGLCD.setBackColor(VGA_BLACK);
  myGLCD.setColor(VGA_SILVER);
  myGLCD.setFont(SevenSegNumFont);
  myGLCD.printNumI(peremen, CENTER, 100, 3, '0');}

// основное меню
  void menu_draw(){
  myGLCD.clrScr();
  myGLCD.setColor(VGA_SILVER);
  myGLCD.setFont(SevenSegNumFont); 
  myGLCD.setBackColor(VGA_BLACK );
  myGLCD.printNumI(TM, 350, 50, 2,'0');
  myGLCD.printNumI(sdO, 320, 125, 3,'0');
  myGLCD.printNumI(ckl, 350, 200, 2,'0');
  myGLCD.setFont(BigFont);
  myGLCD.setColor(VGA_RED);
  myGLCD.print("BPEM\x95", 30, 75);
  myGLCD.print("O\x80OPOT\x91", 30, 150);
  myGLCD.print("\x89OBTOP", 30, 225);
  myGLCD.setColor(VGA_RED);
  myGLCD.print("ME\x82O\x81OHKA_V1", CENTER, 15);
  myGLCD.setColor(VGA_SILVER);
  myGLCD.fillRect(0, 270, 145, 320);
  myGLCD.fillRect(165, 270, 315, 320);
  myGLCD.fillRect(335, 270, 475, 320);
  myGLCD.setFont(BigFont);
  myGLCD.setColor(VGA_RED);
  myGLCD.setBackColor(VGA_SILVER );
  myGLCD.print("BPEM\x95", 30, 285);
  myGLCD.print("O\x80OPOT\x91", CENTER, 285);
  myGLCD.print("\x89OBTOP\x91", 355, 285);
  pos = 0;}

// меню время
  void menu_vremya(){
  myGLCD.clrScr();
  prNom(TM);
  myGLCD.setFont(BigFont);
  myGLCD.setColor(VGA_RED);
  myGLCD.print("BPEM\x95", CENTER, 15);
  myGLCD.setColor(VGA_SILVER);
  myGLCD.fillRect(0, 270, 145, 320);
  myGLCD.fillRect(165, 270, 315, 320);
  myGLCD.fillRect(335, 270, 475, 320);
  myGLCD.setFont(BigFont);
  myGLCD.setBackColor(VGA_SILVER );
  myGLCD.setColor(VGA_RED);
  myGLCD.print("-", 65, 285);
  myGLCD.print("MEH\x94", CENTER, 285);
  myGLCD.print("+", 395, 285);
  pos = 1;}

// меню оборотов
  void menu_oborot(){
  myGLCD.clrScr();
  prNom(sdO);
  myGLCD.setFont(BigFont);
  myGLCD.setColor(VGA_RED);
  myGLCD.print("O\x80OPOT\x91", CENTER, 15);
  myGLCD.setColor(VGA_SILVER);
  myGLCD.fillRect(0, 270, 145, 320);
  myGLCD.fillRect(165, 270, 315, 320);
  myGLCD.fillRect(335, 270, 475, 320);
  myGLCD.setFont(BigFont);
  myGLCD.setBackColor(VGA_SILVER );
  myGLCD.setColor(VGA_RED);
  myGLCD.print("-", 65, 285);
  myGLCD.print("MEH\x94", CENTER, 285);
  myGLCD.print("+", 395, 285);
  pos = 2;}

// Меню повторнерия реверса
  void menu_povtor(){
  myGLCD.clrScr();
  prNom(ckl);
  myGLCD.setFont(BigFont);
  myGLCD.setColor(VGA_RED);
  myGLCD.print("\x89OBTOP", CENTER, 15);
  myGLCD.setColor(VGA_SILVER);
  myGLCD.fillRect(0, 270, 145, 320);
  myGLCD.fillRect(165, 270, 315, 320);
  myGLCD.fillRect(335, 270, 475, 320);
  myGLCD.setFont(BigFont);
  myGLCD.setBackColor(VGA_SILVER );
  myGLCD.setColor(VGA_RED);
  myGLCD.print("-", 65, 285);
  myGLCD.print("MEH\x94", CENTER, 285);
  myGLCD.print("+", 395, 285);
  pos = 3;}

//отрисовка меню запуска и отслеживание работы медогонки
  void star_med(){
  myGLCD.clrScr();
  pos = 5;
  if(pos>4){digitalWrite(DIR_L, 1);}}                     


void yield() {
  digitalWrite(DIR_R, 0);
  digitalWrite(DIR_L, 0);
}

может отформатируешь код по человечески - ctrl+t

Нифига себе! Шаговый мотор тянет медогонку! Какой мотор? Медогонка на 2,3 или 4 рамки?

Мотор от самоката на 24 вольта постоянки, использую драйвер IBT-2, и медогонка на 6 рамок, понимаю, что многие ставят моторы от стиральных машин, и это не шаговый, это я так пины обозвал, для упращения понимания, step это шим а dir это просто логически пины которые запускают вращение то в одну сторону то в другую.

это я уже надвигал, пока искал где косяк. но спасибо, все время забываю про эту комбинацию, а как тут исправить, не знаю

А зачем uint64_t? Для сохранения значения millis() возьмите uint32_t.

Показалось мало, вот и поставил, полностью согласен, что и 32 хватит, вот щас как раз в процессе поиска ошибки и по немногу “причесываю” код … ошибку так и не обнаружил

Вопрос решен, пол дня искал косяк, оказалось, что случайно скобочки условия не в то место поставил, строчка 96