#ifndef __FEED_SCALE_H #define __FEED_SCALE_H #include "main.h" #include /* 单次投喂量有效范围: 0 ~ 500.0 KG, 内部以 0.1 KG 为单位保存 */ #define FEED_SCALE_ONCEWT_MIN 1 /* 0.1 KG */ #define FEED_SCALE_ONCEWT_MAX 5000 /* 500.0 KG */ #define FEED_SCALE_WEIGHT_MAX 5000 /* 500.0 KG */ /* 产品形态运行时可切换:EEPROM(偏移172) 存 0/1,空白(0xFF) 时用 * main.h 的 PRODUCT_WITH_FEED_SCALE 编译宏做默认值。 * 1=接入磅秤(智能水产投料机),称重定量自动投喂; * 0=不接磅秤(基础四路继电器),feeding 指令直接控制继电器 1。 * 蓝牙命令 SCALE 查询,SCALE0/SCALE1 切换(写入后自动重启生效) */ extern uint8_t g_feed_scale_on; void feed_scale_load_mode(void); /* app_init 早期调用,加载产品模式 */ void feed_scale_set_mode(uint8_t on); /* 写 EEPROM 并更新全局(重启后完全生效) */ #define FEED_SCALE_MODE_ADDR 172 /* EEPROM 产品模式字节(164~171 为电能累计脉冲) */ /* 投喂状态 */ typedef enum { FEED_IDLE = 0, /* 空闲 */ FEED_RUNNING, /* 投喂中: 继电器吸合,正在读485 */ FEED_DONE, /* 投喂完成 */ FEED_ERROR /* 异常结束(485失联/重量反而增加等) */ } FeedScaleState; /* 喂料秤模块 API */ void feedScaleInit(void); void feedScaleProcess(void); /* 触发/停止投喂 */ void feedScaleStart(uint16_t once_wt_100g); void feedScaleStop(void); /* 设置/获取单次投喂量(0.1KG 单位),设置后持久化到 EEPROM */ void feedScaleSetOnceWeight(uint16_t once_wt_100g); uint16_t feedScaleGetOnceWeight(void); /* 设置秤去皮重量(0.1KG 单位),并持久化到 EEPROM */ void feedScaleSetZero(uint16_t zero_100g); /* 获取当前/最近一次解析出的重量(0.1KG 单位) */ uint16_t feedScaleGetWeight(void); /* 获取最近一次 485 原始毛重(未去皮,0.1KG 单位) */ uint16_t feedScaleGetRawWeight(void); /* 获取当前去皮重量(0.1KG 单位) */ uint16_t feedScaleGetZero(void); /* 获取投喂状态 */ FeedScaleState feedScaleGetState(void); /* 获取已减少重量(0.1KG 单位),投喂结束后有效 */ uint16_t feedScaleGetReduced(void); /* 485 轮询间隔: 空闲 30s, 投喂中 1s */ #define FEED_SCALE_QUERY_IDLE_MS 30000u #define FEED_SCALE_QUERY_RUN_MS 1000u #endif /* __FEED_SCALE_H */