#include <M5StickC.h>
#include <Preferences.h>

#include "HX711.h"

#include "efontEnableJaMIni.h"
#include "efont.h"
#include "efontM5StickC.h"

const int DT_PIN = 32;
const int SCK_PIN = 33;
const long DefaultScaleOffset = -554173;
const float DefaultScaleFactor = -23619;

HX711 scale;
Preferences ScaleParam;

void setup() {
  M5.begin();
  M5.Lcd.setRotation(3);
  M5.Lcd.setTextFont(4);
  M5.Lcd.setTextColor(TFT_WHITE,TFT_BLACK);  
  M5.Lcd.fillScreen(BLACK);
  
  Serial.begin(115200);
  Serial.println("start");
  
  //preferencesからパラメータを読み込む
  ScaleParam.begin("ScaleParam", true); 
  long offset = ScaleParam.getLong("ScaleOffset", DefaultScaleOffset);  
  ScaleParam.end();

  //重量センサの初期化
  scale.begin(DT_PIN, SCK_PIN);
  scale.set_offset( offset );
  scale.set_scale(DefaultScaleFactor);
  Serial.print("offset:");
  Serial.println(offset);
  Serial.print("ScaleFactor:");
  Serial.println(DefaultScaleFactor);

  M5.Lcd.fillScreen(BLACK);
}

void loop() {
  M5.update();

  //Aボタンを4秒以上押すと、オフセット調整を実行する
  if( M5.BtnA.pressedFor(4000) ){

    M5.Lcd.fillScreen(BLACK);
    
    printEfont("オフセット補正中", 0, 16*0);
    long offset = scale.read_average(50);
    scale.set_offset(offset);
    
    //preferencesにオフセット値を保存
    ScaleParam.begin("ScaleParam", false); 
    ScaleParam.putLong("ScaleOffset", offset);
    ScaleParam.end();

    Serial.print("readoffset:");
    Serial.println(offset);
    
    M5.Lcd.fillScreen(BLACK);
  }


  //重さ測定
  float weight = scale.get_units(10);
  Serial.print("weight:");
  Serial.println(weight);

  //測定結果の表示
  printEfont("重量", 0, 16*0);
  M5.Lcd.setCursor(0, 16, 2);
  M5.Lcd.setTextFont(4);
  M5.Lcd.print(weight);
  M5.Lcd.print("[kg]         ");   
  Serial.println(weight);

}
