Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*********************************************************************
- This is an example for our nRF51822 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
- *********************************************************************/
- // Buzzer Imports
- #include <Adafruit_DRV2605.h>
- #include <Wire.h>
- // UART Imports
- #include <Arduino.h>
- #include <SPI.h>
- #include "Adafruit_BLE.h"
- #include "Adafruit_BluefruitLE_SPI.h"
- #include "Adafruit_BluefruitLE_UART.h"
- #include "BluefruitConfig.h"
- #if SOFTWARE_SERIAL_AVAILABLE
- #include <SoftwareSerial.h>
- #endif
- boolean buzz = false; // Control the buzzer
- /*=========================================================================
- APPLICATION SETTINGS
- FACTORYRESET_ENABLE Perform a factory reset when running this sketch
- Enabling this will put your Bluefruit LE module
- in a 'known good' state and clear any config
- data set in previous sketches or projects, so
- running this at least once is a good idea.
- When deploying your project, however, you will
- want to disable factory reset by setting this
- value to 0. If you are making changes to your
- Bluefruit LE device via AT commands, and those
- changes aren't persisting across resets, this
- is the reason why. Factory reset will erase
- the non-volatile memory where config data is
- stored, setting it back to factory default
- values.
- Some sketches that require you to bond to a
- central device (HID mouse, keyboard, etc.)
- won't work at all with this feature enabled
- since the factory reset will clear all of the
- bonding data stored on the chip, meaning the
- central device won't be able to reconnect.
- MINIMUM_FIRMWARE_VERSION Minimum firmware version to have some new features
- MODE_LED_BEHAVIOUR LED activity, valid options are
- "DISABLE" or "MODE" or "BLEUART" or
- "HWUART" or "SPI" or "MANUAL"
- -----------------------------------------------------------------------*/
- #define FACTORYRESET_ENABLE 1
- #define MINIMUM_FIRMWARE_VERSION "0.6.6"
- #define MODE_LED_BEHAVIOUR "MODE"
- /*=========================================================================*/
- // Create the bluefruit object, either software serial...uncomment these lines
- /*
- SoftwareSerial bluefruitSS = SoftwareSerial(BLUEFRUIT_SWUART_TXD_PIN, BLUEFRUIT_SWUART_RXD_PIN);
- Adafruit_BluefruitLE_UART ble(bluefruitSS, BLUEFRUIT_UART_MODE_PIN,
- BLUEFRUIT_UART_CTS_PIN, BLUEFRUIT_UART_RTS_PIN);
- */
- /* ...or hardware serial, which does not need the RTS/CTS pins. Uncomment this line */
- // Adafruit_BluefruitLE_UART ble(Serial1, BLUEFRUIT_UART_MODE_PIN);
- /* ...hardware SPI, using SCK/MOSI/MISO hardware SPI pins and then user selected CS/IRQ/RST */
- Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_CS, BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST);
- /* ...software SPI, using SCK/MOSI/MISO user-defined SPI pins and then user selected CS/IRQ/RST */
- //Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_SCK, BLUEFRUIT_SPI_MISO,
- // BLUEFRUIT_SPI_MOSI, BLUEFRUIT_SPI_CS,
- // BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST);
- // Buzzer Variables
- Adafruit_DRV2605 drv;
- uint8_t effect = 7;
- uint32_t wait = 10; // Time between reminders, in seconds
- // A small helper
- void error(const __FlashStringHelper*err) {
- Serial.println(err);
- while (1);
- }
- /**************************************************************************/
- /*!
- @brief Sets up the HW an the BLE module (this function is called
- automatically on startup)
- */
- /**************************************************************************/
- void setup(void)
- {
- while (!Serial); // required for Flora & Micro
- delay(500);
- Serial.begin(115200);
- Serial.println(F("Adafruit Bluefruit Command Mode Example"));
- Serial.println(F("---------------------------------------"));
- /* Initialise the module */
- Serial.print(F("Initialising the Bluefruit LE module: "));
- if ( !ble.begin(VERBOSE_MODE) )
- {
- error(F("Couldn't find Bluefruit, make sure it's in CoMmanD mode & check wiring?"));
- }
- Serial.println( F("OK!") );
- if ( FACTORYRESET_ENABLE )
- {
- /* Perform a factory reset to make sure everything is in a known state */
- Serial.println(F("Performing a factory reset: "));
- if ( ! ble.factoryReset() ){
- error(F("Couldn't factory reset"));
- }
- }
- /* Disable command echo from Bluefruit */
- ble.echo(false);
- Serial.println("Requesting Bluefruit info:");
- /* Print Bluefruit information */
- ble.info();
- Serial.println(F("Please use Adafruit Bluefruit LE app to connect in UART mode"));
- Serial.println(F("Then Enter characters to send to Bluefruit"));
- Serial.println();
- ble.verbose(false); // debug info is a little annoying after this point!
- /* Wait for connection */
- while (! ble.isConnected()) {
- delay(500);
- }
- // LED Activity command is only supported from 0.6.6
- if ( ble.isVersionAtLeast(MINIMUM_FIRMWARE_VERSION) )
- {
- // Change Mode LED Activity
- Serial.println(F("******************************"));
- Serial.println(F("Change LED activity to " MODE_LED_BEHAVIOUR));
- ble.sendCommandCheckOK("AT+HWModeLED=" MODE_LED_BEHAVIOUR);
- Serial.println(F("******************************"));
- }
- drv.begin();
- drv.selectLibrary(1);
- // I2C trigger by sending 'go' command
- // default, internal trigger when sending GO command
- drv.setMode(DRV2605_MODE_INTTRIG);
- }
- /**************************************************************************/
- /*!
- @brief Constantly poll for new command or response data
- */
- /**************************************************************************/
- void loop(void)
- {
- // Check for user input
- char inputs[BUFSIZE+1];
- if ( getUserInput(inputs, BUFSIZE) )
- {
- // Send characters to Bluefruit
- Serial.print("[Send] ");
- Serial.println(inputs);
- ble.print("AT+BLEUARTTX=");
- ble.println(inputs);
- // check response stastus
- if (! ble.waitForOK() ) {
- Serial.println(F("Failed to send?"));
- }
- }
- // Check for incoming characters from Bluefruit
- ble.println("AT+BLEUARTRX");
- ble.readline();
- if (strcmp(ble.buffer, "OK") == 0) {
- // no data
- // Signal to the buzzer to start or stop
- if (buzz == true) {
- drv.go();
- } else {
- drv.stop();
- }
- return;
- }
- // Some data was found, its in the buffer
- Serial.print(F("[Recv] ")); Serial.println(ble.buffer);
- ble.waitForOK();
- // set the effect to play
- drv.setWaveform(0, effect); // play effect
- drv.setWaveform(1, 0); // end waveform
- String data = ble.buffer;
- if (data == "1") {
- buzz = true;
- } else {
- buzz = false;
- }
- // delay(wait * 60 * 1000);
- delay(wait);
- }
- /**************************************************************************/
- /*!
- @brief Checks for user input (via the Serial Monitor)
- */
- /**************************************************************************/
- bool getUserInput(char buffer[], uint8_t maxSize)
- {
- // timeout in 100 milliseconds
- TimeoutTimer timeout(100);
- memset(buffer, 0, maxSize);
- while( (!Serial.available()) && !timeout.expired() ) { delay(1); }
- if ( timeout.expired() ) return false;
- delay(2);
- uint8_t count=0;
- do
- {
- count += Serial.readBytes(buffer+count, maxSize);
- delay(2);
- } while( (count < maxSize) && (Serial.available()) );
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement