This commit is contained in:
gcw_4spBpAfv
2026-02-07 17:09:39 +08:00
parent 61096ba190
commit 8aea76d99b
5 changed files with 158 additions and 42 deletions

72
main.py
View File

@@ -212,6 +212,39 @@ def cmd_str():
logger.info("系统准备完成...")
last_adc_trigger = 0
# 气压采样:减少日志频率(每 N 个点输出一条),避免 logger.debug 拖慢采样
PRESSURE_BATCH_SIZE = 100
pressure_buf = []
pressure_sum = 0
pressure_min = 4095
pressure_max = 0
pressure_t0_ms = None
def _flush_pressure_buf(reason: str):
if not config.AIR_PRESSURE_lOG:
return
nonlocal pressure_buf, pressure_sum, pressure_min, pressure_max, pressure_t0_ms, logger
if not pressure_buf:
return
t1_ms = time.ticks_ms()
n = len(pressure_buf)
avg = (pressure_sum / n) if n else 0
# 一行输出:方便后处理画曲线;同时带上统计信息便于快速看波峰
line = (
f"[气压批量] reason={reason} "
f"t0={pressure_t0_ms} t1={t1_ms} n={n} "
f"min={pressure_min} max={pressure_max} avg={avg:.1f} "
f"values={','.join(map(str, pressure_buf))}"
)
if logger:
logger.debug(line)
else:
print(line)
pressure_buf = []
pressure_sum = 0
pressure_min = 4095
pressure_max = 0
pressure_t0_ms = None
# 主循环:检测扳机触发 → 拍照 → 分析 → 上报
while not app.need_exit():
@@ -245,12 +278,27 @@ def cmd_str():
logger.error(f"[MAIN] ADC读取异常: {e}")
time.sleep_ms(100)
continue
if adc_val > config.ADC_TRIGGER_THRESHOLD:
# ====== 气压采样缓存(每次循环都记录,批量输出日志)======
if pressure_t0_ms is None:
pressure_t0_ms = current_time
pressure_buf.append(adc_val)
pressure_sum += adc_val
if adc_val < pressure_min:
pressure_min = adc_val
if adc_val > pressure_max:
pressure_max = adc_val
if len(pressure_buf) >= PRESSURE_BATCH_SIZE:
_flush_pressure_buf("batch")
# if adc_val >= 2000:
# print(f"adc :{adc_val}")
if adc_val >= config.ADC_TRIGGER_THRESHOLD:
diff_ms = current_time - last_adc_trigger
if diff_ms < 3000:
continue
last_adc_trigger = current_time
# 触发前先把缓存刷出来,避免波形被长耗时处理截断
_flush_pressure_buf("before_trigger")
try:
frame = camera_manager.read_frame()
@@ -397,13 +445,14 @@ def cmd_str():
time.sleep_ms(100)
continue
else:
try:
camera_manager.show(camera_manager.read_frame())
except Exception as e:
logger = logger_manager.logger
if logger:
logger.error(f"[MAIN] 显示异常: {e}")
time.sleep_ms(50)
if config.SHOW_CAMERA_PHOTO_WHILE_SHOOTING:
try:
camera_manager.show(camera_manager.read_frame())
except Exception as e:
logger = logger_manager.logger
if logger:
logger.error(f"[MAIN] 显示异常: {e}")
time.sleep_ms(1)
except Exception as e:
# 主循环的顶层异常捕获,防止程序静默退出
@@ -416,6 +465,11 @@ def cmd_str():
print(f"[MAIN] 主循环异常: {e}")
import traceback
traceback.print_exc()
# 异常发生时尽量把缓存刷盘,方便定位问题
try:
_flush_pressure_buf("exception")
except:
pass
time.sleep_ms(1000) # 等待1秒后继续