传感器值信息和描述信息的分离

一般来讲,传感器数据可以分为离散型和数值型。离散型传感器记录布尔值类型信息
如,开/关,正常/不正常。数值型传感器要记录的数据稍微复杂一些,如: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);
                }
        }

这样我们分离了传感器的描述信息和值信息。对于数值型传感器值信息和描述信息也可以这样分离。

你可能感兴趣的:(传感器值信息和描述信息的分离)