diff --git a/src/MCP45HVX1.h b/src/MCP45HVX1.h index 880b8d8..1137717 100644 --- a/src/MCP45HVX1.h +++ b/src/MCP45HVX1.h @@ -29,7 +29,7 @@ class MCP45HVX1 }TCON_Register; /* Setup ............................................................... */ - MCP45HVX1(uint8_t address = 0x3C); + MCP45HVX1(uint8_t address = 0x3e); void begin(int sda = -1, int scl = -1, TwoWire &inWire = Wire); diff --git a/src/main.cpp b/src/main.cpp index 7dfac6c..f7b72d4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -9,8 +9,11 @@ #include "MCP45HVX1.h" #include "INA226.h" #include +#include // 用于存储非易失性数据 -// 灯泡计时器相关变量 +Preferences preferences; + +// 灯泡计时器 unsigned long activeDuration = 0; // 累计使用时长(秒) unsigned long lastMillis = 0; // 上次更新计时时间 bool isActive = false; // 是否正在计时 @@ -19,7 +22,7 @@ bool isActive = false; // 是否正在计时 Ticker currentCheckTicker; // MCP45HVX1 数字电位器 -MCP45HVX1 digiPot(0x3F); +MCP45HVX1 digiPot(0x3E); // INA226 电流监控器 INA226 INA(0x40); @@ -142,12 +145,13 @@ const char index_html[] PROGMEM = R"rawliteral( // 清空累计使用时长 void resetActiveDuration() { activeDuration = 0; + preferences.putULong("activeDuration", activeDuration); // 保存到 NVS } // 检查电流并更新计时状态 void checkCurrent() { float current = INA.getCurrent_mA(); - if (current > 1000.0) { + if (current > 100.0) { if (!isActive) { // 开始计时 isActive = true; @@ -158,6 +162,7 @@ void checkCurrent() { // 停止计时并累加 activeDuration += (millis() - lastMillis) / 1000; isActive = false; + preferences.putULong("activeDuration", activeDuration); // 保存到 NVS } } @@ -165,6 +170,7 @@ void checkCurrent() { if (isActive) { activeDuration += (millis() - lastMillis) / 1000; lastMillis = millis(); + preferences.putULong("activeDuration", activeDuration); // 保存到 NVS } } @@ -172,7 +178,7 @@ void checkCurrent() { String formatDuration(unsigned long seconds) { unsigned long hours = seconds / 3600; unsigned long minutes = (seconds % 3600) / 60; - return String(hours) + " 小时 " + String(minutes) + " 分钟"; + return String(hours) + " : " + String(minutes); } // 初始化Web @@ -294,6 +300,9 @@ void TJC_Show(void) sprintf(str, "t2.txt=\"%.f\"\xff\xff\xff", bh1750_b.readLightLevel()); TJC.print(str); + sprintf(str, "t14.txt=\"%s\"\xff\xff\xff", formatDuration(activeDuration)); + TJC.print(str); + sprintf(str, "t8.txt=\"%d\"\xff\xff\xff", digiPot.readWiper()); TJC.print(str); @@ -313,6 +322,13 @@ void setup(void) { Serial.begin(115200); + // 初始化 NVS 存储 + preferences.begin("timing", false); + activeDuration = preferences.getULong("activeDuration", 0); // 从 NVS 加载数据 + + // 启动定时器,每秒检查电流状态 + currentCheckTicker.attach(1, checkCurrent); + // 初始化 I2C 总线 Wire.begin(5, 4); // SDA SCL @@ -320,21 +336,18 @@ void setup(void) digiPot.begin(5, 4); // INA226 初始化 - INA.setMaxCurrentShunt(10, 0.002); // 设置最大电流和分流电阻 + INA.setMaxCurrentShunt(10, 0.005); // 设置最大电流和分流电阻 //sensor.begin(); // BH1750 初始化 //bh1750_init(bh1750_a, bh1750_b, 36, 35, 21, 20); //1750初始化。sda, scl //Wire.begin(36,35); - Wire1.begin(21, 20); + Wire1.begin(36, 35); bh1750_a.begin(BH1750::CONTINUOUS_HIGH_RES_MODE, 0x23, &Wire); bh1750_b.begin(BH1750::CONTINUOUS_HIGH_RES_MODE, 0x23, &Wire1); //WebServer 初始化 WebServer_Init(ssid, password); - - // 启动定时器,每秒检查电流状态 - currentCheckTicker.attach(1, checkCurrent); // 串口屏初始化 TJC.begin(115200, SERIAL_8N1, TJC_RX_Pin, TJC_TX_Pin);