Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BLE_API LIS3DH mbed nRF51822
Fork of BLE_Sensor by
Revision 12:ca9be012700a, committed 2018-06-09
- Comitter:
- electronichamsters
- Date:
- Sat Jun 09 09:12:50 2018 +0000
- Parent:
- 11:4f925834167d
- Child:
- 13:3eaae3de806e
- Commit message:
- debugging I2C
Changed in this revision
--- a/BLE_API.lib Sat Jul 29 22:01:45 2017 +0000 +++ b/BLE_API.lib Sat Jun 09 09:12:50 2018 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/teams/Bluetooth-Low-Energy/code/BLE_API/#bfc5b9b6ecf5 +http://mbed.org/teams/Bluetooth-Low-Energy/code/BLE_API/#65474dc93927
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LIS3DH.lib Sat Jun 09 09:12:50 2018 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/kenjiArai/code/LIS3DH/#c32d2b25d4c2
--- a/main.cpp Sat Jul 29 22:01:45 2017 +0000
+++ b/main.cpp Sat Jun 09 09:12:50 2018 +0000
@@ -1,746 +1,119 @@
-/*
-Eric Tsai
-
-7/29/2017: added clock algorithm to corresond with gateway spoof checking
-
- */
-
-//required to call the ecb functions
-extern "C"
-{
- #include "nrf_ecb.h"
-}
-
-#include "mbed.h"
-#include "toolchain.h"
-#include "ble/BLE.h"
-#include "TMP_nrf51/TMP_nrf51.h"
-
-//comment out when done with debug uart, else eats batteries
-#define MyDebugEnb 0
-
-//Pin "P0.4" on nRF51822 = mbed "p4".
-//InterruptIn is pulled-up. GND the pin to activate.
-
-// waveshare board ******
-//InterruptIn button1(p10);
-//InterruptIn button2(p11);
-
-// purple board ******
-//InterruptIn button1(p23);
-//InterruptIn button2(p24);
-
-// universal
-InterruptIn button1(p0);
-InterruptIn button2(p1);
-
-
-
-//Serial device(p9, p11); // tx, rx, purple board and Rigado
-#if MyDebugEnb
-// if you see ~1mA consumption during sleep, that's because uart is enabled.
-Serial device(p9, p11); //nRF51822 uart : TX=p9. RX=p11
-#endif
+//consumes 16uA at ble_wait_for_event()
-static Timer myTimer; //timed advertising
-static Ticker tic_adv; //stop adv
-static Ticker tic_debounce; //debounce I/O
-static Ticker tic_periodic; //regular updates
-static Ticker tic_clock_reset; //resets clock
-const uint16_t Periodicity = 180; //clock periodicity used for spoof checking, should be 1800 seconds for 30minutes
-//static TMP_nrf51 tempSensor;
-static bool flag_update_io = false;
-static bool flag_periodic_call = false;
-static bool flag_detach_adv_tic = false;
-static bool flag_set_debounce_tic = false; //not used
-
-//static DigitalOut alivenessLED(LED1, 1);
-float mySensor = 2.0f;
-
-
-/* Optional: Device Name, add for human read-ability */
-const static char DEVICE_NAME[] = "CUU";
-
-/* You have up to 26 bytes of advertising data to use. */
-/*
-Advertisement
+#include "mbed.h"
+#include "LIS3DH.h" //https://developer.mbed.org/users/kenjiArai/code/LIS3DH/
+#include "ble/BLE.h"
-*/
-//full with nullls
-static uint8_t AdvData[] = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; /* Example of hex data */
-char buffer[10]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; //battery analog reading
-char bat_volt_char[6] = {0, 0, 0, 0, 0, 0};
-uint8_t Adv_First_Section[10];
-uint8_t mac_reverse[6] = {0x0,0x0,0x0,0x0,0x0,0x0};
-uint8_t magnet_near=0;
-
-
-
-static uint8_t key[16] = {0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4};
-//26 bytes adv data
-static uint8_t encrypted[26] = {0x0,0x0,0x0,0x1,0x1,0x1,0x2,0x2,0x2,0x3,0x3,0x3,0x4,0x4,0x4,0x5,0x5,0x5,0x6,0x6,0x6,0x7,0x7,0x7,0x8,0x8}; /* Example of hex data */
-//static uint8_t key_buf[16] = {0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4};
-static uint8_t key_buf[16] = {0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x1, 0x2};
-static uint8_t src_buf[16] = {0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4};
-static uint8_t des_buf[16] = {0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4,0x1,0x2,0x3,0x4};
-
-uint8_t Xmit_Cnt = 1;
-//const static uint8_t AdvData[] = {"ChangeThisData"}; /* Example of character data */
-
+#define MyDebugEnb 1
+#define sensorEnb 1 //get readings
-/* **** NOT USED **** */
-//16byte UUID loading happens here
-//Look at <GapAdvertisingData.h> for rest of definition
-struct ApplicationData_t {
- //Byte 0: AppID High Byte
- //Byte 1: AppID Low Byte
- //Byte 2: sensor High Word
- //Byte 3:
- //Byte 4:
- //Byte 5: sensor Low Byte
-
-
- //app ID is 16 bit, (0xFEFE)
- uint16_t applicationSpecificId; /* An ID used to identify temperature value in the manufacture specific AD data field */
-
- //float = 32-bit.
- //tsai: change this to uint32_t!!!
- TMP_nrf51::TempSensorValue_t tmpSensorValue; /* this is a float (32-bit), user data */
-} PACKED;
+#if MyDebugEnb
+Serial pc(p9, p11); //Tx, Rx
+#endif
+
+//LIS3DH(PinName p_sda, PinName p_scl, uint8_t addr);
-
+//I2C i2c(p6,p7);
+//LIS3DH data(i2c, 0x19);
+#if sensorEnb
+//LIS3DH data(p6, p7, (0x19 << 1)); //for purple board, sda=p6, scl=p7
+LIS3DH data(p6, p7, LIS3DH_V_CHIP_ADDR);
-void debounce_Callback(void)
-{
- tic_debounce.detach();
- flag_set_debounce_tic = false; //not used
- flag_update_io = true; //start advertising
- /* Note that the buttonPressedCallback() executes in interrupt context, so it is safer to access
- * BLE device API from the main thread. */
- //buttonState = PRESSED;
-}
+//0001 1001 ---> 0011 0010
+#endif
+float dt_usr[3];
+float x,y,z;
+InterruptIn button1(p1); //nRF51822 P0.1
+InterruptIn button2(p16); //nRF51822 P0.1
+//InterruptIn button1(p0);
+bool flag_read_acc;
-//----- button rising ---
-void buttonPressedCallback(void)
-{
+uint8_t reset_addr = 0x31; //LIS3DH_INT1_SOURCE
- //flag_update_io = true;
-
- tic_debounce.attach(debounce_Callback, 1); //ok to attach multiple times, first one wins
-
+//ISR for I/O interrupt
+void button1_int(void)
+{
+ //#if MyDebugEnb
- //buttonState = PRESSED;
+ //NRF_SPI0->ENABLE = 1;
+ //wait_ms(50);
+ flag_read_acc=1;
+ #if MyDebugEnb
+ pc.printf("...interrupt released... \n\r");
+ #endif
+ uint8_t retruneddata = data.read_reg(reset_addr);
+ pc.printf("%x", retruneddata);
+ pc.printf(" returned \n\r");
- /*
- if (flag_set_debounce_tic == false)
- {
- flag_set_debounce_tic = true;
-
- }
- */
}
+//ISR for I/O interrupt
+void button2_int(void)
+{
+ //#if MyDebugEnb
-//----- button falling ---
-void buttonReleasedCallback(void)
-{
-
-
- //flag_update_io = true;
-
- tic_debounce.attach(debounce_Callback, 1);
+ //NRF_SPI0->ENABLE = 1;
+ //wait_ms(50);
+ flag_read_acc=1;
+ #if MyDebugEnb
+ pc.printf("...interrupt from 2... \n\r");
+ #endif
-
-}
-
-
-void stop_adv_Callback(void)
-{
- //stops advertising after X seconds
- /* Note that the Callback() executes in interrupt context, so it is safer to do
- * heavy-weight sensor polling from the main thread (where we should be able to block safely, if needed). */
-
- //tic_adv.detach();
-
- flag_detach_adv_tic = true;
- //ble.gap().stopAdvertising();
+ uint8_t retruneddata = data.read_reg(reset_addr);
+ pc.printf("%x", retruneddata);
+ pc.printf(" returned \n\r");
-
-}
-
-
-
-
-
-void periodic_Callback(void)
-{
- flag_update_io = true;
- flag_periodic_call = true;
-}
-
-void clock_reset_Callback(void)
-{
-#if MyDebugEnb
- device.printf("===== reset timer =====");
- device.printf("\r\n");
-#endif
- myTimer.reset();
-};
-
-void setupApplicationData(ApplicationData_t &appData)
-{
- // two byte ID: 0xFEFE
- static const uint16_t APP_SPECIFIC_ID_TEST = 0xFEFE; //2 byte application ID
-
- appData.applicationSpecificId = APP_SPECIFIC_ID_TEST;
- //appData.tmpSensorValue = tempSensor.get();
- appData.tmpSensorValue = mySensor;
}
-/**
- * This function is called when the ble initialization process has failled
- */
-void onBleInitError(BLE &ble, ble_error_t error)
-{
- /* Initialization error handling should go here */
-}
-
-/**
- * Callback triggered when the ble initialization process has finished
- */
-void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
-{
- BLE& ble = params->ble;
- ble_error_t error = params->error;
-
- if (error != BLE_ERROR_NONE) {
- /* In case of error, forward the error handling to onBleInitError */
- onBleInitError(ble, error);
- return;
- }
-
- /* Ensure that it is the default instance of BLE */
- if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
- return;
- }
-
- /* Set device name characteristic data */
- ble.gap().setDeviceName((const uint8_t *) DEVICE_NAME);
-
- /* Setup advertising payload */
- //set modes "no EDR", "discoverable" for beacon type advertisements
- ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
-
-
-
- //from GAP example
- /* Sacrifice 2B of 31B to AdvType overhead, rest goes to AdvData array you define */
- ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, AdvData, sizeof(AdvData));
-
- /* Setup advertising parameters: not connectable */
- ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED);
- ble.gap().setAdvertisingInterval(300); //one advertisment every 300ms. Self tickers, so you don't have to worry.
-
-
-
- //don't start advertising on init. Only advertise on pin interrupt.
- //ble.gap().startAdvertising();
-}
-
-//not needed anymore
-//https://developer.mbed.org/users/MarceloSalazar/notebook/measuring-battery-voltage-with-nordic-nrf51x/
-void my_analogin_init(void)
-{
-
- NRF_ADC->CONFIG = (ADC_CONFIG_RES_10bit << ADC_CONFIG_RES_Pos) |
- (ADC_CONFIG_INPSEL_SupplyOneThirdPrescaling << ADC_CONFIG_INPSEL_Pos) |
- //(ADC_CONFIG_INPSEL_AnalogInputOneThirdPrescaling << ADC_CONFIG_INPSEL_Pos) |
- (ADC_CONFIG_REFSEL_VBG << ADC_CONFIG_REFSEL_Pos) |
- (ADC_CONFIG_PSEL_Disabled << ADC_CONFIG_PSEL_Pos) |
- //(ADC_CONFIG_PSEL_AnalogInput4 << ADC_CONFIG_PSEL_Pos) |
- (ADC_CONFIG_EXTREFSEL_None << ADC_CONFIG_EXTREFSEL_Pos);
- NRF_ADC->ENABLE = ADC_ENABLE_ENABLE_Enabled;
-}
-
-uint16_t my_analogin_read_u16(void)
+int main ()
{
- //10 bit resolution, route Vdd as analog input, set ADC ref to VBG band gap
- //disable analog pin select "PSEL" because we're using Vdd as analog input
- //no external voltage reference
- NRF_ADC->CONFIG = (ADC_CONFIG_RES_10bit << ADC_CONFIG_RES_Pos) |
- (ADC_CONFIG_INPSEL_SupplyOneThirdPrescaling << ADC_CONFIG_INPSEL_Pos) |
- //(ADC_CONFIG_INPSEL_AnalogInputOneThirdPrescaling << ADC_CONFIG_INPSEL_Pos) |
- (ADC_CONFIG_REFSEL_VBG << ADC_CONFIG_REFSEL_Pos) |
- (ADC_CONFIG_PSEL_Disabled << ADC_CONFIG_PSEL_Pos) |
- //(ADC_CONFIG_PSEL_AnalogInput4 << ADC_CONFIG_PSEL_Pos) |
- (ADC_CONFIG_EXTREFSEL_None << ADC_CONFIG_EXTREFSEL_Pos);
-
- //NRF_ADC->CONFIG &= ~ADC_CONFIG_PSEL_Msk;
- //NRF_ADC->CONFIG |= ADC_CONFIG_PSEL_Disabled << ADC_CONFIG_PSEL_Pos;
- NRF_ADC->ENABLE = ADC_ENABLE_ENABLE_Enabled;
- NRF_ADC->TASKS_START = 1;
-
-
- //while loop doesn't actually loop until reading comlete, use a wait.
- while (((NRF_ADC->BUSY & ADC_BUSY_BUSY_Msk) >> ADC_BUSY_BUSY_Pos) == ADC_BUSY_BUSY_Busy) {};
- wait_ms(2);
-
- //save off RESULT before disabling.
- //uint16_t myresult = (uint16_t)NRF_ADC->RESULT;
-
- //disable ADC to lower bat consumption
- NRF_ADC->TASKS_STOP = 1;
- //NRF_ADC->ENABLE = ADC_ENABLE_ENABLE_Disabled; //disable to shutdown ADC & lower bat consumption
-
- return (uint16_t)NRF_ADC->RESULT; // 10 bit
- //return myresult;
-}
-
-uint16_t my_analog_pin_read(void)
-{
-
- //10 bit resolution, route PSEL pin as 1/3 input sel,
- //set ADC ref to VBG band gap
- //set AnalogInput4 as input pin (this is P0.03)
- //no external voltage reference
- NRF_ADC->CONFIG = (ADC_CONFIG_RES_10bit << ADC_CONFIG_RES_Pos) |
- //(ADC_CONFIG_INPSEL_SupplyOneThirdPrescaling << ADC_CONFIG_INPSEL_Pos) |
- (ADC_CONFIG_INPSEL_AnalogInputOneThirdPrescaling << ADC_CONFIG_INPSEL_Pos) |
- (ADC_CONFIG_REFSEL_VBG << ADC_CONFIG_REFSEL_Pos) |
- //ADC_CONFIG_PSEL_Disabled << ADC_CONFIG_PSEL_Pos) |
- (ADC_CONFIG_PSEL_AnalogInput4 << ADC_CONFIG_PSEL_Pos) |
- (ADC_CONFIG_EXTREFSEL_None << ADC_CONFIG_EXTREFSEL_Pos);
- //set pin select to AnalogInput4 = pin 7 = p0.03 = AIN4
- //NRF_ADC->CONFIG &= ~ADC_CONFIG_PSEL_Msk;
- //NRF_ADC->CONFIG |= ADC_CONFIG_PSEL_AnalogInput4 << ADC_CONFIG_PSEL_Pos;
- NRF_ADC->ENABLE = ADC_ENABLE_ENABLE_Enabled;
- NRF_ADC->TASKS_START = 1;
-
-
- //while loop doesn't actually loop until reading comlete, use a wait.
- while (((NRF_ADC->BUSY & ADC_BUSY_BUSY_Msk) >> ADC_BUSY_BUSY_Pos) == ADC_BUSY_BUSY_Busy) {};
- wait_ms(2);
-
- //save off RESULT before disabling.
- //uint16_t myresult = (uint16_t)NRF_ADC->RESULT;
-
- //disable ADC to lower bat consumption
- //NRF_ADC->TASKS_STOP = 1;
- //NRF_ADC->ENABLE = ADC_ENABLE_ENABLE_Disabled; //disable to shutdown ADC & lower bat consumption
-
- return (uint16_t)NRF_ADC->RESULT; // 10 bit
- //return myresult;
-}
-
-
-//hash_first_section(Adv_First_Section, mac_reverse, bat_reading);
-void hash_first_section(uint8_t * dest, const uint8_t * mac_addr, const char * bat_volt_str)
-{
- dest[0] = mac_addr[3];
- dest[1] = mac_addr[2];
- dest[2] = mac_addr[1];
- dest[3] = mac_addr[0];
- dest[4] = bat_volt_str[0];
- dest[5] = bat_volt_str[1];
- dest[6] = bat_volt_str[2];
- dest[7] = bat_volt_str[3];
- dest[8] = 0x10;
- dest[9] = 0x11;
#if MyDebugEnb
-
- device.printf("hash array: ");
- for (int i=0; i<10; i++)
- {
- device.printf("%x ", dest[i]);
- }
- device.printf("\r\n");
+pc.baud(9600);
+printf("...started... \n\r");
#endif
-}
-
-
-uint16_t clock_remainder = 0;
-
-int main(void)
-{
-
-#if MyDebugEnb
- device.baud(9600);
- device.printf("started sensor node 36 ");
- device.printf("\r\n");
-#endif
-
-
-
- //Timer myTimer; //moved to global
- myTimer.start();
-
-
- button1.fall(buttonPressedCallback);
- button1.rise(buttonReleasedCallback);
- button1.mode(PullNone);
- button1.fall(NULL);
- button1.rise(NULL);
BLE &ble = BLE::Instance();
- ble.init(bleInitComplete);
-
- //debug uart
- //device.baud(115200);
- float bat_reading; //hold battery voltage reading (Vbg/Vcc)
+ ble.init(); // normally you'd want to pass a callback for when init complete
- my_analogin_init();//routes band-gap to analog input
-
- /* SpinWait for initialization to complete. This is necessary because the
- * BLE object is used in the main loop below. */
- while (ble.hasInitialized() == false) { /* spin loop */ }
-
- //every X seconds, sends period update, up to 1800 (30 minutes)
- tic_periodic.attach(periodic_Callback, 1600);
- tic_clock_reset.attach(clock_reset_Callback, Periodicity);
+ uint8_t setsuccess = data.setAct(LIS3DH_V_CHIP_ADDR);
+ #if MyDebugEnb
+ pc.printf("%x", setsuccess);
+ pc.printf(" set ACT status \n\r");
+ #endif
+ button1.mode(PullDown);
+ button1.rise(button1_int);
+ button2.mode(PullDown);
+ button2.rise(button2_int);
+
+ uint8_t retruneddata = data.read_reg(reset_addr);
+ pc.printf("%x", retruneddata);
+ pc.printf(" returned \n\r");
+while (1) {
+ //x=data.read_data(*dt_usr[0]);
+ //y=data.read_data(*dt_usr[1]);
+ //z=data.read_data(*dt_usr[2]);
- //how to generate random number using die tempearature
- uint32_t myTempRand;
- uint32_t * p_temp;
- //get temperature for random number
- //SVCALL(SD_TEMP_GET, myTempRand, sd_temp_get(p_temp));
- //sd_temp_get(& myTempRand);
-
-
- ble.getAddress(0,mac_reverse); //NOTE: last byte of MAC (as shown on phone app) is at mac[0], not mac[6];
-#if MyDebugEnb
- device.printf("mac = ");
- for (int i=0; i<6; i++) //prints out MAC address in reverse order; opps.
- {
- device.printf("%x:", mac_reverse[i]);
- }
- device.printf("\r\n");
-#endif
- while (true) {
- //seconds counts to 35 minutes: mySeconds=2142, then 63392 which should be 2450 but isn't.
- //00001000,01011110 -> 11110111,10100000
- uint16_t mySeconds =(uint16_t)(myTimer.read_ms()/1000); //problem: mySeconds is only 2 byte
- //xmit_cnt++;
- //if (mySeconds > 1800)
- //{
- // myTimer.reset();
- //clock_remainder = mySeconds - 1800;
- //}
- //mySeconds = mySeconds + clock_remainder; l3kjl3
-
- //reading the ADV value, only goes up to 0-255;
- //reading the uart: current time in seconds: -1782, goes negative.
- //need to be able to count 1800 seconds since that's the length of timer.
-
-#if MyDebugEnb
- device.printf("current time in seconds: %d \r\n", mySeconds);
-#endif
- //**** set which pin should be interrupt, set pullups ***
-
- //set both pins to pull-up, so they're not floating when we read state
- button1.mode(PullUp);
- button2.mode(PullUp);
-
- //wait_ms(300); //contact settle
-
-
- //AdvData[12] is automatically CR? why?
-
- //0x33 0x2E 0x33 0x32 0x13
- // 3 . 3 2 CR
-
- //expect either button1 or button2 is grounded, b/c using SPDT reed switch
- //the "common" pin on the reed switch should be on GND
- uint8_t button1_state = button1.read();
- uint8_t button2_state = button2.read();
-
-
- //let's just update the pins on every wake. Insurance against const drain.
- //if state == 0, pin is grounded. Unset interrupt and float pin
- //set the other input
- if ( (button1_state == 0) && (button2_state == 1) )
- {
- magnet_near = 1;
- //AdvData[4] = 0x11; //dont' set ADV data directly. Using json now, need spacing
- //button1.disable_irq() //don't know if disables IRQ on port or pin
- button1.fall(NULL); //disable interrupt
- button1.rise(NULL); //disable interrupt
- button1.mode(PullNone); //float pin to save battery
-
- //button2.disable_irq() //don't know if disables IRQ on port or pin
- button2.fall(buttonReleasedCallback); //enable interrupt
- button2.rise(buttonReleasedCallback); //enable interrupt
- button2.mode(PullUp); //pull up on pin to get interrupt
-#if MyDebugEnb
- device.printf("=== button 1! %d seconds=== \r\n", mySeconds);
-#endif
- }
- else if ( (button1_state == 1) && (button2_state == 0) ) //assume other pin is open circuit
- {
- magnet_near = 0;
- //AdvData[4] = 0x22; //dont' set ADV data directly. Using json now, need spacing
- //button1.disable_irq() //don't know if disables IRQ on port or pin
- button1.fall(buttonReleasedCallback); //enable interrupt
- button1.rise(buttonReleasedCallback); //enable interrupt
- button1.mode(PullUp); //pull up on pin to get interrupt
-
- //button2.disable_irq() //don't know if disables IRQ on port or pin
- button2.fall(NULL); //disable interrupt
- button2.rise(NULL); //disable interrupt
- button2.mode(PullNone); //float pin to save battery
-#if MyDebugEnb
- device.printf("=== button 2! === %d seconds\r\n", mySeconds);
-#endif
- }
- else //odd state, shouldn't happen, suck battery and pullup both pins
- {
- magnet_near = 2;
- //AdvData[4] = 0x33;
- //button1.disable_irq() //don't know if disables IRQ on port or pin
- button1.fall(buttonReleasedCallback); //disable interrupt
- button1.rise(buttonReleasedCallback); //disable interrupt
- button1.mode(PullUp); //float pin to save battery
-
- //button2.disable_irq() //don't know if disables IRQ on port or pin
- button2.fall(buttonReleasedCallback); //disable interrupt
- button2.rise(buttonReleasedCallback); //disable interrupt
- button2.mode(PullUp); //float pin to save battery
-#if MyDebugEnb
- device.printf("no buttons!! %d seconds\r\n", mySeconds);
-#endif
- }
-
-
- if (flag_update_io) {
- /* Do blocking calls or whatever hardware-specific action is
- * necessary to poll the sensor. */
-
- Xmit_Cnt++; //increment transmit counter when updating I/O
-
-
- //read battery voltage
- //analog reading consumes 940uA if not disabled
-
-
- bat_reading = (float)my_analogin_read_u16();
-
- bat_reading = (bat_reading * 3.6) / 1024.0;
-#if MyDebugEnb
- device.printf("bat reading: %f \r\n", bat_reading);
-#endif
-
- //memset(&buffer[0], 0, sizeof(buffer)); //clear out buffer
- //sprintf (buffer, "%f.2", bat_reading); //don't know what i'm doing
- //sprintf (buffer, "%.2f", bat_reading);
- //AdvData[8] = buffer[0]; //"3"=0x33
- //AdvData[9] = buffer[1]; //"."=0x2E
- //AdvData[10] = buffer[2];//"3"=0x33
- //AdvData[11] = buffer[3];//"2"=0x32
-
- //try this
- //https://developer.mbed.org/users/mbed_official/code/mbed-src/file/cb4253f91ada/targets/hal/TARGET_NORDIC/TARGET_NRF51822/analogin_api.c
- NRF_ADC->TASKS_STOP = 1;
- float analogreading;
- analogreading = (float)my_analog_pin_read();
- analogreading = (analogreading * 3.6) / 1024.0;
- #if MyDebugEnb
- device.printf("separate analog reading: %.02f \r\n", analogreading);
- #endif
-
- //disable ADC
- NRF_ADC->TASKS_STOP = 1;
- NRF_ADC->ENABLE = ADC_ENABLE_ENABLE_Disabled; //disable to shutdown ADC & lower bat consumption
-
-
-
- //***********************************
- //form JSON string in ADV_DATA
- //1) volts starts at AdvData[8]
-
-
-
- //write battery voltage
- uint8_t total_chars;
- memset(&bat_volt_char[0], 0, sizeof(bat_volt_char)); //clear out buffer
- total_chars = sprintf (bat_volt_char, "%.2f", bat_reading); //returns total number of characters
-
-#if MyDebugEnb
- device.printf("char buff: %c%c%c%c \r\n", bat_volt_char[0], bat_volt_char[1], bat_volt_char[2], bat_volt_char[3]);
- device.printf("num chars: %d \r\n", total_chars);
-#endif
-
-
-
- //memset(&Adv_First_Section[0], 0, sizeof(Adv_First_Section)); //not needed to reset
- hash_first_section(Adv_First_Section, mac_reverse, bat_volt_char);
-
-
-
- //------------------------------------------------------------------
- //start writing out ADVData array
- //------------------------------------------------------------------
-
- memset(&AdvData[0], 0, sizeof(AdvData));
- uint8_t JSON_loc=0; //AdvData[0]
-
- AdvData[0] = Adv_First_Section[0]; //AdvData[0] = manf ID 01
- JSON_loc++; //1
- AdvData[1] = Adv_First_Section[1]; //AdvData[1] = manf ID 02
- JSON_loc++; //2
- AdvData[2] = Adv_First_Section[2]; //AdvData[2] = reserved
- JSON_loc++; //3...
- AdvData[3] = Adv_First_Section[3]; //AdvData[3] = reserved
- JSON_loc++;
- AdvData[4] = Adv_First_Section[4]; //AdvData[4] = voltage 01
- JSON_loc++;
- AdvData[5] = Adv_First_Section[5]; //AdvData[5] = voltage 02
- JSON_loc++;
- AdvData[6] = Adv_First_Section[6]; //AdvData[6] = voltage 03
- JSON_loc++;
- AdvData[7] = Adv_First_Section[7]; //AdvData[7] = voltage 04
- JSON_loc++;
- AdvData[8] = Adv_First_Section[8]; //AdvData[8] = reserved
- JSON_loc++;
- AdvData[9] = Adv_First_Section[9]; //AdvData[9] = reserved
- JSON_loc++;
-
-#if MyDebugEnb
+ #if sensorEnb
+ data.read_data(dt_usr);
+ #endif
+ x=dt_usr[0];
+ y=dt_usr[1];
+ z=dt_usr[2];
+ //y=dt_usr[1];
+ //z=dt_usr[2];
+ //printf(" %f \n\r", x);
+ //printf(" %f \n\r", y);
+ //printf(" %f \n\r", z);
+ #if MyDebugEnb
+ printf("x=%5.2f y=%5.2f z=%5.2f \n\r", x, y ,z);
+ #endif
+ wait_ms(250);
+ ble.waitForEvent();
- device.printf("ADV first 10 array: ");
- for (int i=0; i<10; i++)
- {
- device.printf("%x ", AdvData[i]);
- }
- device.printf("\r\n");
-#endif
-
-
- JSON_loc = 10;
- //start of encrypted data
- //AdvData[10]
- AdvData[10] = mySeconds & 0xFF; //reserved for timer
- JSON_loc++;
- AdvData[11] = (mySeconds >> 8) & 0xFF; //reserved for timer
- JSON_loc++;
- AdvData[12] = Xmit_Cnt;
- JSON_loc++;
- //start of jason data
- JSON_loc = 13;
- AdvData[JSON_loc] = 0x22; //" start mag pos=13
- JSON_loc++; //14
-
- AdvData[JSON_loc] = 0x6d; //m, pos=14
- JSON_loc++; //15
-
- AdvData[JSON_loc] = 0x61; //a, pos=15
- JSON_loc++; //16
-
- AdvData[JSON_loc] = 0x67; //g, pos=16
- JSON_loc++; //17
-
- if (flag_periodic_call)
- {
- //AdvData[JSON_loc] = 0x2f; // "/"
- //JSON_loc++;
- AdvData[JSON_loc] = 0x2f; // "/" pos=17
- JSON_loc++;//pos=18
- AdvData[JSON_loc] = 0x70; // "p" poes=18
- JSON_loc++;//pos=19
- }//end if period call
-
- AdvData[JSON_loc] = 0x22; //" pos = 17 or 19
- JSON_loc++; //20
-
- AdvData[JSON_loc] = 0x3a; //: pos = 18 or 20
- JSON_loc++; //22
-
- //prep magnet location (1 or 0) for char[]
- memset(&buffer[0], 0, sizeof(buffer)); //clear out buffer
- //magnet_near is an integer
- total_chars = sprintf (buffer, "%d", magnet_near); //returns total number of characters, which is 1 character.
- for (int i=0; i < total_chars; i++)
- {
- AdvData[JSON_loc] = buffer[i];
- JSON_loc++; //23
- } //JSON_loc left at location of next character
-
- //MUST null terminate for JSON to read correctly, else get intermittent JSON parse errors at gateway
- //happens when string is shorter than last string, get trash left overs
- //not really needed after clearning AdvData at start.
-
-
- //AdvData[JSON_loc] = 0x0; //null terminate here
-
- ApplicationData_t appData;
- setupApplicationData(appData);
-
-
- for (int i=0; i<16; i++)
- {
- src_buf[i] = AdvData[i+10]; //start of encrypted section is at AdvData[10]
- }
-
- //nrf_ecb_set_key(key_buf);
- nrf_ecb_init();
- nrf_ecb_set_key(key_buf);
- bool successful_ecb = nrf_ecb_crypt(des_buf, src_buf);
-#if MyDebugEnb
- device.printf("success ecb = %d \r\n", successful_ecb);
- device.printf("src_buf: %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x \r\n", src_buf[0], src_buf[1], src_buf[2], src_buf[3], src_buf[4], src_buf[5], src_buf[6], src_buf[7], src_buf[8], src_buf[9], src_buf[10], src_buf[11], src_buf[12], src_buf[13], src_buf[14], src_buf[15]);
- device.printf("des_buf: %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x \r\n", des_buf[0], des_buf[1], des_buf[2], des_buf[3], des_buf[4], des_buf[5], des_buf[6], des_buf[7], des_buf[8], des_buf[9], des_buf[10], des_buf[11], des_buf[12], des_buf[13], des_buf[14], des_buf[15]);
-#endif
- for (int i=0; i<16; i++)
- {
- AdvData[i+10] = des_buf[i];
- }
-
- //ble.gap().updateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, (uint8_t *) &appData, sizeof(ApplicationData_t));
- ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, AdvData, sizeof(AdvData));
-
- flag_update_io = false;
- flag_periodic_call = false;
-
- //GAP::AddressType_t *myType;
- //GAP::Address_t myAddress
- //ble_error_t getAddress(Gap::AddressType_t *typeP, Gap::Address_t address)
- //ble.gap().getAddress(myType, myAddress);
- //ble.gap().getAddress(Gap::AddressType_t *typeP, Gap::Address_t address);
-
-
-
- ble.gap().startAdvertising();
- tic_adv.attach(stop_adv_Callback, 2); /* trigger turn off advertisement after X seconds */
-
-
- }//end flag_update_io
-
-
- /*
- if (flag_set_debounce_tic == true)
- {
- tic_debounce.attach();
- //flag_set_debounce_tic = false;
-
- }
- */
-
- //if (trigger_Detach_ADV_Tick == false)
- //{
- //}
- if (flag_detach_adv_tic == true) //Stop Advertising
- {
- ble.gap().stopAdvertising(); //may be safer to execute BLE operations in main
- tic_adv.detach();
- flag_detach_adv_tic = false;
- }
- //device.printf("Input Voltage: %f\n\r",bat_reading);
-
- ble.waitForEvent(); //sleeps until interrupt
-
-
- }//end forever while
-}//end main
+ }//end while
+}
\ No newline at end of file
--- a/mbed.bld Sat Jul 29 22:01:45 2017 +0000 +++ b/mbed.bld Sat Jun 09 09:12:50 2018 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/4336505e4b1c \ No newline at end of file +https://mbed.org/users/mbed_official/code/mbed/builds/fd96258d940d \ No newline at end of file
--- a/nRF51822.lib Sat Jul 29 22:01:45 2017 +0000 +++ b/nRF51822.lib Sat Jun 09 09:12:50 2018 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/teams/Nordic-Semiconductor/code/nRF51822/#3cc0718d98d0 +http://mbed.org/teams/Nordic-Semiconductor/code/nRF51822/#c90ae1400bf2
