2. 获取传感器数据
基于以上对传感器ID的描述,此时若想获取传感器的数据,只需在应用程序中调用获取传感器数据的函数接口即可,获取传感器数据的函数接口如下:
aw_err_t aw_sensor_data_get (int id, aw_sensor_val_t *p_val);
其中,id即为传感器通道ID号,p_val为存放对应ID的传感器数据。此处aw_sensor_val_t类型为一个结构体,只需知道它是一个保存传感器数据的变量即可。
基于此,获取系统中任意传感器通道的数据只需调用该接口即可,例如,每隔500ms获取一次温度采样数据的程序范例如下:
1 aw_sensor_val_t tem_val;
2 while (1) {
3 aw_sensor_data_get(0, &tem_val); // 通道ID为0,对应表 1中的温度采集通道
4 aw_mdelay(500);
5 }
同样,若想获取光照度传感器采样数据,程序范例如下:
1 aw_sensor_val_t als_val;
2 while (1) {
3 aw_sensor_data_get(6, &als_val); // 通道ID为6,对应表 1中的光照度采集通道
4 aw_mdelay(500);
5 }
以此类推,只需要调用这一个相同的接口,便可以依次获取系统中所有传感器的数据。此时,或许有人会疑问,系统中那么多传感器,一个一个调用该接口,会不会显得繁琐?对于该问题,AWorks系统当然给出了答案,那就是提供同时获取多通道或者所有通道传感器数据的接口,该接口原型如下:
aw_err_t aw_sensor_group_data_get (const int *p_ids,
int num,
aw_sensor_val_t *p_buf);
其中,p_ids为指向传感器通道id列表的指针;num表示通道的数目,即id列表的大小;p_buf指向用于存储各通道数据的缓存,缓存大小与num一致。基于该接口,可以同时获取多个或所有系统中传感器的采样数据,例如,每隔500ms获取当前表 1中所有的传感器通道采样数据的程序范例如下:
1 const int id_s[7] = {0, 1, 2, 3, 4, 5, 6}; // 应用程序使用7个通道
2 aw_sensor_val_t val_buf[7]; // 存储7个通道数据的缓存
3
4 while (1) {
5 aw_sensor_group_data_get(id_s, 7, val_buf); // 获取当前系统所有传感器通道的采样数据
6 aw_mdelay(500);
7 }
基于此,AWorks系统的传感器接口已经完美的实现了使用同种接口获取所有传感器采样数据的功能。此时,或许有人又会提出疑问,这两个接口采用的似乎都是轮询的方式获取传感器数据,若在效率要求较高的场合,调用该接口是不是不太好呢?再者说,如今的许多传感器都可以采用中断触发的方式获取数据,这样可以大大提高应用程序的效率,那么能不能实现这种功能呢?当然!AWorks同样提供了这种接口,而且接口的调用非常方便,简洁。接下来将为你一一揭秘。
2. 获取传感器数据
基于以上对传感器ID的描述,此时若想获取传感器的数据,只需在应用程序中调用获取传感器数据的函数接口即可,获取传感器数据的函数接口如下:
aw_err_t aw_sensor_data_get (int id, aw_sensor_val_t *p_val);
其中,id即为传感器通道ID号,p_val为存放对应ID的传感器数据。此处aw_sensor_val_t类型为一个结构体,只需知道它是一个保存传感器数据的变量即可。
基于此,获取系统中任意传感器通道的数据只需调用该接口即可,例如,每隔500ms获取一次温度采样数据的程序范例如下:
1 aw_sensor_val_t tem_val;
2 while (1) {
3 aw_sensor_data_get(0, &tem_val); // 通道ID为0,对应表 1中的温度采集通道
4 aw_mdelay(500);
5 }
同样,若想获取光照度传感器采样数据,程序范例如下:
1 aw_sensor_val_t als_val;
2 while (1) {
3 aw_sensor_data_get(6, &als_val); // 通道ID为6,对应表 1中的光照度采集通道
4 aw_mdelay(500);
5 }
以此类推,只需要调用这一个相同的接口,便可以依次获取系统中所有传感器的数据。此时,或许有人会疑问,系统中那么多传感器,一个一个调用该接口,会不会显得繁琐?对于该问题,AWorks系统当然给出了答案,那就是提供同时获取多通道或者所有通道传感器数据的接口,该接口原型如下:
aw_err_t aw_sensor_group_data_get (const int *p_ids,
int num,
aw_sensor_val_t *p_buf);
其中,p_ids为指向传感器通道id列表的指针;num表示通道的数目,即id列表的大小;p_buf指向用于存储各通道数据的缓存,缓存大小与num一致。基于该接口,可以同时获取多个或所有系统中传感器的采样数据,例如,每隔500ms获取当前表 1中所有的传感器通道采样数据的程序范例如下:
1 const int id_s[7] = {0, 1, 2, 3, 4, 5, 6}; // 应用程序使用7个通道
2 aw_sensor_val_t val_buf[7]; // 存储7个通道数据的缓存
3
4 while (1) {
5 aw_sensor_group_data_get(id_s, 7, val_buf); // 获取当前系统所有传感器通道的采样数据
6 aw_mdelay(500);
7 }
基于此,AWorks系统的传感器接口已经完美的实现了使用同种接口获取所有传感器采样数据的功能。此时,或许有人又会提出疑问,这两个接口采用的似乎都是轮询的方式获取传感器数据,若在效率要求较高的场合,调用该接口是不是不太好呢?再者说,如今的许多传感器都可以采用中断触发的方式获取数据,这样可以大大提高应用程序的效率,那么能不能实现这种功能呢?当然!AWorks同样提供了这种接口,而且接口的调用非常方便,简洁。接下来将为你一一揭秘。
举报