Using the MBED BLE library and Nordic Puck library this is a simple scoring application using Bluetooth LE. It monitors three analog inputs and triggers on reception of a pulse on any one recording data for a short period on all three. This is then published via BLE characteristics. It's a demonstrator for a new UI dev toolkit that is under development.
Fork of Example_Puck_BLE by
main.cpp
- Committer:
- Bobty
- Date:
- 2014-08-20
- Revision:
- 1:1a59b4810261
- Parent:
- 0:8d7583961274
- Child:
- 2:e400fd4f501b
File content as of revision 1:1a59b4810261:
/** Scoring Device - for generic game scoring Using Puck BLE MBED library from Nordic Copyright (C) Nodule.io 2014 */ #define LOG_LEVEL_INFO #include "Puck.h" Puck* puck = &Puck::getPuck(); // Gatt characteristic and service UUIDs const UUID SCORING_GATT_SERVICE = stringToUUID("nodule.scoring "); const UUID SAMPLES_GATT_CHARACTERISTIC = stringToUUID("nodule.samples "); const int SAMPLES_LEN = 20; uint8_t SAMPLES_BUF[SAMPLES_LEN]; const int SAMPLE_THRESHOLD = 800; // Setup ADC AnalogIn ain(P0_1); // Timer to avoid repeat sampling Timer antiRepeatTimer; int lastSampleTime = 0; const int MIN_MS_BETWEEN_SAMPLES = 2000; int main(void) { // Set baud rate logger.baud(115200); // Add the Gatt characteristic for samples puck->addCharacteristic( SCORING_GATT_SERVICE, SAMPLES_GATT_CHARACTERISTIC, SAMPLES_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY); // Initialize the puck puck->init(0xCD01); // Start timer antiRepeatTimer.start(); // Wait for something to be found while(puck->drive()) { int curTimerVal = antiRepeatTimer.read_ms(); if ((lastSampleTime < curTimerVal) || (curTimerVal - lastSampleTime > MIN_MS_BETWEEN_SAMPLES)) { // Check threshold unsigned short val = ain.read_u16(); if(val > SAMPLE_THRESHOLD) { for (int i = 0; i < SAMPLES_LEN; i++) { SAMPLES_BUF[i] = ain.read_u16() - 760; wait_ms(10); } // Set the value of the characteristic puck->updateCharacteristicValue(SAMPLES_GATT_CHARACTERISTIC, SAMPLES_BUF, SAMPLES_LEN); // Display readings for (int j = 0; j < SAMPLES_LEN; j++) { LOG_INFO("%d ", SAMPLES_BUF[j]); } LOG_INFO("\n"); // Set timer to disallow repeated readings lastSampleTime = curTimerVal; } } } }