60 lines
2.0 KiB
C
60 lines
2.0 KiB
C
#ifndef __FEED_SCALE_H
|
||
#define __FEED_SCALE_H
|
||
|
||
#include "main.h"
|
||
#include <stdint.h>
|
||
|
||
/* 单次投喂量有效范围: 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 */
|
||
|
||
/* 磅秤接入控制:由 main.h 的 PRODUCT_WITH_FEED_SCALE 决定,此处做反向映射。
|
||
* 1=不接磅秤(基础四路继电器产品),feeding 指令直接控制继电器 1;
|
||
* 0=接入磅秤(智能水产投料机产品),使用称重定量自动投喂逻辑 */
|
||
#define FEED_SCALE_DISABLED (!PRODUCT_WITH_FEED_SCALE)
|
||
|
||
/* 投喂状态 */
|
||
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 */
|