12
12
#include " ANTPLUS.h"
13
13
14
14
#define BAUD_RATE 9600
15
- #define WILDCARD_DEVICE 0
16
15
#define CHANNEL_0 0
17
16
18
17
const uint8_t NETWORK_KEY[] = {0x00 , 0x11 , 0x22 , 0x33 , 0x44 , 0x55 , 0x66 , 0x77 }; // get this from thisisant.com
19
18
20
19
AntWithCallbacks ant = AntWithCallbacks();
21
20
AntPlusRouter router = AntPlusRouter();
22
- ProfileHeartRateMonitor hr = ProfileHeartRateMonitor(WILDCARD_DEVICE );
21
+ ProfileHeartRateMonitor hr = ProfileHeartRateMonitor();
23
22
24
- void previousHeartBeatDataPageHandler (HeartRatePreviousHeartBeat& dp, uintptr_t data) {
25
- Serial.print (" HR: " );
26
- Serial.println (dp.getComputedHeartRate ());
27
- }
23
+ void heartRateBaseDataPageHandler (AntRxDataResponse& msg, uintptr_t data);
24
+ void batteryStatusDataPageHandler (HeartRateBatteryStatus& msg, uintptr_t data);
25
+ void capabilitiesDataPageHandler (HeartRateCapabilities& msg, uintptr_t data);
26
+ void cumulativeOperatingTimeDataPageHandler (HeartRateCumulativeOperatingTime& msg, uintptr_t data);
27
+ void defaultDataPageHandler (HeartRateDefault& msg, uintptr_t data);
28
+ void manufacturerInformationDataPageHandler (HeartRateManufacturerInformation& msg, uintptr_t data);
29
+ void previousHeartBeatDataPageHandler (HeartRatePreviousHeartBeat& msg, uintptr_t data);
30
+ void productInformationDataPageHandler (HeartRateProductInformation& msg, uintptr_t data);
31
+ void swimIntervalSummary (HeartRateSwimIntervalSummary& msg, uintptr_t data);
32
+ void modeSettings (ModeSettings& msg, uintptr_t data);
33
+
34
+ void heartRateFeatures (uint8_t bitfield);
35
+ void printStatus (uint8_t status);
28
36
29
37
void setup () {
30
38
Serial1.begin (BAUD_RATE);
31
39
ant.setSerial (Serial1);
32
- delay (10000 );
40
+ delay (15000 );
33
41
34
42
router.setDriver (&ant); // never touch ant again
35
43
router.setAntPlusNetworkKey (NETWORK_KEY);
@@ -38,14 +46,153 @@ void setup() {
38
46
39
47
Serial.begin (BAUD_RATE);
40
48
Serial.println (" Running" );
41
- hr.onHeartRatePreviousHeartBeat (previousHeartBeatDataPageHandler, NULL );
49
+ hr.onDataPage (heartRateBaseDataPageHandler);
50
+ hr.onHeartRateBatteryStatus (batteryStatusDataPageHandler);
51
+ hr.onHeartRateCapabilities (capabilitiesDataPageHandler);
52
+ hr.onHeartRateCumulativeOperatingTime (cumulativeOperatingTimeDataPageHandler);
53
+ hr.onHeartRateDefault (defaultDataPageHandler);
54
+ hr.onHeartRateManufacturerInformation (manufacturerInformationDataPageHandler);
55
+ hr.onHeartRatePreviousHeartBeat (previousHeartBeatDataPageHandler);
56
+ hr.onHeartRateProductInformation (productInformationDataPageHandler);
57
+ hr.onHeartRateSwimIntervalSummary (swimIntervalSummary);
58
+ hr.onModeSettings (modeSettings);
42
59
hr.begin ();
43
60
// wait for pair to complete
44
- while (hr. getChannelStatus () == CHANNEL_STATUS_SEARCHING) {router. loop ();} ;
61
+ uint8_t status = hr. waitForPair () ;
45
62
// print channel status
46
- // get sensor serial number
63
+ printStatus (status);
64
+ Serial.println (" ===========================" );
65
+ Serial.print (" Device Number: " );
66
+ Serial.println (hr.getDeviceNumber ());
67
+ Serial.print (" Transmisison Type: " );
68
+ Serial.println (hr.getTransmissionType ());
47
69
}
48
70
49
71
void loop () {
50
72
router.loop ();
73
+ }
74
+
75
+ void batteryStatusDataPageHandler (HeartRateBatteryStatus& msg, uintptr_t data) {
76
+ Serial.print (" Battery Level: " );
77
+ Serial.println (msg.getBatteryLevel ());
78
+ Serial.print (" Fractional Battery Voltage: " );
79
+ Serial.println (msg.getFractionalBatteryVoltage ());
80
+ Serial.print (" Coarse Battery Voltage: " );
81
+ Serial.println (msg.getCoarseBatteryVoltage ());
82
+ Serial.print (" Battery Status: " );
83
+ Serial.println (msg.getBatteryStatus ());
84
+ }
85
+
86
+ void capabilitiesDataPageHandler (HeartRateCapabilities& msg, uintptr_t data) {
87
+ Serial.print (" Features Supported: " );
88
+ heartRateFeatures (msg.getFeaturesSupported ());
89
+ Serial.print (" Features Enabled: " );
90
+ heartRateFeatures (msg.getFeaturesEnabled ());
91
+ }
92
+
93
+ void cumulativeOperatingTimeDataPageHandler (HeartRateCumulativeOperatingTime& msg, uintptr_t data) {
94
+ Serial.print (" Cumulative Operating Time: " );
95
+ Serial.println (msg.getCumulativeOperatingTime ());
96
+ }
97
+
98
+ void defaultDataPageHandler (HeartRateDefault& msg, uintptr_t data) {
99
+ // All fields are reserved
100
+ }
101
+
102
+ void manufacturerInformationDataPageHandler (HeartRateManufacturerInformation& msg, uintptr_t data) {
103
+ Serial.print (" Manufacturer ID LSB: " );
104
+ Serial.println (msg.getManufacturerIdLsb ());
105
+ Serial.print (" Serial Number: " );
106
+ Serial.println (msg.getSerialNumber ());
107
+ }
108
+
109
+ void previousHeartBeatDataPageHandler (HeartRatePreviousHeartBeat& dp, uintptr_t data) {
110
+ Serial.print (" Manufacturer Specific Byte: " );
111
+ Serial.println (dp.getManufacturerSpecific ());
112
+ Serial.print (" Previous Heart Beat Event Time: " );
113
+ Serial.println (dp.getPreviousHeartBeatEventTime ());
114
+ }
115
+
116
+ void productInformationDataPageHandler (HeartRateProductInformation& msg, uintptr_t data) {
117
+ Serial.print (" Hardware Version: " );
118
+ Serial.println (msg.getHardwareVersion ());
119
+ Serial.print (" Software Version: " );
120
+ Serial.println (msg.getSoftwareVersion ());
121
+ Serial.print (" Model Number: " );
122
+ Serial.println (msg.getModelNumber ());
123
+ }
124
+
125
+ void swimIntervalSummary (HeartRateSwimIntervalSummary& msg, uintptr_t data) {
126
+ Serial.print (" Interval Average Heart Rate: " );
127
+ Serial.println (msg.getIntervalAverageHeartRate ());
128
+ Serial.print (" Interval Maximum Heart Rate: " );
129
+ Serial.println (msg.getIntervalMaximumHeartRate ());
130
+ Serial.print (" Session Average Heart Rate: " );
131
+ Serial.println (msg.getSessionAverageHeartRate ());
132
+ }
133
+
134
+ void modeSettings (ModeSettings& msg, uintptr_t data) {
135
+ Serial.print (" Sports Mode: " );
136
+ uint8_t sportMode = msg.getSportMode ();
137
+ switch (sportMode) {
138
+ case 0x01 :
139
+ Serial.println (" Running" );
140
+ break ;
141
+ case 0x02 :
142
+ Serial.println (" Cycling" );
143
+ break ;
144
+ case 0x05 :
145
+ Serial.println (" Swimming" );
146
+ break ;
147
+ }
148
+ }
149
+
150
+ void heartRateBaseDataPageHandler (AntRxDataResponse& msg, uintptr_t data) {
151
+ HeartRateBaseMainDataPage dp = HeartRateBaseMainDataPage (msg);
152
+ Serial.println (" ===========================" );
153
+ Serial.print (" DataPage: " );
154
+ Serial.println (dp.getDataPageNumber ());
155
+ Serial.print (" Heart Beat Event Time: " );
156
+ Serial.println (dp.getHeartBeatEventTime ());
157
+ Serial.print (" Heart Beat Count: " );
158
+ Serial.println (dp.getHeartBeatCount ());
159
+ Serial.print (" Computed Heart Rate: " );
160
+ Serial.println (dp.getComputedHeartRate ());
161
+ }
162
+
163
+ void heartRateFeatures (uint8_t bitfield) {
164
+ if (bitfield & ANTPLUS_HEARTRATE_DATAPAGE_CAPABILITIES_FEATURES_EXTENDEDRUNNING) {
165
+ Serial.print (" Extended Running " );
166
+ }
167
+ if (bitfield & ANTPLUS_HEARTRATE_DATAPAGE_CAPABILITIES_FEATURES_EXTENDEDCYCLING) {
168
+ Serial.print (" Extended Cycling " );
169
+ }
170
+ if (bitfield & ANTPLUS_HEARTRATE_DATAPAGE_CAPABILITIES_FEATURES_EXTENDEDSWIMMING) {
171
+ Serial.print (" Extended Swimming " );
172
+ }
173
+ if (bitfield & ANTPLUS_HEARTRATE_DATAPAGE_CAPABILITIES_FEATURES_MANUFACTURER1) {
174
+ Serial.print (" Manufacturer Bit 1 " );
175
+ }
176
+ if (bitfield & ANTPLUS_HEARTRATE_DATAPAGE_CAPABILITIES_FEATURES_MANUFACTURER2) {
177
+ Serial.print (" Manufacturer Bit 2 " );
178
+ }
179
+ Serial.println ();
180
+ }
181
+
182
+ void printStatus (uint8_t status) {
183
+ Serial.print (" Channel Status: " );
184
+ switch (status) {
185
+ case CHANNEL_STATUS_UNASSIGNED:
186
+ Serial.println (" Unassigned" );
187
+ break ;
188
+ case CHANNEL_STATUS_ASSIGNED:
189
+ Serial.println (" Assigned" );
190
+ break ;
191
+ case CHANNEL_STATUS_SEARCHING:
192
+ Serial.println (" Searching" );
193
+ break ;
194
+ case CHANNEL_STATUS_TRACKING:
195
+ Serial.println (" Tracking" );
196
+ break ;
197
+ }
51
198
}
0 commit comments