Skip to content

Commit 938010d

Browse files
authored
Merge pull request #54 from arduino/sensor_config
Add API to get the sensor configuration and to change the range
2 parents d497d9c + 6a4dcd9 commit 938010d

File tree

6 files changed

+98
-2
lines changed

6 files changed

+98
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/*
2+
This sketch shows how to retrieve actual configuration
3+
- sample rate and latency – from sensors.
4+
*/
5+
6+
#include "Arduino.h"
7+
#include "Arduino_BHY2.h"
8+
9+
SensorXYZ accel(SENSOR_ID_ACC);
10+
SensorXYZ gyro(SENSOR_ID_GYRO);
11+
Sensor temp(SENSOR_ID_TEMP);
12+
Sensor gas(SENSOR_ID_GAS);
13+
SensorQuaternion rotation(SENSOR_ID_RV);
14+
15+
SensorConfig cfg;
16+
17+
void setup()
18+
{
19+
Serial.begin(115200);
20+
while (!Serial);
21+
22+
BHY2.begin();
23+
24+
accel.begin();
25+
gyro.begin();
26+
temp.begin();
27+
gas.begin();
28+
rotation.begin();
29+
30+
}
31+
32+
void loop()
33+
{
34+
static auto printTime = millis();
35+
36+
// Update function should be continuously polled
37+
BHY2.update();
38+
39+
if (millis() - printTime >= 1000) {
40+
printTime = millis();
41+
42+
static float rate;
43+
static uint32_t latency;
44+
45+
cfg = accel.getConfiguration();
46+
Serial.println(String("acceleration configuration - rate: ") + cfg.sample_rate + String("Hz - latency: ") + cfg.latency + String("ms - range: ") + cfg.range);
47+
48+
cfg = gyro.getConfiguration();
49+
Serial.println(String("gyro configuration - rate: ") + cfg.sample_rate + String(" - latency: ") + cfg.latency + String("ms - range: ") + cfg.range);
50+
51+
cfg = temp.getConfiguration();
52+
Serial.println(String("temperature configuration - rate: ") + cfg.sample_rate + String(" - latency: ") + cfg.latency + String("ms - range: ") + cfg.range);
53+
54+
cfg = gas.getConfiguration();
55+
Serial.println(String("gas configuration - rate: ") + cfg.sample_rate + String(" - latency: ") + cfg.latency + String("ms - range: ") + cfg.range);
56+
57+
cfg = rotation.getConfiguration();
58+
Serial.println(String("rotation configuration - rate: ") + cfg.sample_rate + String(" - latency: ") + cfg.latency + String("ms - range: ") + cfg.range);
59+
Serial.println();
60+
}
61+
}

src/BoschSensortec.cpp

+14
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,20 @@ void BoschSensortec::configureSensor(SensorConfigurationPacket& config)
116116
}
117117
}
118118

119+
int BoschSensortec::configureSensorRange(uint8_t id, uint16_t range)
120+
{
121+
auto ret = bhy2_set_virt_sensor_range(id, range, &_bhy2);
122+
if (ret == BHY2_OK) {
123+
return 1;
124+
}
125+
return 0;
126+
}
127+
128+
void BoschSensortec::getSensorConfiguration(uint8_t id, SensorConfig& virt_sensor_conf)
129+
{
130+
bhy2_get_virt_sensor_cfg(id, &virt_sensor_conf, &_bhy2);
131+
}
132+
119133
uint8_t BoschSensortec::availableSensorData()
120134
{
121135
return _sensorQueue.size();

src/BoschSensortec.h

+2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ class BoschSensortec {
3535
bool begin();
3636
void update();
3737
void configureSensor(SensorConfigurationPacket& config);
38+
int configureSensorRange(uint8_t id, uint16_t range);
39+
void getSensorConfiguration(uint8_t id, SensorConfig& virt_sensor_conf);
3840

3941
void printSensors();
4042
bool hasSensor(uint8_t sensorId);

src/sensors/SensorClass.cpp

+15-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,21 @@ void SensorClass::configure(float rate, uint32_t latency)
4949

5050
}
5151

52+
int SensorClass::setRange(uint16_t range)
53+
{
54+
return sensortec.configureSensorRange(_id, range);
55+
}
56+
57+
const SensorConfig SensorClass::getConfiguration()
58+
{
59+
SensorConfig config;
60+
61+
sensortec.getSensorConfiguration(_id, config);
62+
63+
return config;
64+
}
65+
5266
void SensorClass::end()
5367
{
5468
configure(0, 0);
55-
}
69+
}

src/sensors/SensorClass.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ class SensorClass {
2121
*/
2222
bool begin(float rate = 1000, uint32_t latency = 1);
2323
void configure(float rate, uint32_t latency);
24+
int setRange(uint16_t range);
25+
const SensorConfig getConfiguration();
2426
void end();
2527

2628
virtual void setData(SensorDataPacket &data) = 0;
@@ -32,4 +34,4 @@ class SensorClass {
3234
bool _subscribed;
3335
};
3436

35-
#endif
37+
#endif

src/sensors/SensorTypes.h

+3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22
#define SENSOR_TYPES_H_
33

44
#include "stdint.h"
5+
#include "bosch/bhy2_defs.h"
56

67
#define SENSOR_DATA_FIXED_LENGTH (10)
78

89
#define SENSOR_LONG_DATA_FIXED_LENGTH (18)
910

11+
typedef bhy2_virt_sensor_conf SensorConfig;
12+
1013
struct __attribute__((packed)) SensorConfigurationPacket {
1114
uint8_t sensorId;
1215
// sample rate is used also to enable/disable the sensor

0 commit comments

Comments
 (0)