diff --git a/STM32F103_App1/HardWare/SYSINIT/app_loop.c b/STM32F103_App1/HardWare/SYSINIT/app_loop.c index 6377c9d..ce5ce4b 100644 --- a/STM32F103_App1/HardWare/SYSINIT/app_loop.c +++ b/STM32F103_App1/HardWare/SYSINIT/app_loop.c @@ -63,7 +63,8 @@ static volatile uint8_t s_oled_boot_page = 0; /* /*==== 开机联网方式选择(V1.7.1 新板按键): 10s 倒计时 ==== * KEY1(PC6)=4G KEY2(PC7)=WiFi固定热点 KEY3(PB14)=SmartConfig 配网, 低电平=按下; - * 超时未按 = EEPROM 记忆的上次选择(首次默认 4G); 选择变化才写 EEPROM(偏移130); + * 倒计时内按不同键=切换选中项(可反复改), 重复按当前项=立即确认, 超时=当前选中项生效; + * 初始选中项 = EEPROM 记忆的上次选择(首次默认 4G); 变化才写 EEPROM(偏移130); * 选定后不再自动切换通道, 连不上原地重试 */ /* 按键扫描: 返回 0=无 1~3=键号; 连续 2 次(约100ms)确认消抖 */ @@ -102,13 +103,12 @@ static uint8_t net_mode_select(void) /* 第 3 行: 模式名从最左起 + 秒数紧随其后(不带"上次"前缀, 长模式名才放得下); * 标签只写一次, 之后每秒仅更新秒数(整行重写要读字库 IC, 会闪) */ - const char *label = names[mode]; + const char *label = names[mode]; /* 选中项, 按键切换时跟随更新 */ oled_locate(3, 0); oled_print_line(label); uint8_t num_col8 = (uint8_t)((oled_text_w(label) + 7) / 8); uint32_t start = HAL_GetTick(); int last_sec = -1; - int key = 0; for (;;) { uint32_t elapsed = HAL_GetTick() - start; int remain = (int)(10000u - elapsed) / 1000; @@ -121,19 +121,25 @@ static uint8_t net_mode_select(void) oled_print(num); oled_print(" "); /* 清掉长尾 */ } - key = key_scan_once(); - if (key) break; + int key = key_scan_once(); + if (key) { + uint8_t cand = (uint8_t)(key - 1); /* 键1->0(4G) 键2->1(WiFi固定) 键3->2(配网) */ + if (cand == mode) break; /* 重复按当前项 = 立即确认 */ + mode = cand; /* 切换选中项, 倒计时继续 */ + log_info("> NET: 联网方式切换为 %s", names[mode]); + label = names[mode]; + oled_locate(3, 0); oled_print_line(label); /* 换模式才重写整行 */ + num_col8 = (uint8_t)((oled_text_w(label) + 7) / 8); + last_sec = -1; /* 强制立即刷新秒数 */ + } if (elapsed >= 10000u) break; bg_delay(50); } - if (key) { - mode = (uint8_t)(key - 1); /* 键1->0(4G) 键2->1(WiFi固定) 键3->2(配网) */ - if (mode != saved) { - eepromWriteData(EEPROM_NETMODE_ADDR, &mode, 1); /* 记忆本次选择 */ - } + if (mode != saved) { + eepromWriteData(EEPROM_NETMODE_ADDR, &mode, 1); /* 记忆本次选择 */ } - log_info("> NET: 联网方式选择: %s (%s)", names[mode], key ? "按键选定" : "超时默认"); + log_info("> NET: 联网方式确定: %s", names[mode]); oled_locate(3, 0); oled_print_line("已选:"); oled_print((char *)names[mode]); bg_delay(800); diff --git a/鐗堟湰璇存槑.md b/鐗堟湰璇存槑.md index 2a29bd4..784f72f 100644 --- a/鐗堟湰璇存槑.md +++ b/鐗堟湰璇存槑.md @@ -22,7 +22,8 @@ 鍛戒护閾捐矾鏈缁堟棤搴旂瓟鍗冲垽绂荤嚎骞跺簲绛斿钩鍙 `ext relay board offline`锛屼笅娆″懡浠よ嚜鍔ㄩ噸鏂版帰娴嬫仮澶嶏紱 鏂數鎭㈠瑙﹀彂鐐逛笉鍙橈紙绂荤嚎鈫掍笂绾挎瘮瀵 EEPROM 閫愯矾琛ュ彂锛 - **鑱旂綉鏂瑰紡鏀逛负寮鏈烘寜閿墜鍔ㄩ夋嫨**锛堝簾闄よ嚜鍔ㄥ垏鎹級锛氭杩庨〉鍚 10s 鍊掕鏃讹紝KEY1(PC6)=4G / - KEY2(PC7)=WiFi 鍥哄畾鐑偣 / KEY3(PB14)=SmartConfig 閰嶇綉锛涜秴鏃舵湭鎸 = EEPROM 璁板繂鐨勪笂娆¢夋嫨锛堥娆¢粯璁 4G锛夛紱 + KEY2(PC7)=WiFi 鍥哄畾鐑偣 / KEY3(PB14)=SmartConfig 閰嶇綉锛涘掕鏃跺唴鎸変笉鍚岄敭**鍙弽澶嶅垏鎹㈤変腑椤**锛 + **閲嶅鎸夊綋鍓嶉」=绔嬪嵆纭**锛岃秴鏃=褰撳墠閫変腑椤圭敓鏁堬紱鍒濆閫変腑椤=EEPROM 璁板繂鐨勪笂娆¢夋嫨锛堥娆¢粯璁 4G锛夛紱 閫夋嫨鍙樺寲鎵嶅啓 EEPROM锛堝亸绉 130锛屽鐢ㄥ師鑱旂綉鏂瑰紡璁板繂瀛楄妭锛夛紱**閫夊畾鍚庨攣瀹氶氶亾锛岃繛涓嶄笂鍘熷湴閲嶈瘯锛 涓嶅啀 4G鈫擶iFi 鑷姩鍥為**锛4G 鏃犲崱/鏃犱俊鍙枫乄iFi 杩炰笉涓婂潎涓烘瘡 10s 閲嶈瘯锛夛紱 WiFi 渚ф寜妯″紡闄愬埗杩炴帴鏂瑰紡锛氬浐瀹氭ā寮忓彧杩炲浐瀹氱儹鐐癸紝閰嶇綉妯″紡鍙蛋宸插瓨 AP+SmartConfig锛