shutdown on 3v

This commit is contained in:
2025-07-26 12:18:52 +02:00
parent 12d634ecc9
commit 8180abed4c
3 changed files with 12 additions and 2 deletions

View File

@@ -10,6 +10,7 @@ class Shutdowner {
public: public:
static Shutdowner& get(); static Shutdowner& get();
void install_isr(); void install_isr();
void shutdown();
private: private:
Shutdowner(); Shutdowner();
}; };

View File

@@ -10,6 +10,7 @@
#include "freertos/task.h" #include "freertos/task.h"
#include "i2c_global.hpp" #include "i2c_global.hpp"
#include "shutdowner.hpp"
static i2c_master_dev_handle_t dev_handle; static i2c_master_dev_handle_t dev_handle;
@@ -105,6 +106,9 @@ void BatMon::pooler() {
_current = regToCurrent(ReadRegister(0x0B)); _current = regToCurrent(ReadRegister(0x0B));
_voltage = regToVoltage(ReadRegister(0x09)); _voltage = regToVoltage(ReadRegister(0x09));
PowerHelper::get().delay(10000, 1000); PowerHelper::get().delay(10000, 1000);
if (_voltage < 3.0f) {
Shutdowner::get().shutdown();
}
} }
} }

View File

@@ -14,12 +14,17 @@ Shutdowner& Shutdowner::get() {
return instance; return instance;
} }
static void IRAM_ATTR shutdown(void* arg) { static void IRAM_ATTR int_shutdown(void* arg) {
// printf("Shutting down...\n"); // printf("Shutting down...\n");
ESP_ERROR_CHECK(gpio_hold_dis(PWR_KILL)); ESP_ERROR_CHECK(gpio_hold_dis(PWR_KILL));
ESP_ERROR_CHECK(gpio_set_level(PWR_KILL, 0)); ESP_ERROR_CHECK(gpio_set_level(PWR_KILL, 0));
} }
void Shutdowner::shutdown() {
ESP_ERROR_CHECK(gpio_hold_dis(PWR_KILL));
ESP_ERROR_CHECK(gpio_set_level(PWR_KILL, 0));
}
Shutdowner::Shutdowner() { Shutdowner::Shutdowner() {
ESP_ERROR_CHECK(gpio_reset_pin(PWR_KILL)); ESP_ERROR_CHECK(gpio_reset_pin(PWR_KILL));
ESP_ERROR_CHECK(gpio_set_direction(PWR_KILL, GPIO_MODE_OUTPUT)); ESP_ERROR_CHECK(gpio_set_direction(PWR_KILL, GPIO_MODE_OUTPUT));
@@ -36,4 +41,4 @@ Shutdowner::Shutdowner() {
// gpio_isr_handler_add(PWR_INT, shutdown, nullptr); // gpio_isr_handler_add(PWR_INT, shutdown, nullptr);
} }
void Shutdowner::install_isr() { gpio_isr_handler_add(PWR_INT, shutdown, nullptr); } void Shutdowner::install_isr() { gpio_isr_handler_add(PWR_INT, int_shutdown, nullptr); }