#include <M5Unified.h>
#include <Preferences.h>

Preferences pref;
int count = 0;

void setup() {
  auto cfg = M5.config(); // M5Unified の設定
  M5.begin(cfg);

  M5.Display.setRotation(0); // 縦型
  M5.Display.fillScreen(CYAN);
  M5.Display.setTextSize(2);
  M5.Display.setTextScroll(true);
  loadCount(&count);
  M5.Speaker.tone(2000, 500);
  M5.Display.printf("count = %d\n", count);
}

void loop() {
  M5.update();

  if (M5.BtnA.wasReleaseFor(1000)) { // Aボタン長押し
    count = 0;
    saveCount(&count);
    M5.Speaker.tone(1200, 300);
    M5.Display.printf("count = %d\n", count);
  } else if (M5.BtnA.wasReleased()) { // Aボタン押し
    count++;
    saveCount(&count);
    M5.Speaker.tone(2000, 300);
    M5.Display.printf("count = %d\n", count);
  } else if (M5.BtnB.wasReleased()) { // Bボタン押し
    reboot();
  } else if (M5.Power.isCharging() == false && M5.BtnPWR.wasReleased()) { // 電源ボタン押し
    poweroff();
  }

  delay(50);
}

void loadCount(int *c) {
  pref.begin("mydata", false);
  *c = pref.getInt("count", 0); // 初回時に 0 をデフォルト値とする
  pref.end();
}

void saveCount(int *c) {
  pref.begin("mydata", false);
  pref.putInt("count", *c);
  pref.end();
}

void poweroff() {
  M5.Power.powerOff();
}

void reboot() {
  ESP.restart();
}