You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
3.9 KiB
125 lines
3.9 KiB
/********************************************************************* |
|
This is an example for our nRF52 based Bluefruit LE modules |
|
|
|
Pick one up today in the adafruit shop! |
|
|
|
Adafruit invests time and resources providing this open source code, |
|
please support Adafruit and open-source hardware by purchasing |
|
products from Adafruit! |
|
|
|
MIT license, check LICENSE for more information |
|
All text above, and the splash screen below must be included in |
|
any redistribution |
|
*********************************************************************/ |
|
|
|
#include <bluefruit.h> |
|
#include "Adafruit_NeoPixel.h" |
|
|
|
#define PIXEL_COUNT 4 * 60 // The number of NeoPixels connected to the board. |
|
|
|
#define PIXEL_PIN 4 // The pin connected to the input of the NeoPixels. |
|
|
|
// Create NeoPixel strip from above parameters. |
|
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800); |
|
|
|
BLEUart bleuart; |
|
|
|
// Function prototypes for packetparser.cpp |
|
uint8_t readPacket (BLEUart *ble_uart, uint16_t timeout); |
|
float parsefloat (uint8_t *buffer); |
|
void printHex (const uint8_t * data, const uint32_t numBytes); |
|
|
|
// Packet buffer |
|
extern uint8_t packetbuffer[]; |
|
|
|
void setup(void) |
|
{ |
|
Serial.begin(115200); |
|
Serial.println(F("Adafruit Bluefruit52 Controller App Example")); |
|
Serial.println(F("-------------------------------------------")); |
|
|
|
// Initialize NeoPixels. |
|
strip.begin(); |
|
for (int i = 0; i < strip.numPixels(); i++) { |
|
strip.setPixelColor(i, 50, 50, 50); |
|
} |
|
strip.show(); |
|
|
|
Bluefruit.begin(); |
|
// Set max power. Accepted values are: -40, -30, -20, -16, -12, -8, -4, 0, 4 |
|
Bluefruit.setTxPower(4); |
|
Bluefruit.setName("Lightstrip"); |
|
|
|
// Configure and start the BLE Uart service |
|
bleuart.begin(); |
|
|
|
// Set up and start advertising |
|
startAdv(); |
|
|
|
Serial.println(F("Please use Adafruit Bluefruit LE app to connect in Controller mode")); |
|
Serial.println(F("Then activate/use the sensors, color picker, game controller, etc!")); |
|
Serial.println(); |
|
} |
|
|
|
void startAdv(void) |
|
{ |
|
// Advertising packet |
|
Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE); |
|
Bluefruit.Advertising.addTxPower(); |
|
|
|
// Include the BLE UART (AKA 'NUS') 128-bit UUID |
|
Bluefruit.Advertising.addService(bleuart); |
|
|
|
// Secondary Scan Response packet (optional) |
|
// Since there is no room for 'Name' in Advertising packet |
|
Bluefruit.ScanResponse.addName(); |
|
|
|
/* Start Advertising |
|
* - Enable auto advertising if disconnected |
|
* - Interval: fast mode = 20 ms, slow mode = 152.5 ms |
|
* - Timeout for fast mode is 30 seconds |
|
* - Start(timeout) with timeout = 0 will advertise forever (until connected) |
|
* |
|
* For recommended advertising interval |
|
* https://developer.apple.com/library/content/qa/qa1931/_index.html |
|
*/ |
|
Bluefruit.Advertising.restartOnDisconnect(true); |
|
Bluefruit.Advertising.setInterval(32, 244); // in unit of 0.625 ms |
|
Bluefruit.Advertising.setFastTimeout(30); // number of seconds in fast mode |
|
Bluefruit.Advertising.start(0); // 0 = Don't stop advertising after n seconds |
|
} |
|
|
|
/**************************************************************************/ |
|
/*! |
|
@brief Constantly poll for new command or response data |
|
*/ |
|
/**************************************************************************/ |
|
void loop(void) |
|
{ |
|
// Wait for new data to arrive |
|
uint8_t len = readPacket(&bleuart, 500); |
|
if (len == 0) return; |
|
|
|
// Got a packet! |
|
// printHex(packetbuffer, len); |
|
|
|
// Color |
|
if (packetbuffer[1] == 'C') { |
|
uint8_t red = packetbuffer[2]; |
|
uint8_t green = packetbuffer[3]; |
|
uint8_t blue = packetbuffer[4]; |
|
Serial.print ("RGB #"); |
|
if (red < 0x10) Serial.print("0"); |
|
Serial.print(red, HEX); |
|
if (green < 0x10) Serial.print("0"); |
|
Serial.print(green, HEX); |
|
if (blue < 0x10) Serial.print("0"); |
|
Serial.println(blue, HEX); |
|
|
|
for (int i = 0; i < strip.numPixels(); i++) { |
|
strip.setPixelColor(i, red, green, blue); |
|
} |
|
strip.show(); |
|
} |
|
|
|
}
|
|
|