Skip to content

Commit d44c8e2

Browse files
committed
Merge branch 'develop'
2 parents 75034fb + 2de0df0 commit d44c8e2

File tree

62 files changed

+1529
-255
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+1529
-255
lines changed

.gitignore

+4-1
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,8 @@
33
.ycm*
44
*.swp
55

6+
# used for testing
7+
src/main.cpp
68
.DS_Store
7-
.tags*
9+
.tags*
10+
tags

.travis.yml

+3-2
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,9 @@ cache:
3434
- "~/.platformio"
3535

3636
env:
37-
# - PLATFORMIO_CI_SRC=examples/HeartRateSensor/HeartRateSensor.ino
38-
- PLATFORMIO_CI_SRC=examples/HeartRateMonitor/HeartRateMonitor.ino
37+
- PLATFORMIO_CI_SRC=examples/EnvironmentDisplay/EnvironmentDisplay.ino
38+
- PLATFORMIO_CI_SRC=examples/HeartRateDisplay/HeartRateDisplay.ino
39+
- PLATFORMIO_CI_SRC=examples/BicycleSpeedDisplay/BicycleSpeedDisplay.ino
3940

4041
install:
4142
- pip install -U platformio
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
/***********************************
2+
* AntPlus Bicycle Speed Display example
3+
*
4+
* Finds a nearby Bike Speed Sensor, pairs
5+
* to it and then reads the information
6+
* out via the serial port.
7+
*
8+
* Author Curtis Malainey
9+
************************************/
10+
#include <Arduino.h>
11+
#include "ANT.h"
12+
#include "ANTPLUS.h"
13+
14+
#define BAUD_RATE 9600
15+
#define CHANNEL_0 0
16+
17+
const uint8_t NETWORK_KEY[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77}; // get this from thisisant.com
18+
19+
AntWithCallbacks ant = AntWithCallbacks();
20+
AntPlusRouter router = AntPlusRouter();
21+
ProfileBicycleSpeedDisplay bikeSpeed = ProfileBicycleSpeedDisplay();
22+
23+
void bicycleSpeedBaseDataPageHandler(AntRxDataResponse& msg, uintptr_t data);
24+
void batteryStatusDataPageHandler(BicycleSpeedBatteryStatus& msg, uintptr_t data);
25+
void motionAndSpeedDataPageHandler(BicycleSpeedMotionAndSpeed& msg, uintptr_t data);
26+
void cumulativeOperatingTimeDataPageHandler(BicycleSpeedCumulativeOperatingTime& msg, uintptr_t data);
27+
void defaultDataPageHandler(BicycleSpeedDefault& msg, uintptr_t data);
28+
void manufacturerIDDataPageHandler(BicycleSpeedManufacturerID& msg, uintptr_t data);
29+
void productIDDataPageHandler(BicycleSpeedProductID& msg, uintptr_t data);
30+
31+
void bicycleSpeedFlags(uint8_t flags);
32+
void bicycleSpeedBatteryStatus(uint8_t flags);
33+
void printStatus(uint8_t status);
34+
35+
void setup() {
36+
Serial1.begin(BAUD_RATE);
37+
ant.setSerial(Serial1);
38+
delay(15000);
39+
40+
router.setDriver(&ant); // never touch ant again
41+
router.setAntPlusNetworkKey(NETWORK_KEY);
42+
router.setProfile(CHANNEL_0, &bikeSpeed);
43+
// Delay after initial setup to wait for user to connect on serial
44+
45+
Serial.begin(BAUD_RATE);
46+
Serial.println("Running");
47+
bikeSpeed.onDataPage(bicycleSpeedBaseDataPageHandler);
48+
bikeSpeed.onBicycleSpeedBatteryStatus(batteryStatusDataPageHandler);
49+
bikeSpeed.onBicycleSpeedMotionAndSpeed(motionAndSpeedDataPageHandler);
50+
bikeSpeed.onBicycleSpeedCumulativeOperatingTime(cumulativeOperatingTimeDataPageHandler);
51+
bikeSpeed.onBicycleSpeedDefault(defaultDataPageHandler);
52+
bikeSpeed.onBicycleSpeedManufacturerID(manufacturerIDDataPageHandler);
53+
bikeSpeed.onBicycleSpeedProductID(productIDDataPageHandler);
54+
bikeSpeed.begin();
55+
// wait for pair to complete
56+
uint8_t status = bikeSpeed.waitForPair();
57+
// print channel status
58+
Serial.println("===========================");
59+
printStatus(status);
60+
Serial.print("Device Number: ");
61+
Serial.println(bikeSpeed.getDeviceNumber());
62+
Serial.print("Transmisison Type: ");
63+
Serial.println(bikeSpeed.getTransmissionType());
64+
}
65+
66+
void loop() {
67+
router.loop();
68+
}
69+
70+
void batteryStatusDataPageHandler(BicycleSpeedBatteryStatus& msg, uintptr_t data) {
71+
Serial.print("Fractional Battery Voltage: ");
72+
Serial.println(msg.getFractionalBatteryVoltage());
73+
Serial.print("Coarse Battery Voltage: ");
74+
Serial.println(msg.getCoarseBatteryVoltage());
75+
Serial.print("Battery Status: ");
76+
bicycleSpeedBatteryStatus(msg.getBatteryStatus());
77+
}
78+
79+
void motionAndSpeedDataPageHandler(BicycleSpeedMotionAndSpeed& msg, uintptr_t data) {
80+
Serial.print("Flags: ");
81+
bicycleSpeedFlags(msg.getFlags());
82+
}
83+
84+
void cumulativeOperatingTimeDataPageHandler(BicycleSpeedCumulativeOperatingTime& msg, uintptr_t data) {
85+
Serial.print("Cumulative Operating Time: ");
86+
Serial.println(msg.getCumulativeOperatingTime());
87+
}
88+
89+
void defaultDataPageHandler(BicycleSpeedDefault& msg, uintptr_t data) {
90+
// All fields are reserved
91+
}
92+
93+
void manufacturerIDDataPageHandler(BicycleSpeedManufacturerID& msg, uintptr_t data) {
94+
Serial.print("Manufacturer ID LSB: ");
95+
Serial.println(msg.getManufacturerId());
96+
Serial.print("Serial Number: ");
97+
Serial.println(msg.getSerialNumber());
98+
}
99+
100+
void productIDDataPageHandler(BicycleSpeedProductID& msg, uintptr_t data) {
101+
Serial.print("Hardware Version: ");
102+
Serial.println(msg.getHardwareVersion());
103+
Serial.print("Software Version: ");
104+
Serial.println(msg.getSoftwareVersion());
105+
Serial.print("Model Number: ");
106+
Serial.println(msg.getModelNumber());
107+
}
108+
109+
void bicycleSpeedBaseDataPageHandler(AntRxDataResponse& msg, uintptr_t data) {
110+
BicycleSpeedBaseMainDataPage dp = BicycleSpeedBaseMainDataPage(msg);
111+
Serial.println("===========================");
112+
Serial.print("DataPage: ");
113+
Serial.println(dp.getDataPageNumber());
114+
Serial.print("Bike Speed Event Time: ");
115+
Serial.println(dp.getBikeSpeedEventTime());
116+
Serial.print("Cumulative Speed Revolution Count: ");
117+
Serial.println(dp.getCumulativeSpeedRevolutionCount());
118+
}
119+
120+
void printStatus(uint8_t status) {
121+
Serial.print("Channel Status: ");
122+
switch (status) {
123+
case CHANNEL_STATUS_UNASSIGNED:
124+
Serial.println("Unassigned");
125+
break;
126+
case CHANNEL_STATUS_ASSIGNED:
127+
Serial.println("Assigned");
128+
break;
129+
case CHANNEL_STATUS_SEARCHING:
130+
Serial.println("Searching");
131+
break;
132+
case CHANNEL_STATUS_TRACKING:
133+
Serial.println("Tracking");
134+
break;
135+
}
136+
}
137+
138+
void bicycleSpeedFlags(uint8_t flags) {
139+
if (flags & ANTPLUS_BICYCLESPEED_DATAPAGE_MOTIONANDSPEED_FLAGS_STOPINDICATOR) {
140+
Serial.print("Motion Stopped");
141+
}
142+
Serial.println();
143+
}
144+
145+
void bicycleSpeedBatteryStatus(uint8_t flags) {
146+
switch (flags) {
147+
case ANTPLUS_BICYCLESPEED_DATAPAGE_BATTERSTATUS_BATTERYSTATUS_NEW:
148+
Serial.println("New");
149+
break;
150+
case ANTPLUS_BICYCLESPEED_DATAPAGE_BATTERSTATUS_BATTERYSTATUS_GOOD:
151+
Serial.println("Good");
152+
break;
153+
case ANTPLUS_BICYCLESPEED_DATAPAGE_BATTERSTATUS_BATTERYSTATUS_OK:
154+
Serial.println("Ok");
155+
break;
156+
case ANTPLUS_BICYCLESPEED_DATAPAGE_BATTERSTATUS_BATTERYSTATUS_LOW:
157+
Serial.println("Low");
158+
break;
159+
case ANTPLUS_BICYCLESPEED_DATAPAGE_BATTERSTATUS_BATTERYSTATUS_CRITICAL:
160+
Serial.println("Critical");
161+
break;
162+
case ANTPLUS_BICYCLESPEED_DATAPAGE_BATTERSTATUS_BATTERYSTATUS_INVALID:
163+
Serial.println("Invalid");
164+
break;
165+
default:
166+
Serial.println("Reserved/Unknown");
167+
break;
168+
}
169+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
/***********************************
2+
* AntPlus Environment Display example
3+
*
4+
* Finds a nearby environment monitor, pairs
5+
* to it and then reads the information
6+
* out via the serial port.
7+
*
8+
* Author Curtis Malainey
9+
************************************/
10+
#include <Arduino.h>
11+
#include "ANT.h"
12+
#include "ANTPLUS.h"
13+
14+
#define BAUD_RATE 9600
15+
#define CHANNEL_0 0
16+
17+
const uint8_t NETWORK_KEY[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77}; // get this from thisisant.com
18+
19+
AntWithCallbacks ant = AntWithCallbacks();
20+
AntPlusRouter router = AntPlusRouter();
21+
ProfileEnvironmentDisplay env = ProfileEnvironmentDisplay();
22+
23+
void generalInformationDataPageHandler(EnvironmentGeneralInformation& msg, uintptr_t data);
24+
void temperatureDataPageHandler(EnvironmentTemperature& msg, uintptr_t data);
25+
void manufacturersInformationDataPageHandler(ManufacturersInformation& msg, uintptr_t data);
26+
void productInformationDataPageHandler(ProductInformation& msg, uintptr_t data);
27+
28+
void printStatus(uint8_t status);
29+
30+
void setup() {
31+
Serial1.begin(BAUD_RATE);
32+
ant.setSerial(Serial1);
33+
delay(15000);
34+
35+
router.setDriver(&ant); // never touch ant again
36+
router.setAntPlusNetworkKey(NETWORK_KEY);
37+
router.setProfile(CHANNEL_0, &env);
38+
// Delay after initial setup to wait for user to connect on serial
39+
40+
Serial.begin(BAUD_RATE);
41+
Serial.println("Running");
42+
env.onEnvironmentGeneralInformation(generalInformationDataPageHandler);
43+
env.onEnvironmentTemperature(temperatureDataPageHandler);
44+
env.onManufacturersInformation(manufacturersInformationDataPageHandler);
45+
env.onProductInformation(productInformationDataPageHandler);
46+
env.begin();
47+
// wait for pair to complete
48+
uint8_t status = env.waitForPair();
49+
// print channel status
50+
Serial.println("===========================");
51+
printStatus(status);
52+
Serial.print("Device Number: ");
53+
Serial.println(env.getDeviceNumber());
54+
Serial.print("Transmisison Type: ");
55+
Serial.println(env.getTransmissionType());
56+
}
57+
58+
void loop() {
59+
router.loop();
60+
}
61+
62+
void generalInformationDataPageHandler(EnvironmentGeneralInformation& msg, uintptr_t data) {
63+
Serial.println("===========================");
64+
Serial.print("DataPage: ");
65+
Serial.println(msg.getDataPageNumber());
66+
Serial.print("Local Time: ");
67+
Serial.println(msg.getTransmissionInfoLocalTime());
68+
Serial.print("UTC Time: ");
69+
Serial.println(msg.getTransmissionInfoUtcTime());
70+
Serial.print("Default Transmisison Rate: ");
71+
if (msg.getTransmissionInfoDefaultTransmissionRate() == 0) {
72+
Serial.println("0.5Hz");
73+
} else if (msg.getTransmissionInfoDefaultTransmissionRate() == 1) {
74+
Serial.println("4Hz");
75+
} else {
76+
Serial.println("Unknown");
77+
}
78+
Serial.println("Supported Pages: ");
79+
if (msg.getSupportedPages() & ANTPLUS_ENVIRONMENT_DATAPAGE_GENERALINFORMATION_SUPPORTEDPAGES_PAGE0SUPPORT) {
80+
Serial.println("Page 0 Supported");
81+
}
82+
if (msg.getSupportedPages() & ANTPLUS_ENVIRONMENT_DATAPAGE_GENERALINFORMATION_SUPPORTEDPAGES_PAGE1SUPPORT) {
83+
Serial.println("Page 1 Supported");
84+
}
85+
}
86+
87+
void temperatureDataPageHandler(EnvironmentTemperature& msg, uintptr_t data) {
88+
Serial.println("===========================");
89+
Serial.print("DataPage: ");
90+
Serial.println(msg.getDataPageNumber());
91+
Serial.print("Event Count: ");
92+
Serial.println(msg.getEventCount());
93+
Serial.print("24h Low (C): ");
94+
Serial.println(msg.get24HourLow()*0.1);
95+
Serial.print("24h High (C): ");
96+
Serial.println(msg.get24HourHigh()*0.1);
97+
Serial.print("Current Temp (C): ");
98+
Serial.println(msg.getCurrentTemp()*0.01);
99+
}
100+
101+
void manufacturersInformationDataPageHandler(ManufacturersInformation& msg, uintptr_t data) {
102+
Serial.println("===========================");
103+
Serial.print("DataPage: ");
104+
Serial.println(msg.getDataPageNumber());
105+
Serial.print("HW Revision: ");
106+
Serial.println(msg.getHWRevision());
107+
Serial.print("ManufacturerID: ");
108+
Serial.println(msg.getManufacturerID());
109+
Serial.print("Model Number: ");
110+
Serial.println(msg.getModelNumber());
111+
}
112+
113+
void productInformationDataPageHandler(ProductInformation& msg, uintptr_t data) {
114+
Serial.println("===========================");
115+
Serial.print("DataPage: ");
116+
Serial.println(msg.getDataPageNumber());
117+
Serial.print("SW Revision Supplemental: ");
118+
Serial.println(msg.getSWRevisionSupplemental());
119+
Serial.print("SW Revision Main: ");
120+
Serial.println(msg.getSWRevisionMain());
121+
Serial.print("Serial Number: ");
122+
Serial.println(msg.getSerialNumber());
123+
}
124+
125+
void printStatus(uint8_t status) {
126+
Serial.print("Channel Status: ");
127+
switch (status) {
128+
case CHANNEL_STATUS_UNASSIGNED:
129+
Serial.println("Unassigned");
130+
break;
131+
case CHANNEL_STATUS_ASSIGNED:
132+
Serial.println("Assigned");
133+
break;
134+
case CHANNEL_STATUS_SEARCHING:
135+
Serial.println("Searching");
136+
break;
137+
case CHANNEL_STATUS_TRACKING:
138+
Serial.println("Tracking");
139+
break;
140+
}
141+
}

examples/HeartRateMonitor/HeartRateMonitor.ino renamed to examples/HeartRateDisplay/HeartRateDisplay.ino

+4-22
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/***********************************
2-
* AntPlus HRMonitor example
2+
* AntPlus HRDisplay example
33
*
4-
* Finds a nearby HR sensor, pairs
4+
* Finds a nearby HR Monitor, pairs
55
* to it and then reads the information
66
* out via the serial port.
77
*
@@ -18,7 +18,7 @@ const uint8_t NETWORK_KEY[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77};
1818

1919
AntWithCallbacks ant = AntWithCallbacks();
2020
AntPlusRouter router = AntPlusRouter();
21-
ProfileHeartRateMonitor hr = ProfileHeartRateMonitor();
21+
ProfileHeartRateDisplay hr = ProfileHeartRateDisplay();
2222

2323
void heartRateBaseDataPageHandler(AntRxDataResponse& msg, uintptr_t data);
2424
void batteryStatusDataPageHandler(HeartRateBatteryStatus& msg, uintptr_t data);
@@ -29,7 +29,6 @@ void manufacturerInformationDataPageHandler(HeartRateManufacturerInformation& ms
2929
void previousHeartBeatDataPageHandler(HeartRatePreviousHeartBeat& msg, uintptr_t data);
3030
void productInformationDataPageHandler(HeartRateProductInformation& msg, uintptr_t data);
3131
void swimIntervalSummary(HeartRateSwimIntervalSummary& msg, uintptr_t data);
32-
void modeSettings(ModeSettings& msg, uintptr_t data);
3332

3433
void heartRateFeatures(uint8_t bitfield);
3534
void printStatus(uint8_t status);
@@ -55,7 +54,6 @@ void setup() {
5554
hr.onHeartRatePreviousHeartBeat(previousHeartBeatDataPageHandler);
5655
hr.onHeartRateProductInformation(productInformationDataPageHandler);
5756
hr.onHeartRateSwimIntervalSummary(swimIntervalSummary);
58-
hr.onModeSettings(modeSettings);
5957
hr.begin();
6058
// wait for pair to complete
6159
uint8_t status = hr.waitForPair();
@@ -131,22 +129,6 @@ void swimIntervalSummary(HeartRateSwimIntervalSummary& msg, uintptr_t data) {
131129
Serial.println(msg.getSessionAverageHeartRate());
132130
}
133131

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-
150132
void heartRateBaseDataPageHandler(AntRxDataResponse& msg, uintptr_t data) {
151133
HeartRateBaseMainDataPage dp = HeartRateBaseMainDataPage(msg);
152134
Serial.println("===========================");
@@ -195,4 +177,4 @@ void printStatus(uint8_t status) {
195177
Serial.println("Tracking");
196178
break;
197179
}
198-
}
180+
}

0 commit comments

Comments
 (0)