Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
cujomalainey committed Feb 5, 2018
2 parents 75034fb + 2de0df0 commit d44c8e2
Show file tree
Hide file tree
Showing 62 changed files with 1,529 additions and 255 deletions.
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -3,5 +3,8 @@
.ycm* .ycm*
*.swp *.swp


# used for testing
src/main.cpp
.DS_Store .DS_Store
.tags* .tags*
tags
5 changes: 3 additions & 2 deletions .travis.yml
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -34,8 +34,9 @@ cache:
- "~/.platformio" - "~/.platformio"


env: env:
# - PLATFORMIO_CI_SRC=examples/HeartRateSensor/HeartRateSensor.ino - PLATFORMIO_CI_SRC=examples/EnvironmentDisplay/EnvironmentDisplay.ino
- PLATFORMIO_CI_SRC=examples/HeartRateMonitor/HeartRateMonitor.ino - PLATFORMIO_CI_SRC=examples/HeartRateDisplay/HeartRateDisplay.ino
- PLATFORMIO_CI_SRC=examples/BicycleSpeedDisplay/BicycleSpeedDisplay.ino


install: install:
- pip install -U platformio - pip install -U platformio
Expand Down
169 changes: 169 additions & 0 deletions examples/BicycleSpeedDisplay/BicycleSpeedDisplay.ino
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,169 @@
/***********************************
* AntPlus Bicycle Speed Display example
*
* Finds a nearby Bike Speed Sensor, pairs
* to it and then reads the information
* out via the serial port.
*
* Author Curtis Malainey
************************************/
#include <Arduino.h>
#include "ANT.h"
#include "ANTPLUS.h"

#define BAUD_RATE 9600
#define CHANNEL_0 0

const uint8_t NETWORK_KEY[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77}; // get this from thisisant.com

AntWithCallbacks ant = AntWithCallbacks();
AntPlusRouter router = AntPlusRouter();
ProfileBicycleSpeedDisplay bikeSpeed = ProfileBicycleSpeedDisplay();

void bicycleSpeedBaseDataPageHandler(AntRxDataResponse& msg, uintptr_t data);
void batteryStatusDataPageHandler(BicycleSpeedBatteryStatus& msg, uintptr_t data);
void motionAndSpeedDataPageHandler(BicycleSpeedMotionAndSpeed& msg, uintptr_t data);
void cumulativeOperatingTimeDataPageHandler(BicycleSpeedCumulativeOperatingTime& msg, uintptr_t data);
void defaultDataPageHandler(BicycleSpeedDefault& msg, uintptr_t data);
void manufacturerIDDataPageHandler(BicycleSpeedManufacturerID& msg, uintptr_t data);
void productIDDataPageHandler(BicycleSpeedProductID& msg, uintptr_t data);

void bicycleSpeedFlags(uint8_t flags);
void bicycleSpeedBatteryStatus(uint8_t flags);
void printStatus(uint8_t status);

void setup() {
Serial1.begin(BAUD_RATE);
ant.setSerial(Serial1);
delay(15000);

router.setDriver(&ant); // never touch ant again
router.setAntPlusNetworkKey(NETWORK_KEY);
router.setProfile(CHANNEL_0, &bikeSpeed);
// Delay after initial setup to wait for user to connect on serial

Serial.begin(BAUD_RATE);
Serial.println("Running");
bikeSpeed.onDataPage(bicycleSpeedBaseDataPageHandler);
bikeSpeed.onBicycleSpeedBatteryStatus(batteryStatusDataPageHandler);
bikeSpeed.onBicycleSpeedMotionAndSpeed(motionAndSpeedDataPageHandler);
bikeSpeed.onBicycleSpeedCumulativeOperatingTime(cumulativeOperatingTimeDataPageHandler);
bikeSpeed.onBicycleSpeedDefault(defaultDataPageHandler);
bikeSpeed.onBicycleSpeedManufacturerID(manufacturerIDDataPageHandler);
bikeSpeed.onBicycleSpeedProductID(productIDDataPageHandler);
bikeSpeed.begin();
// wait for pair to complete
uint8_t status = bikeSpeed.waitForPair();
// print channel status
Serial.println("===========================");
printStatus(status);
Serial.print("Device Number: ");
Serial.println(bikeSpeed.getDeviceNumber());
Serial.print("Transmisison Type: ");
Serial.println(bikeSpeed.getTransmissionType());
}

void loop() {
router.loop();
}

void batteryStatusDataPageHandler(BicycleSpeedBatteryStatus& msg, uintptr_t data) {
Serial.print("Fractional Battery Voltage: ");
Serial.println(msg.getFractionalBatteryVoltage());
Serial.print("Coarse Battery Voltage: ");
Serial.println(msg.getCoarseBatteryVoltage());
Serial.print("Battery Status: ");
bicycleSpeedBatteryStatus(msg.getBatteryStatus());
}

void motionAndSpeedDataPageHandler(BicycleSpeedMotionAndSpeed& msg, uintptr_t data) {
Serial.print("Flags: ");
bicycleSpeedFlags(msg.getFlags());
}

void cumulativeOperatingTimeDataPageHandler(BicycleSpeedCumulativeOperatingTime& msg, uintptr_t data) {
Serial.print("Cumulative Operating Time: ");
Serial.println(msg.getCumulativeOperatingTime());
}

void defaultDataPageHandler(BicycleSpeedDefault& msg, uintptr_t data) {
// All fields are reserved
}

void manufacturerIDDataPageHandler(BicycleSpeedManufacturerID& msg, uintptr_t data) {
Serial.print("Manufacturer ID LSB: ");
Serial.println(msg.getManufacturerId());
Serial.print("Serial Number: ");
Serial.println(msg.getSerialNumber());
}

void productIDDataPageHandler(BicycleSpeedProductID& msg, uintptr_t data) {
Serial.print("Hardware Version: ");
Serial.println(msg.getHardwareVersion());
Serial.print("Software Version: ");
Serial.println(msg.getSoftwareVersion());
Serial.print("Model Number: ");
Serial.println(msg.getModelNumber());
}

void bicycleSpeedBaseDataPageHandler(AntRxDataResponse& msg, uintptr_t data) {
BicycleSpeedBaseMainDataPage dp = BicycleSpeedBaseMainDataPage(msg);
Serial.println("===========================");
Serial.print("DataPage: ");
Serial.println(dp.getDataPageNumber());
Serial.print("Bike Speed Event Time: ");
Serial.println(dp.getBikeSpeedEventTime());
Serial.print("Cumulative Speed Revolution Count: ");
Serial.println(dp.getCumulativeSpeedRevolutionCount());
}

void printStatus(uint8_t status) {
Serial.print("Channel Status: ");
switch (status) {
case CHANNEL_STATUS_UNASSIGNED:
Serial.println("Unassigned");
break;
case CHANNEL_STATUS_ASSIGNED:
Serial.println("Assigned");
break;
case CHANNEL_STATUS_SEARCHING:
Serial.println("Searching");
break;
case CHANNEL_STATUS_TRACKING:
Serial.println("Tracking");
break;
}
}

void bicycleSpeedFlags(uint8_t flags) {
if (flags & ANTPLUS_BICYCLESPEED_DATAPAGE_MOTIONANDSPEED_FLAGS_STOPINDICATOR) {
Serial.print("Motion Stopped");
}
Serial.println();
}

void bicycleSpeedBatteryStatus(uint8_t flags) {
switch (flags) {
case ANTPLUS_BICYCLESPEED_DATAPAGE_BATTERSTATUS_BATTERYSTATUS_NEW:
Serial.println("New");
break;
case ANTPLUS_BICYCLESPEED_DATAPAGE_BATTERSTATUS_BATTERYSTATUS_GOOD:
Serial.println("Good");
break;
case ANTPLUS_BICYCLESPEED_DATAPAGE_BATTERSTATUS_BATTERYSTATUS_OK:
Serial.println("Ok");
break;
case ANTPLUS_BICYCLESPEED_DATAPAGE_BATTERSTATUS_BATTERYSTATUS_LOW:
Serial.println("Low");
break;
case ANTPLUS_BICYCLESPEED_DATAPAGE_BATTERSTATUS_BATTERYSTATUS_CRITICAL:
Serial.println("Critical");
break;
case ANTPLUS_BICYCLESPEED_DATAPAGE_BATTERSTATUS_BATTERYSTATUS_INVALID:
Serial.println("Invalid");
break;
default:
Serial.println("Reserved/Unknown");
break;
}
}
141 changes: 141 additions & 0 deletions examples/EnvironmentDisplay/EnvironmentDisplay.ino
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,141 @@
/***********************************
* AntPlus Environment Display example
*
* Finds a nearby environment monitor, pairs
* to it and then reads the information
* out via the serial port.
*
* Author Curtis Malainey
************************************/
#include <Arduino.h>
#include "ANT.h"
#include "ANTPLUS.h"

#define BAUD_RATE 9600
#define CHANNEL_0 0

const uint8_t NETWORK_KEY[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77}; // get this from thisisant.com

AntWithCallbacks ant = AntWithCallbacks();
AntPlusRouter router = AntPlusRouter();
ProfileEnvironmentDisplay env = ProfileEnvironmentDisplay();

void generalInformationDataPageHandler(EnvironmentGeneralInformation& msg, uintptr_t data);
void temperatureDataPageHandler(EnvironmentTemperature& msg, uintptr_t data);
void manufacturersInformationDataPageHandler(ManufacturersInformation& msg, uintptr_t data);
void productInformationDataPageHandler(ProductInformation& msg, uintptr_t data);

void printStatus(uint8_t status);

void setup() {
Serial1.begin(BAUD_RATE);
ant.setSerial(Serial1);
delay(15000);

router.setDriver(&ant); // never touch ant again
router.setAntPlusNetworkKey(NETWORK_KEY);
router.setProfile(CHANNEL_0, &env);
// Delay after initial setup to wait for user to connect on serial

Serial.begin(BAUD_RATE);
Serial.println("Running");
env.onEnvironmentGeneralInformation(generalInformationDataPageHandler);
env.onEnvironmentTemperature(temperatureDataPageHandler);
env.onManufacturersInformation(manufacturersInformationDataPageHandler);
env.onProductInformation(productInformationDataPageHandler);
env.begin();
// wait for pair to complete
uint8_t status = env.waitForPair();
// print channel status
Serial.println("===========================");
printStatus(status);
Serial.print("Device Number: ");
Serial.println(env.getDeviceNumber());
Serial.print("Transmisison Type: ");
Serial.println(env.getTransmissionType());
}

void loop() {
router.loop();
}

void generalInformationDataPageHandler(EnvironmentGeneralInformation& msg, uintptr_t data) {
Serial.println("===========================");
Serial.print("DataPage: ");
Serial.println(msg.getDataPageNumber());
Serial.print("Local Time: ");
Serial.println(msg.getTransmissionInfoLocalTime());
Serial.print("UTC Time: ");
Serial.println(msg.getTransmissionInfoUtcTime());
Serial.print("Default Transmisison Rate: ");
if (msg.getTransmissionInfoDefaultTransmissionRate() == 0) {
Serial.println("0.5Hz");
} else if (msg.getTransmissionInfoDefaultTransmissionRate() == 1) {
Serial.println("4Hz");
} else {
Serial.println("Unknown");
}
Serial.println("Supported Pages: ");
if (msg.getSupportedPages() & ANTPLUS_ENVIRONMENT_DATAPAGE_GENERALINFORMATION_SUPPORTEDPAGES_PAGE0SUPPORT) {
Serial.println("Page 0 Supported");
}
if (msg.getSupportedPages() & ANTPLUS_ENVIRONMENT_DATAPAGE_GENERALINFORMATION_SUPPORTEDPAGES_PAGE1SUPPORT) {
Serial.println("Page 1 Supported");
}
}

void temperatureDataPageHandler(EnvironmentTemperature& msg, uintptr_t data) {
Serial.println("===========================");
Serial.print("DataPage: ");
Serial.println(msg.getDataPageNumber());
Serial.print("Event Count: ");
Serial.println(msg.getEventCount());
Serial.print("24h Low (C): ");
Serial.println(msg.get24HourLow()*0.1);
Serial.print("24h High (C): ");
Serial.println(msg.get24HourHigh()*0.1);
Serial.print("Current Temp (C): ");
Serial.println(msg.getCurrentTemp()*0.01);
}

void manufacturersInformationDataPageHandler(ManufacturersInformation& msg, uintptr_t data) {
Serial.println("===========================");
Serial.print("DataPage: ");
Serial.println(msg.getDataPageNumber());
Serial.print("HW Revision: ");
Serial.println(msg.getHWRevision());
Serial.print("ManufacturerID: ");
Serial.println(msg.getManufacturerID());
Serial.print("Model Number: ");
Serial.println(msg.getModelNumber());
}

void productInformationDataPageHandler(ProductInformation& msg, uintptr_t data) {
Serial.println("===========================");
Serial.print("DataPage: ");
Serial.println(msg.getDataPageNumber());
Serial.print("SW Revision Supplemental: ");
Serial.println(msg.getSWRevisionSupplemental());
Serial.print("SW Revision Main: ");
Serial.println(msg.getSWRevisionMain());
Serial.print("Serial Number: ");
Serial.println(msg.getSerialNumber());
}

void printStatus(uint8_t status) {
Serial.print("Channel Status: ");
switch (status) {
case CHANNEL_STATUS_UNASSIGNED:
Serial.println("Unassigned");
break;
case CHANNEL_STATUS_ASSIGNED:
Serial.println("Assigned");
break;
case CHANNEL_STATUS_SEARCHING:
Serial.println("Searching");
break;
case CHANNEL_STATUS_TRACKING:
Serial.println("Tracking");
break;
}
}
Original file line number Original file line Diff line number Diff line change
@@ -1,7 +1,7 @@
/*********************************** /***********************************
* AntPlus HRMonitor example * AntPlus HRDisplay example
* *
* Finds a nearby HR sensor, pairs * Finds a nearby HR Monitor, pairs
* to it and then reads the information * to it and then reads the information
* out via the serial port. * out via the serial port.
* *
Expand All @@ -18,7 +18,7 @@ const uint8_t NETWORK_KEY[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77};


AntWithCallbacks ant = AntWithCallbacks(); AntWithCallbacks ant = AntWithCallbacks();
AntPlusRouter router = AntPlusRouter(); AntPlusRouter router = AntPlusRouter();
ProfileHeartRateMonitor hr = ProfileHeartRateMonitor(); ProfileHeartRateDisplay hr = ProfileHeartRateDisplay();


void heartRateBaseDataPageHandler(AntRxDataResponse& msg, uintptr_t data); void heartRateBaseDataPageHandler(AntRxDataResponse& msg, uintptr_t data);
void batteryStatusDataPageHandler(HeartRateBatteryStatus& msg, uintptr_t data); void batteryStatusDataPageHandler(HeartRateBatteryStatus& msg, uintptr_t data);
Expand All @@ -29,7 +29,6 @@ void manufacturerInformationDataPageHandler(HeartRateManufacturerInformation& ms
void previousHeartBeatDataPageHandler(HeartRatePreviousHeartBeat& msg, uintptr_t data); void previousHeartBeatDataPageHandler(HeartRatePreviousHeartBeat& msg, uintptr_t data);
void productInformationDataPageHandler(HeartRateProductInformation& msg, uintptr_t data); void productInformationDataPageHandler(HeartRateProductInformation& msg, uintptr_t data);
void swimIntervalSummary(HeartRateSwimIntervalSummary& msg, uintptr_t data); void swimIntervalSummary(HeartRateSwimIntervalSummary& msg, uintptr_t data);
void modeSettings(ModeSettings& msg, uintptr_t data);


void heartRateFeatures(uint8_t bitfield); void heartRateFeatures(uint8_t bitfield);
void printStatus(uint8_t status); void printStatus(uint8_t status);
Expand All @@ -55,7 +54,6 @@ void setup() {
hr.onHeartRatePreviousHeartBeat(previousHeartBeatDataPageHandler); hr.onHeartRatePreviousHeartBeat(previousHeartBeatDataPageHandler);
hr.onHeartRateProductInformation(productInformationDataPageHandler); hr.onHeartRateProductInformation(productInformationDataPageHandler);
hr.onHeartRateSwimIntervalSummary(swimIntervalSummary); hr.onHeartRateSwimIntervalSummary(swimIntervalSummary);
hr.onModeSettings(modeSettings);
hr.begin(); hr.begin();
// wait for pair to complete // wait for pair to complete
uint8_t status = hr.waitForPair(); uint8_t status = hr.waitForPair();
Expand Down Expand Up @@ -131,22 +129,6 @@ void swimIntervalSummary(HeartRateSwimIntervalSummary& msg, uintptr_t data) {
Serial.println(msg.getSessionAverageHeartRate()); Serial.println(msg.getSessionAverageHeartRate());
} }


void modeSettings(ModeSettings& msg, uintptr_t data) {
Serial.print("Sports Mode: ");
uint8_t sportMode = msg.getSportMode();
switch (sportMode) {
case 0x01:
Serial.println("Running");
break;
case 0x02:
Serial.println("Cycling");
break;
case 0x05:
Serial.println("Swimming");
break;
}
}

void heartRateBaseDataPageHandler(AntRxDataResponse& msg, uintptr_t data) { void heartRateBaseDataPageHandler(AntRxDataResponse& msg, uintptr_t data) {
HeartRateBaseMainDataPage dp = HeartRateBaseMainDataPage(msg); HeartRateBaseMainDataPage dp = HeartRateBaseMainDataPage(msg);
Serial.println("==========================="); Serial.println("===========================");
Expand Down Expand Up @@ -195,4 +177,4 @@ void printStatus(uint8_t status) {
Serial.println("Tracking"); Serial.println("Tracking");
break; break;
} }
} }
Loading

0 comments on commit d44c8e2

Please sign in to comment.