サイクルモードを無効にし、CoreS3 をタッチした後、即時に電源を切り、オフ時間が終了した後に電源を復帰させます。
#include "M5Unified.h"
#include "Wire.h"
#include "m5_unit_timerpwr.hpp"
M5UnitTimerPWR timer_pwr;
void setup()
{
M5.begin();
Serial.begin(115200);
M5.Display.setTextDatum(middle_center);
M5.Display.setFont(&fonts::lgfxJapanMinchoP_24);
while (!timer_pwr.begin(&Wire, TIMERPWR_ADDR, 2, 1, 400000U)) {
M5.Display.drawString("Unit TimerPWR init Fail!", M5.Display.width() / 2, M5.Display.height() / 2);
delay(1000);
};
M5.Display.clear();
M5.Display.drawString("Unit TimerPWR init OK", M5.Display.width() / 2, M5.Display.height() / 2 - 20);
M5.Display.drawString("Touch To Sleep 10S", M5.Display.width() / 2, M5.Display.height() / 2 + 20);
// do something before sleep...
// disable cycle sleep mode
timer_pwr.set_cycle_sleep(false);
}
void loop()
{
M5.update();
auto t = M5.Touch.getDetail();
if (t.wasClicked() || M5.BtnA.wasClicked()) {
M5.Display.clear();
M5.Display.drawString("Sleep 10S!", M5.Display.width() / 2, M5.Display.height() / 2);
delay(1000);
timer_pwr.set_power_on_time(0, 0, 0);
timer_pwr.set_power_off_time(0, 0, 10);
timer_pwr.set_sleep();
}
}
サイクルモードを有効にし、オン/オフ時間を設定して、サイクルが開始された後、オン時間が終了した時点で電源を切り、オフ時間が終了後に電源が復帰します。新しい設定が書き込まれるか、バッテリーが完全に消耗するまで、このサイクルが繰り返されます。
#include "M5Unified.h"
#include "Wire.h"
#include "m5_unit_timerpwr.hpp"
M5UnitTimerPWR timer_pwr;
void setup()
{
M5.begin();
Serial.begin(115200);
M5.Display.setTextDatum(middle_center);
M5.Display.setFont(&fonts::lgfxJapanMinchoP_24);
while (!timer_pwr.begin(&Wire, TIMERPWR_ADDR, 2, 1, 400000U)) {
M5.Display.drawString("Unit TimerPWR init Fail!", M5.Display.width() / 2, M5.Display.height() / 2);
delay(1000);
};
M5.Display.clear();
M5.Display.drawString("Unit TimerPWR init OK", M5.Display.width() / 2, M5.Display.height() / 2 - 20);
M5.Display.drawString("ON 10S / OFF 5S", M5.Display.width() / 2, M5.Display.height() / 2 + 20);
}
void loop()
{
M5.update();
auto t = M5.Touch.getDetail();
if (t.wasClicked() || M5.BtnA.wasClicked()) {
M5.Display.clear();
M5.Display.drawString("Start Cycle ON/OFF!", M5.Display.width() / 2, M5.Display.height() / 2);
delay(1000);
// enable cycle sleep mode
timer_pwr.set_cycle_sleep(false);
timer_pwr.set_power_on_time(0, 0, 10);
timer_pwr.set_power_off_time(0, 0, 20);
timer_pwr.save_flash();
timer_pwr.set_cycle_sleep(true);
}
if (t.wasHold() || M5.BtnA.wasHold()) {
// disable cycle sleep mode
timer_pwr.set_cycle_sleep(false);
M5.Display.clear();
M5.Display.drawString("Stop Cycle ON/OFF!", M5.Display.width() / 2, M5.Display.height() / 2);
delay(1000);
}
}
CoreS3 の場合、リセットボタンを 2 秒ほど長押しして、内部の緑色の LED が点灯したらボタンを離します。これでデバイスはダウンロードモードに入り、プログラム書き込みの準備が整います。
Unit TimerPWR を使用して CoreS3 にタイマーウェイクアップを提供します。 (注:実現するためには CoreS3 のベースのバッテリー電源を切断して接続する必要があります)。
CoreS3 のスクリーンをタッチして、単発のスリープウェイク操作を制御します。
スリープモードに入ります。