Оптимизация кода спидометра

#include <EEPROM.h>
#include <GyverOLED.h>
volatile uint8_t SC = 1;
volatile uint64_t m = 0;
volatile uint64_t tt;
volatile uint64_t stat = 0;
uint64_t proshl = 0;
volatile uint64_t stata = 0;
float odometr;
float odom_tek;
uint8_t sped;
float spd;
uint16_t m1;
uint8_t spead;
uint16_t seg;
uint32_t vseg;
GyverOLED<SSD1306_128x64, OLED_BUFFER> oled;
void setup() {
  //Serial.begin( 9600 );
  oled.init();
  oled.clear();
  pinMode(3, INPUT_PULLUP);
  pinMode(2, INPUT_PULLUP);
  EEPROM.begin();
  EEPROM.get (0, stat);
  attachInterrupt(0, shelk, FALLING);
  attachInterrupt(1, clic, FALLING);
  

}

void loop() {
  if (SC > 3) {
    SC = 1;
  }
  odometr = stat * 4.19;
  odom_tek = stata * 4.19;
  sped = stata - proshl;
  spd = ((sped * 4.19)/500) * 1000;
  //Serial.println( String ( odometr ) + "cm" + " " + String ( odom_tek ) + "cm" + " " + String ( spd ) + "cm/s" );
  proshl = stata;
  switch (SC) {
    case 1:
      spead = round((spd / 100) * 3.6);
      oled.home();
      oled.clear();
      oled.setScale(4);
      if (spead < 10) oled.setCursor(56, 1);
      if (spead > 9)  oled.setCursor(44, 1);
      oled.print(spead);
      oled.setScale(2);
      oled.setCursor(43, 6);
      oled.print("км/ч");
      oled.update();
      m = 0;
      break;

    case 2:

      m1 = round((m * 4.19) / 100);
      oled.home();
      oled.clear();
      oled.setScale(4);
      if (m1 < 10) oled.setCursor(56, 1);
      if (m1 > 9 && m1 < 100)  oled.setCursor(44, 1);
      if (m1 > 99 && m1 < 1000) oled.setCursor(32, 1);
      if (m1 > 999) oled.setCursor(22, 1);
      oled.print(m1);
      oled.setScale(2);
      oled.setCursor(61, 6);
      oled.print("м");
      oled.update();

      break;

    case 3:
      seg = round( odom_tek / 100000);
      vseg = round( odometr / 100000);
      oled.home();
      oled.clear();
      oled.setScale(2);
      oled.setCursor(0, 1);
      oled.print(seg);
      oled.setCursor(74, 1);
      oled.print("км с.");
      oled.setCursor(0, 4);
      oled.print(vseg);
      oled.setCursor(74, 4);
      oled.print("км в.");
      oled.update();
      break;
  }
  delay(500);
}

void shelk() {
  stat++ ;
  stata++ ;
  m++;
  EEPROM.put(0, stat);
}

void clic(){
  if(millis() - tt > 500){
  SC++;
  tt = millis();
  
  }
}

Код спидометра, делался на костылях, библиях гайвера.

P.S. Я школьник с Крыма, мне 13 лет

Маловато информации. Код компилируется или нет? Работает правильно? С какой целью оптимизация? Уменьшить размер, увеличить скорость ?

Со своим шелк() продырявишь eeprom у контроллера.

Записывай раз в минуту хотя бы…

Да, код рабочий, и компилируется, хочу освободить немного памяти чтобы сделать показатель заряда

Понял, просто читал у гайвера что на “нанке” еепром дырявится через 3-4 миллиона записей

P.S.P.S Ардуино нано, датчик холла и 48 магнитов

И?

И?

Вы девочка? Дочь офицера?

Не верю. Гивер, конечно, тот ещё специалист, но такой бред – не верю. Весьма обяжете, если дадите ссылочку.

Не, ну он же совершенно правильно написал

Дальше можно было не читать, ибо всё дальнейшее – русский авось. Если Вы на этом строите свои системы, то в добрый путь, конечно.

Понял, если я раз в пол секунды буду пинать будет норм?

Это примерно 14 часов работы. Если для вас норм, что через 14 часов в eeprom может потереться дырка, то и ладно ))

Неее, это на велик, часто надо будет контроллер перепаивать

Значит писать нужно значительно реже

Каждые 10м например. Или 100.
Школьник, а ты сочинения так же коряво пишешь?

Это первый серьезный проект на ардуинке, который пойдет на конкурс всекрымский

Может быть реально сделаю так чтобы каждые 50 метров сохранялось, чтобы епром не дырявить

Тем более. Я бы не позорился.

Думаю исходный код они показывать не будут ))