mirror of
https://github.com/Xinyuan-LilyGO/TTGO_TWatch_Library.git
synced 2026-03-03 06:44:10 +01:00
102 lines
2.5 KiB
C++
102 lines
2.5 KiB
C++
/*
|
|
* WakeupFormPEKKey: Use AXP202 interrupt pin to wake up T-Watch
|
|
* Copyright 2020 Lewis he
|
|
*/
|
|
|
|
#include "config.h"
|
|
|
|
TTGOClass *watch;
|
|
TFT_eSPI *tft;
|
|
AXP20X_Class *power;
|
|
bool irq = false;
|
|
|
|
void setup()
|
|
{
|
|
// Get TTGOClass instance
|
|
watch = TTGOClass::getWatch();
|
|
|
|
// Initialize the hardware, the BMA423 sensor has been initialized internally
|
|
watch->begin();
|
|
|
|
// Turn on the backlight
|
|
watch->openBL();
|
|
|
|
//Receive objects for easy writing
|
|
tft = watch->tft;
|
|
power = watch->power;
|
|
|
|
tft->setTextColor(TFT_GREEN);
|
|
|
|
pinMode(AXP202_INT, INPUT_PULLUP);
|
|
attachInterrupt(AXP202_INT, [] {
|
|
irq = true;
|
|
}, FALLING);
|
|
|
|
|
|
// Must be enabled first, and then clear the interrupt status,
|
|
// otherwise abnormal
|
|
power->enableIRQ(AXP202_PEK_SHORTPRESS_IRQ,
|
|
true);
|
|
|
|
// Clear interrupt status
|
|
power->clearIRQ();
|
|
|
|
tft->println("Wait for the PEKKey interrupt to come...");
|
|
|
|
// Wait for the power button to be pressed
|
|
while (!irq) {
|
|
delay(1000);
|
|
}
|
|
/*
|
|
After the AXP202 interrupt is triggered, the interrupt status must be cleared,
|
|
* otherwise the next interrupt will not be triggered
|
|
*/
|
|
power->clearIRQ();
|
|
|
|
for (int i = 5; i > 0; i--) {
|
|
tft->print("Go to sleep after ");
|
|
tft->print(i);
|
|
tft->println(" seconds");
|
|
delay(1000);
|
|
}
|
|
tft->println("Sleep now ...");
|
|
delay(1000);
|
|
|
|
|
|
// Set screen and touch to sleep mode
|
|
watch->displaySleep();
|
|
|
|
/*
|
|
When using T - Watch2020V1, you can directly call power->powerOff(),
|
|
if you use the 2019 version of TWatch, choose to turn off
|
|
according to the power you need to turn off
|
|
*/
|
|
#ifdef LILYGO_WATCH_2020_V1
|
|
watch->powerOff();
|
|
// LDO2 is used to power the display, and LDO2 can be turned off if needed
|
|
// power->setPowerOutPut(AXP202_LDO2, false);
|
|
#else
|
|
power->setPowerOutPut(AXP202_LDO3, false);
|
|
power->setPowerOutPut(AXP202_LDO4, false);
|
|
power->setPowerOutPut(AXP202_LDO2, false);
|
|
// The following power channels are not used
|
|
power->setPowerOutPut(AXP202_EXTEN, false);
|
|
power->setPowerOutPut(AXP202_DCDC2, false);
|
|
#endif
|
|
|
|
// Use ext0 for external wakeup
|
|
// esp_sleep_enable_ext0_wakeup((gpio_num_t)AXP202_INT, LOW);
|
|
|
|
// Use ext1 for external wakeup
|
|
esp_sleep_enable_ext1_wakeup(GPIO_SEL_35, ESP_EXT1_WAKEUP_ALL_LOW);
|
|
|
|
esp_deep_sleep_start();
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
}
|
|
|
|
|
|
|