一般来讲,传感器数据可以分为离散型和数值型。离散型传感器记录布尔值类型信息
如,开/关,正常/不正常。数值型传感器要记录的数据稍微复杂一些,如:31摄氏度,15毫米
对于数值型传感器数据,在程序中一般可以这样描述
对于传感器A(风扇)0 代表关,1代表开,获取到传感器A 的数据为1时,代表风扇开。
对于传感器B(温度异常检测器件)0代表不正常,1代表正常,获取到传感器B的数据为1时,代表温度正常。
C语言描述上述逻辑可以这样写:
struct sensor{
const char *false_desc;
const char *true_desc;
}
struct sensor sensor_a= {"关","开"};
struct sensor sensor_b= {"不正常","正常"};
int value = get_sensor_a();
if(value == 0)
printf("sensor a = %s\n",sensor_a->false_desc);
else
printf("sensor a = %s\n",sensor_a->true_desc);
value = get_sensor_b();
if(value == 0)
printf("sensor b = %s\n",sensor_b->false_desc);
else
printf("sensor b = %s\n",sensor_b->true_desc);
当项目中传感器的数量和类型较多时,代码可以这样修改
void register_sensor(int sensor_id,int sensor_type)
{
register();
}
int find_sensor_type_by_id(int id)
{
return type;
}
struct sensor_desc{
const char *false_desc;
const char *true_desc;
}
static struct sensor_desc *find_sensor_desc_by_type(int sensor_type)
{
return &sensor_desc;
}
void print_sensor_value(int sensor_id,int value)
{
int sensor_type = find_sensor_type_by_id(sensor_id);
struct sensor_desc *desc = find_sensor_desc_by_type(sensor_type);
if(value ==0)
printf("value=%s\n",desc->false_desc);
else
printf("value=%s\n",desc->true_desc);
}
int main()
{
register_sensor()
while(1){
int v = get_sensor_value(sensor_id);
print_sensor_value(sensor_id,v);
}
}
这样我们分离了传感器的描述信息和值信息。对于数值型传感器值信息和描述信息也可以这样分离。