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

#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.
Школьник, а ты сочинения так же коряво пишешь?

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

1 лайк

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

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

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