Topuino_Hardware/src/FuncButton.cpp

62 lines
1.3 KiB
C++
Raw Permalink Normal View History

2022-07-02 13:04:34 +08:00
#include "FuncButton.h"
#include "UserData.h"
#include "StatusLed.h"
2021-08-29 22:14:08 +08:00
#define FUNC_BTN 0
#define PRESSED_STATUS LOW
extern UserData* userdataManager;
2022-07-02 13:04:34 +08:00
extern StatusLed* statusLed;
2021-08-29 22:14:08 +08:00
2022-06-26 14:23:33 +08:00
static int pressedTime;
2021-08-29 22:14:08 +08:00
2022-06-26 14:23:33 +08:00
static void Scan()
2021-08-29 22:14:08 +08:00
{
if (digitalRead(FUNC_BTN) == PRESSED_STATUS) {
pressedTime++;
2022-06-26 14:23:33 +08:00
return;
2021-08-29 22:14:08 +08:00
}
2022-06-26 14:23:33 +08:00
int count = pressedTime;
pressedTime = 0;
if (count >= 10) {
// Factory reset
2022-06-27 20:43:02 +08:00
userdataManager->EraseAllData();
2022-07-02 13:04:34 +08:00
statusLed->SetBlinkRate(StatusLed::BlinkRate::RateAlwaysOn);
2022-03-29 22:27:51 +08:00
delay(1000);
2021-08-29 22:14:08 +08:00
ESP.restart();
2022-06-26 14:23:33 +08:00
return;
2021-08-29 22:14:08 +08:00
}
2022-06-26 14:23:33 +08:00
if (count >= 2) {
2022-06-27 20:43:02 +08:00
RunMode mode = userdataManager->GetRunMode();
switch (mode)
{
case RunMode_Usb:
userdataManager->SetRunMode(RunMode_Online);
break;
case RunMode_Online:
userdataManager->SetRunMode(RunMode_Local);
break;
case RunMode_Local:
userdataManager->SetRunMode(RunMode_Usb);
break;
default:
break;
}
2022-07-02 13:04:34 +08:00
statusLed->SetBlinkRate(StatusLed::BlinkRate::RateAlwaysOn);
2022-07-02 12:18:00 +08:00
delay(200);
2022-06-27 20:43:02 +08:00
ESP.restart();
2022-06-26 14:23:33 +08:00
return;
}
}
FuncButton::FuncButton()
{
pinMode(FUNC_BTN, INPUT);
pressedTime = 0;
scanner.attach(1.0, Scan);
}