m5stack / M5Unified

Unified library for M5Stack series
MIT License
276 stars 48 forks source link

Button_ClassのwasHoldがtrueでもisHoldingがfalse #67

Closed tanakamasayuki closed 7 months ago

tanakamasayuki commented 1 year ago

概要

isHoldingは前回と今回の両方がホールドである必要がある。 wasHoldは今回がホールドであるとtrueになるので結果がずれる。 意図している or 仕様であれば問題ありません

isHoldingの実装

bool isHolding(void)   const { return _oldPress == 2 && _press == 2; }

wasHoldの実装

    /// Returns true when the button has been held pressed for a while.
    bool wasHold(void)     const { return _currentState == state_hold; }

検証コード

#include <M5Unified.h>

void setup(void) {
  M5.begin();
}

void loop(void) {
  String printStr = "";
  static String oldStr = "";

  delay(1);
  M5.update();

  printStr += String(",isPressed:") + String(M5.BtnA.isPressed() ? "X" : " ");
  printStr += String(",isHolding:") + String(M5.BtnA.isHolding() ? "X" : " ");
  printStr += String(",isReleased:") + String(M5.BtnA.isReleased() ? "X" : " ");

  printStr += String(",wasPressed:") + String(M5.BtnA.wasPressed() ? "X" : " ");
  printStr += String(",wasHold:") + String(M5.BtnA.wasHold() ? "X" : " ");
  printStr += String(",wasReleased:") + String(M5.BtnA.wasReleased() ? "X" : " ");
  printStr += String(",wasClicked:") + String(M5.BtnA.wasClicked() ? "X" : " ");

  printStr += String(",wasSingleClicked:") + String(M5.BtnA.wasSingleClicked() ? "X" : " ");
  printStr += String(",wasDoubleClicked:") + String(M5.BtnA.wasDoubleClicked() ? "X" : " ");
  printStr += String(",wasDecideClickCount:") + String(M5.BtnA.wasDecideClickCount() ? "X" : " ");
  printStr += String(",wasChangePressed:") + String(M5.BtnA.wasChangePressed() ? "X" : " ");
  printStr += String(",wasReleasedAfterHold:") + String(M5.BtnA.wasReleasedAfterHold() ? "X" : " ");

  printStr += String(",getClickCount:") + String(M5.BtnA.getClickCount());

  if (oldStr != printStr) {
    Serial.println(printStr);
    oldStr = printStr;
  }
}

結果

,isPressed:X,isHolding: ,isReleased: ,wasPressed:X,wasHold: ,wasReleased: ,wasClicked: ,wasSingleClicked: ,wasDoubleClicked: ,wasDecideClickCount: ,wasChangePressed:X,wasReleasedAfterHold: ,getClickCount:0
,isPressed:X,isHolding: ,isReleased: ,wasPressed: ,wasHold: ,wasReleased: ,wasClicked: ,wasSingleClicked: ,wasDoubleClicked: ,wasDecideClickCount: ,wasChangePressed: ,wasReleasedAfterHold: ,getClickCount:0
,isPressed:X,isHolding: ,isReleased: ,wasPressed: ,wasHold:X,wasReleased: ,wasClicked: ,wasSingleClicked: ,wasDoubleClicked: ,wasDecideClickCount: ,wasChangePressed: ,wasReleasedAfterHold: ,getClickCount:0
,isPressed:X,isHolding:X,isReleased: ,wasPressed: ,wasHold: ,wasReleased: ,wasClicked: ,wasSingleClicked: ,wasDoubleClicked: ,wasDecideClickCount: ,wasChangePressed: ,wasReleasedAfterHold: ,getClickCount:0
,isPressed: ,isHolding: ,isReleased:X,wasPressed: ,wasHold: ,wasReleased:X,wasClicked: ,wasSingleClicked: ,wasDoubleClicked: ,wasDecideClickCount: ,wasChangePressed:X,wasReleasedAfterHold:X,getClickCount:0
,isPressed: ,isHolding: ,isReleased:X,wasPressed: ,wasHold: ,wasReleased: ,wasClicked: ,wasSingleClicked: ,wasDoubleClicked: ,wasDecideClickCount: ,wasChangePressed: ,wasReleasedAfterHold: ,getClickCount:0
lovyan03 commented 1 year ago

@tanakamasayuki 検証ありがとうございます! これは意図した動作ではなくご指摘通り動作不備と思いますので、修正を進めます!