Загрузка данных



void updateDisplay() {
  if (millis() - lastDisplayUpdate < DISPLAY_INTERVAL) {
    return;
  }

  lastDisplayUpdate = millis();

  display.clearDisplay();
  display.setTextColor(SSD1306_WHITE);

  // Компактные заголовки P и N
  display.setTextSize(1);

  display.setCursor(0, 0);
  display.print(F("P"));

  display.setCursor(76, 0);
  display.print(F("N"));

  // Крупные значения параметров
  display.setTextSize(3);

  display.setCursor(0, 10);
  display.print(pulseDuration);

  char nBuffer[4];
  snprintf(nBuffer, sizeof(nBuffer), "%d", targetCycles);

  int nWidth = strlen(nBuffer) * 18;
  int nX = 124 - nWidth;

  if (nX < 64) {
    nX = 64;
  }

  display.setCursor(nX, 10);
  display.print(nBuffer);

  // Температура или сообщение об ошибке
  display.setTextSize(1);
  display.setCursor(0, 39);
  display.print(F("TEMP:"));

  if (temperatureFault) {
    display.print(F("ERROR"));
  } else if (overheatLock) {
    display.print(F("OVERHEAT"));
  } else if (temperatureC != DEVICE_DISCONNECTED_C) {
    display.print(temperatureC, 1);
    display.print(F(" C"));
  } else {
    display.print(F("--.- C"));
  }

  // Счётчик TRIG
  display.setCursor(0, 51);
  display.print(F("TRIG:"));
  display.print(triggerCount);

  // Состояния реле
  display.setCursor(76, 51);
  display.print(relay1Active ? F("R1+") : F("R1-"));

  display.setCursor(100, 51);
  display.print(relay2Active ? F("R2+") : F("R2-"));

  display.display();
}