v1.2.5
This commit is contained in:
72
main.py
72
main.py
@@ -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秒后继续
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user