feat(travelers): TCA9535 充电检测 + 键盘背光 + isVbusIn 修复
- 新增 P1.1 CHARGE_DET 充电检测(高电平=充电中),轮询间隔 2s
- Power.cpp isCharging()/isVbusIn() 均使用 TCA9535_CHARGE_DET_PIN 分支
- 新增 P1.0 键盘背光(高电平点亮),按键时亮,5s 无操作自动熄灭
- 修复开机供电维持:POWER_EN 在 Wire.begin() 后立即锁定
- 修复 P1 config 寄存器值 0x0A(之前 0x8D 导致 P1.2 高阻断电)
- ⚠️ 已知问题:TP4057 电压反串导致未充电时 P1.1 仍读高,需硬件修改
This commit is contained in:
+41
-17
@@ -30,6 +30,7 @@
|
||||
// - 与屏幕共用 I²C 总线 (SDA=0, SCL=1)
|
||||
// - A0=0, A1=0, A2=0 → 地址 0x20 (TCA9535_I2C_ADDR)
|
||||
// - P0.0~P0.3 行输出(ROW0~ROW3),P0.4~P0.7 列输入(COL0~COL3)
|
||||
// - P1.0 键盘背光输出(高电平点亮,按键时亮 5 秒后自动熄灭)
|
||||
// - P1.2 电源使能(POWER_EN),高电平有效,驱动 MOS 管维持供电
|
||||
// - P1.3 电源开机按钮(POWER_BOOT),输入,低电平有效
|
||||
// 开机:持续按住 2 秒 → POWER_EN 拉高维持供电
|
||||
@@ -37,35 +38,58 @@
|
||||
// - P1.4 LoRa RST 输出(通过 I²C 控制 RadioLib 复位序列)
|
||||
// - P1.6 GPS_RST 输出(通过 tca9535GpsReset() 控制,init 中释放)
|
||||
// - P1.7 GPS_EN 输出(高电平有效,通过 enablePin 桥接到 TCA9535)
|
||||
// - P1.1 CHARGE_DET 输入(高电平=正在充电)
|
||||
// - 中断引脚 GPIO5,低电平有效,下降沿触发
|
||||
// -----------------------------------------------------------------------
|
||||
#define HAS_TCA9535_BUTTON
|
||||
#define TCA9535_INT_PIN 5 // TCA9535 INT → GPIO5(低电平有效,下降沿触发)
|
||||
#define TCA9535_POWER_EN_BIT (1u << 2) // P1.2 = 电源使能(高电平=开机)
|
||||
#define TCA9535_CHARGE_DET_PIN (1u << 1) // P1.1 = 充电检测输入(高电平=正在充电)
|
||||
|
||||
// 按键映射:4×4 矩阵,行优先排列
|
||||
// KEY[0]=ROW0·COL0, KEY[1]=ROW0·COL1, ..., KEY[15]=ROW3·COL3
|
||||
// 低电平有效(按下接地,列读取到低电平=按下)
|
||||
// 九宫格:key0~2=1~3, key4~6=4~6, key8~10=7~9, key12=*, key13=0, key14=#
|
||||
// 方向键:key3=UP, key7=DOWN, key11=LEFT, key15=RIGHT
|
||||
// SELECT 由 GPIO9 短按触发,CANCEL 由 POWER_BOOT(P1.3) 短按触发
|
||||
// 矩阵仅保留方向键
|
||||
#define TCA9535_KEY_MAP \
|
||||
{ \
|
||||
INPUT_BROKER_NONE, /* key0 = ROW0·COL0 */ \
|
||||
INPUT_BROKER_NONE, /* key1 = ROW0·COL1 */ \
|
||||
INPUT_BROKER_NONE, /* key2 = ROW0·COL2 */ \
|
||||
INPUT_BROKER_UP, /* key3 = ROW0·COL3 */ \
|
||||
INPUT_BROKER_NONE, /* key4 = ROW1·COL0 */ \
|
||||
INPUT_BROKER_NONE, /* key5 = ROW1·COL1 */ \
|
||||
INPUT_BROKER_NONE, /* key6 = ROW1·COL2 */ \
|
||||
INPUT_BROKER_DOWN, /* key7 = ROW1·COL3 */ \
|
||||
INPUT_BROKER_NONE, /* key8 = ROW2·COL0 */ \
|
||||
INPUT_BROKER_NONE, /* key9 = ROW2·COL1 */ \
|
||||
INPUT_BROKER_NONE, /* key10 = ROW2·COL2 */ \
|
||||
INPUT_BROKER_LEFT, /* key11 = ROW2·COL3 */ \
|
||||
INPUT_BROKER_NONE, /* key12 = ROW3·COL0 */ \
|
||||
INPUT_BROKER_NONE, /* key13 = ROW3·COL1 */ \
|
||||
INPUT_BROKER_NONE, /* key14 = ROW3·COL2 */ \
|
||||
INPUT_BROKER_RIGHT, /* key15 = ROW3·COL3 */ \
|
||||
INPUT_BROKER_MATRIXKEY, /* key0 = ROW0·COL0 → '1' */ \
|
||||
INPUT_BROKER_MATRIXKEY, /* key1 = ROW0·COL1 → '2' */ \
|
||||
INPUT_BROKER_MATRIXKEY, /* key2 = ROW0·COL2 → '3' */ \
|
||||
INPUT_BROKER_UP, /* key3 = ROW0·COL3 */ \
|
||||
INPUT_BROKER_MATRIXKEY, /* key4 = ROW1·COL0 → '4' */ \
|
||||
INPUT_BROKER_MATRIXKEY, /* key5 = ROW1·COL1 → '5' */ \
|
||||
INPUT_BROKER_MATRIXKEY, /* key6 = ROW1·COL2 → '6' */ \
|
||||
INPUT_BROKER_DOWN, /* key7 = ROW1·COL3 */ \
|
||||
INPUT_BROKER_MATRIXKEY, /* key8 = ROW2·COL0 → '7' */ \
|
||||
INPUT_BROKER_MATRIXKEY, /* key9 = ROW2·COL1 → '8' */ \
|
||||
INPUT_BROKER_MATRIXKEY, /* key10 = ROW2·COL2 → '9' */ \
|
||||
INPUT_BROKER_LEFT, /* key11 = ROW2·COL3 */ \
|
||||
INPUT_BROKER_MATRIXKEY, /* key12 = ROW3·COL0 → '*' */ \
|
||||
INPUT_BROKER_MATRIXKEY, /* key13 = ROW3·COL1 → '0' */ \
|
||||
INPUT_BROKER_MATRIXKEY, /* key14 = ROW3·COL2 → '#' */ \
|
||||
INPUT_BROKER_RIGHT, /* key15 = ROW3·COL3 */ \
|
||||
}
|
||||
|
||||
#define TCA9535_KEY_CHAR_MAP \
|
||||
{ \
|
||||
'1', /* key0 */ \
|
||||
'2', /* key1 */ \
|
||||
'3', /* key2 */ \
|
||||
0, /* key3 → 方向键 */ \
|
||||
'4', /* key4 */ \
|
||||
'5', /* key5 */ \
|
||||
'6', /* key6 */ \
|
||||
0, /* key7 → 方向键 */ \
|
||||
'7', /* key8 */ \
|
||||
'8', /* key9 */ \
|
||||
'9', /* key10 */ \
|
||||
0, /* key11 → 方向键 */ \
|
||||
'*', /* key12 */ \
|
||||
'0', /* key13 */ \
|
||||
'#', /* key14 */ \
|
||||
0, /* key15 → 方向键 */ \
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user