@@ -11,24 +11,34 @@ enum PowerStatus {
11
11
Battery
12
12
};
13
13
14
- uint8_t checkTakaoBasePowerStatus (m5::Power_Class* power, StackchanSERVO* servo ) {
15
- bool last_ext_output = power->getExtOutput ();
16
- if (power->Axp192 .getACINVoltage () > 1 .0f ) {
14
+ PowerStatus checkTakaoBasePowerStatus (m5::Power_Class* power, int16_t battery_threshold = 3200 ) {
15
+ if (!power->getExtOutput () && power->getBatteryCurrent () < 0 ) {
16
+ // TakaoBase使用時(ExtOutput=falseの場合)、バッテリー駆動の時はtrueに切り替える。
17
+ // 切り替えないとサーボが動きません。
17
18
power->setExtOutput (true );
19
+ power->setLed (0 );
20
+ return PowerStatus::Battery;
21
+ }
22
+
23
+ if (power->getExtOutput () && (power->getBatteryCurrent () >= 0 ) {
24
+ // M5StackのUSB-C端子から給電されている状態。
18
25
power->setLed (80 );
19
- return PowerStatus::SidePower;
26
+ return PowerStatus::SidePower;
20
27
}
21
- while (servo->isMoving ()) {delay (1 );} // サーボが動いている間は待機(そうしないとサーボの動きが乱れる。)
22
- power->setExtOutput (false ); // 後側のUSB-Cの状態を把握するためにfalseにする必要があります。
23
- delay (500 );
24
- if (power->Axp192 .getBatteryDischargeCurrent () > 3 .0f ) {
25
- power->setExtOutput (true );
26
- power->setLed (0 );
27
- return PowerStatus::Battery;
28
+
29
+ if (power->getBatteryLevel () < battery_threshold) {
30
+ // Batteryの電圧が閾値よりも下がったときの処理
31
+ power->setExtOutput (false ); // 後側のUSB-Cの給電状態を把握するためにfalseにする必要があります。
32
+ if (power->getVBUSVoltage () > 3000 ) {
33
+ // 後ろから給電されている状態。
34
+ power->setLed (80 );
35
+ return PowerStatus::BackPower;
36
+ } else {
37
+ // 給電されていない場合は電源OFF
38
+ M5.Power .powerOff ();
39
+ }
28
40
}
29
- power->setExtOutput (false );
30
- power->setLed (80 );
31
- return PowerStatus::BackPower;
41
+ return PowerStatus::BackPower;
32
42
}
33
43
34
44
#endif // STACKCHAN_TAKAO_BASE_HPP
0 commit comments