This is a modified "BLE_Default_App". It doesn't use retargetStdout() which allows it to work with online Libs available on 20150123 (nRF51822, BLE_API)

Dependencies:   BLE_API mbed nRF51822

App for FOTA testing:

  • IO:
    • Blinks a LED on platform to show App alive
    • LEDs also follow buttons to show immediate response.
    • BLE UART has ping message, and also echos back any received bytes (Use with Android App: nRF UART 2.0).
  • It compiles and runs as FOTA and non-FOTA platform which may assist debugging
    • platform "Nordic nRF51822 FOTA" for FOTA Loading
    • platform "Nordic nRF51822" for mbed drive loading
  • Supports mbed and non-mbed PCBs (all compiled using platform "Nordic nRF51822 FOTA")
  • Compile options available for:
    • nRF51822-mkit (Includes USB Serial Debug)
    • nRF51822-EK
    • nRF51822-Beacon (nRFBeacon)
    • Atomwear (Button and LED on main PCB only)
    • *If anyone gets this working with other publicly available PCBs let me know and we can add it in
Committer:
prussell
Date:
Fri Feb 20 00:41:18 2015 +0000
Revision:
6:85f68f27170c
Parent:
5:ac98ff227ad7
Added option to generate up to 3 PWM signals at a time on Atomwear debug header to confirm pinout (Schematic vs user guide)
; Atomwear Debug Header has: p13,p14,p15 p0,p2,p3, p12,p11,Batt, SWIO,SWCK,Gnd.
; All pX work with PwmOut (Max 3 at a time)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
prussell 3:3651f1a58d9e 1 //To load over FOTA set platform to "Nordic nRF51822 FOTA" and use DFU feature of App "nRF Master Control Panel" (Hex file <100K)
prussell 4:3a065a4e3ca6 2 //To use normal mbed loading set platform to "Nordic nRF51822" and copy to mbed drive (Hex File >250KB)
prussell 3:3651f1a58d9e 3
prussell 0:aa7314f3fa84 4 /* mbed Microcontroller Library
prussell 4:3a065a4e3ca6 5 * Copyright (c) 2006-2015 Paul Russell
prussell 0:aa7314f3fa84 6 *
prussell 0:aa7314f3fa84 7 * Licensed under the Apache License, Version 2.0 (the "License");
prussell 0:aa7314f3fa84 8 * you may not use this file except in compliance with the License.
prussell 0:aa7314f3fa84 9 * You may obtain a copy of the License at
prussell 0:aa7314f3fa84 10 *
prussell 0:aa7314f3fa84 11 * http://www.apache.org/licenses/LICENSE-2.0
prussell 0:aa7314f3fa84 12 *
prussell 0:aa7314f3fa84 13 * Unless required by applicable law or agreed to in writing, software
prussell 0:aa7314f3fa84 14 * distributed under the License is distributed on an "AS IS" BASIS,
prussell 0:aa7314f3fa84 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
prussell 0:aa7314f3fa84 16 * See the License for the specific language governing permissions and
prussell 0:aa7314f3fa84 17 * limitations under the License.
prussell 0:aa7314f3fa84 18 */
prussell 0:aa7314f3fa84 19
prussell 3:3651f1a58d9e 20 //==============================
prussell 3:3651f1a58d9e 21 // Build Options for D_PCB
prussell 4:3a065a4e3ca6 22 #define D_MKIT 1 // nRF51822-mkit
prussell 4:3a065a4e3ca6 23 #define D_EK 2 // nRF51822-EK
prussell 4:3a065a4e3ca6 24 #define D_BEACON 3 // nRF51822-Beacon
prussell 4:3a065a4e3ca6 25 #define D_ATOMWEAR 4 // Atomwear
prussell 6:85f68f27170c 26
prussell 3:3651f1a58d9e 27 //==============================
prussell 3:3651f1a58d9e 28 // Compile Options:
prussell 6:85f68f27170c 29 #define D_BLE_UART 1 // Include BLE UART functionality?
prussell 6:85f68f27170c 30 #define D_PING_SEC 1 // Ping Rate in Seconds
prussell 4:3a065a4e3ca6 31
prussell 4:3a065a4e3ca6 32 #define D_PCB D_MKIT // Select target PCB
prussell 6:85f68f27170c 33 //#define D_MkitPROBING 1 // Option: Drive pwm on select header signals to aid probing with scope, comment out this line to disable
prussell 4:3a065a4e3ca6 34 //#define D_PCB D_EK // Select target PCB
prussell 4:3a065a4e3ca6 35 //#define D_PCB D_BEACON // Select target PCB
prussell 4:3a065a4e3ca6 36 //#define D_PCB D_ATOMWEAR // Select target PCB
prussell 6:85f68f27170c 37 //#define D_AtomPROBING 1 // Option: Drive pwm on select Debug Header signals to support probing with scope (PWM 10%~80%), comment out this line to disable **Disconnect all modules except Main/Debug/Battery**
prussell 3:3651f1a58d9e 38
prussell 3:3651f1a58d9e 39 //==============================
prussell 0:aa7314f3fa84 40 #include "mbed.h"
prussell 0:aa7314f3fa84 41 #include "BLEDevice.h"
prussell 0:aa7314f3fa84 42
prussell 3:3651f1a58d9e 43 //============================== Process PCB Options:
prussell 3:3651f1a58d9e 44 #if D_PCB==D_MKIT
prussell 6:85f68f27170c 45 const char *pcDeviceName = "FOTA4r6m";
prussell 6:85f68f27170c 46 const char *pcPingBLE = "m4\n"; // May need "\n" to push BLE Tx
prussell 6:85f68f27170c 47 const char *pcPingUART = "u4\n";
prussell 4:3a065a4e3ca6 48
prussell 4:3a065a4e3ca6 49 #define DEBUG(...) { printf(__VA_ARGS__); } //UART: p0.08~p0.11, Debug OK over USB Serial
prussell 4:3a065a4e3ca6 50 DigitalIn bB1in(BUTTON1); //p0.16 =Button1
prussell 4:3a065a4e3ca6 51 DigitalIn bB2in(BUTTON2); //p0.17 =Button2
prussell 4:3a065a4e3ca6 52 InterruptIn B1int(BUTTON1); //p0.16 =Button1
prussell 4:3a065a4e3ca6 53 InterruptIn B2int(BUTTON2); //p0.17 =Button2
prussell 4:3a065a4e3ca6 54 DigitalOut bL1out(LED1); //p0.18 =LED1
prussell 4:3a065a4e3ca6 55 DigitalOut bL2out(LED2); //p0.19 =LED2
prussell 4:3a065a4e3ca6 56 //PwmOut fL1pwm(LED1); float fL1level = 0.1;//p0.18 =LED1, BrightnessFloat(0.0~1.0)
prussell 4:3a065a4e3ca6 57 //PwmOut fL2pwm(LED2); float fL2level = 0.1;//p0.19 =LED2, BrightnessFloat(0.0~1.0)
prussell 4:3a065a4e3ca6 58 //AnalogIn adcA(p1); //p0.01 =AIN2
prussell 4:3a065a4e3ca6 59 //AnalogIn adcB(p2); //p0.02 =AIN3
prussell 4:3a065a4e3ca6 60
prussell 4:3a065a4e3ca6 61 #define D_0_LED_TICKER { bL1out=((uTicker1++)&0x01);} // LED Follows Ticker (May also follow a button)
prussell 4:3a065a4e3ca6 62 #define D_1_LED_BUTTON { bL1out = !bB1in;} // LED Follows !Button
prussell 4:3a065a4e3ca6 63 #define D_2_LED_BUTTON { bL2out = !bB2in;} // LED Follows !Button
prussell 4:3a065a4e3ca6 64 #define D_OPERATION_LED "mkit: LED1=Ticker+Button1, LED2=Button2"
prussell 4:3a065a4e3ca6 65
prussell 3:3651f1a58d9e 66 #elif D_PCB==D_EK
prussell 6:85f68f27170c 67 const char *pcDeviceName = "FOTA4r6e";
prussell 4:3a065a4e3ca6 68 const char *pcPingBLE = "e4\n"; // May need "\n" to push BLE Tx
prussell 4:3a065a4e3ca6 69
prussell 4:3a065a4e3ca6 70 #define DEBUG(...) {} //Serial Debug not connected
prussell 4:3a065a4e3ca6 71 DigitalIn bB1in(BUTTON1); //p0.16 =Button0
prussell 4:3a065a4e3ca6 72 DigitalIn bB2in(BUTTON2); //p0.17 =Button1
prussell 4:3a065a4e3ca6 73 InterruptIn B1int(BUTTON1); //p0.16 =Button0
prussell 4:3a065a4e3ca6 74 InterruptIn B2int(BUTTON2); //p0.17 =Button1
prussell 4:3a065a4e3ca6 75 DigitalOut bL1out(LED1); //p0.18 =LED0
prussell 4:3a065a4e3ca6 76 DigitalOut bL2out(LED2); //p0.19 =LED1
prussell 4:3a065a4e3ca6 77 //PwmOut fL1pwm(LED1); float fL1level = 0.1;//p0.18 =LED0, BrightnessFloat(0.0~1.0)
prussell 4:3a065a4e3ca6 78 //PwmOut fL2pwm(LED2); float fL2level = 0.1;//p0.19 =LED1, BrightnessFloat(0.0~1.0)
prussell 4:3a065a4e3ca6 79 //AnalogIn adcA(p1); //p0.01 =AIN2
prussell 4:3a065a4e3ca6 80 //AnalogIn adcB(p2); //p0.02 =AIN3
prussell 4:3a065a4e3ca6 81
prussell 4:3a065a4e3ca6 82 #define D_0_LED_TICKER { bL1out=((uTicker1++)&0x01);} // LED Follows Ticker (May also follow a button)
prussell 4:3a065a4e3ca6 83 #define D_1_LED_BUTTON { bL1out = !bB1in;} // LED Follows !Button
prussell 4:3a065a4e3ca6 84 #define D_2_LED_BUTTON { bL2out = !bB2in;} // LED Follows !Button
prussell 4:3a065a4e3ca6 85 #define D_OPERATION_LED "EK: LED0=Ticker+Button0, LED1=Button1"
prussell 4:3a065a4e3ca6 86
prussell 4:3a065a4e3ca6 87 #elif D_PCB==D_BEACON
prussell 6:85f68f27170c 88 const char *pcDeviceName = "FOTA4r6b";
prussell 4:3a065a4e3ca6 89 const char *pcPingBLE = "b4\n"; // May need "\n" to push BLE Tx
prussell 4:3a065a4e3ca6 90
prussell 4:3a065a4e3ca6 91 #define DEBUG(...) {} //Serial Debug not connected
prussell 4:3a065a4e3ca6 92 DigitalIn bB1in(p8); //p0.08 =SW1
prussell 4:3a065a4e3ca6 93 DigitalIn bB2in(p18); //p0.18 =SW2
prussell 4:3a065a4e3ca6 94 InterruptIn B1int(p8); //p0.08 =SW1
prussell 4:3a065a4e3ca6 95 InterruptIn B2int(p18); //p0.18 =SW2
prussell 4:3a065a4e3ca6 96 DigitalOut bLRout(p16); //p0.16 =LEDR
prussell 4:3a065a4e3ca6 97 DigitalOut bLGout(p12); //p0.12 =LEDG
prussell 4:3a065a4e3ca6 98 DigitalOut bLBout(p15); //p0.15 =LEDB
prussell 4:3a065a4e3ca6 99 //PwmOut fLRpwm(p16); float fLRlevel = 0.1; //p0.16 =LEDR, BrightnessFloat(0.0~1.0)
prussell 4:3a065a4e3ca6 100 //PwmOut fLGpwm(p12); float fLGlevel = 0.1; //p0.12 =LEDG, BrightnessFloat(0.0~1.0)
prussell 4:3a065a4e3ca6 101 //PwmOut fLBpwm(p15); float fLBlevel = 0.1; //p0.15 =LEDB, BrightnessFloat(0.0~1.0)
prussell 4:3a065a4e3ca6 102 //AnalogIn adcA(p1); //p0.01 =AIN2
prussell 4:3a065a4e3ca6 103 //AnalogIn adcB(p2); //p0.02 =AIN3
prussell 4:3a065a4e3ca6 104
prussell 4:3a065a4e3ca6 105 #define D_0_LED_TICKER { bLRout=((uTicker1++)&0x01);} // LED Follows Ticker (May also follow a button)
prussell 4:3a065a4e3ca6 106 #define D_1_LED_BUTTON { bLGout = bB1in;} // LED Follows Button
prussell 4:3a065a4e3ca6 107 #define D_2_LED_BUTTON { bLBout = bB2in;} // LED Follows Button
prussell 5:ac98ff227ad7 108 #define D_OPERATION_LED "Beacon: Red=Ticker, Green=SW1, Blue=SW2"
prussell 4:3a065a4e3ca6 109
prussell 4:3a065a4e3ca6 110 #elif D_PCB==D_ATOMWEAR // USBSerial=None, ButtonLED=atomwear, LEDx=Buttonx, LEDw=Buttony|Ticker
prussell 6:85f68f27170c 111 const char *pcDeviceName = "FOTA4r6a";
prussell 4:3a065a4e3ca6 112 const char *pcPingBLE = "a\n"; // May need "\n" to push BLE Tx
prussell 4:3a065a4e3ca6 113
prussell 4:3a065a4e3ca6 114 #define DEBUG(...) {} //Serial Debug not connected
prussell 4:3a065a4e3ca6 115 DigitalIn bB1in(p29); //p0.29 =S1
prussell 4:3a065a4e3ca6 116 InterruptIn B1int(p29); //p0.29 =S1
prussell 4:3a065a4e3ca6 117 DigitalOut bLBout(p17); //p0.17 =LEDB
prussell 4:3a065a4e3ca6 118 DigitalOut bLWout(p18); //p0.18 =LEDW
prussell 4:3a065a4e3ca6 119 //PwmOut fLBpwm(p17); float fLBlevel = 0.1; //p0.17 =LEDB, BrightnessFloat(0.0~1.0)
prussell 4:3a065a4e3ca6 120 //PwmOut fLWpwm(p18); float fLWlevel = 0.1; //p0.18 =LEDW, BrightnessFloat(0.0~1.0)
prussell 4:3a065a4e3ca6 121 //AnalogIn adcA(p1); //p0.01 =AIN2
prussell 4:3a065a4e3ca6 122 //AnalogIn adcB(p2); //p0.02 =AIN3
prussell 6:85f68f27170c 123
prussell 4:3a065a4e3ca6 124 #define D_0_LED_TICKER { bLBout=((uTicker1++)&0x01);} // LED Follows Ticker (May also follow a button)
prussell 4:3a065a4e3ca6 125 #define D_1_LED_BUTTON { bLWout = bB1in;} // LED Follows Button
prussell 4:3a065a4e3ca6 126 #define D_OPERATION_LED "Atomwear: Blue=Ticker, White=S1"
prussell 4:3a065a4e3ca6 127
prussell 3:3651f1a58d9e 128 #else
prussell 3:3651f1a58d9e 129 #error Unknown PCB
prussell 3:3651f1a58d9e 130 #endif
prussell 0:aa7314f3fa84 131
prussell 4:3a065a4e3ca6 132 //============================== BLE
prussell 0:aa7314f3fa84 133 BLEDevice ble;
prussell 4:3a065a4e3ca6 134 #if D_BLE_UART==1
prussell 4:3a065a4e3ca6 135 #include "UARTService.h"
prussell 4:3a065a4e3ca6 136 UARTService *uartServicePtr;
prussell 4:3a065a4e3ca6 137 #define D_OPERATION_BLE ", BLE-UART=[Echo typing, and ping on Ticker]\n"
prussell 4:3a065a4e3ca6 138 #else
prussell 4:3a065a4e3ca6 139 #define D_OPERATION_BLE ", BLE-UART not enabled\n"
prussell 4:3a065a4e3ca6 140 #endif
prussell 0:aa7314f3fa84 141
prussell 4:3a065a4e3ca6 142 #include "DeviceInformationService.h"
prussell 4:3a065a4e3ca6 143 //? #include "DFUService.h" //Required if "DFUService dfu(ble)" is explicitely declared
prussell 0:aa7314f3fa84 144
prussell 3:3651f1a58d9e 145 //============================== Handle Button Activity
prussell 3:3651f1a58d9e 146 void onButton(void)
prussell 3:3651f1a58d9e 147 { // Handle any button changes
prussell 3:3651f1a58d9e 148 DEBUG("B\n");
prussell 4:3a065a4e3ca6 149
prussell 4:3a065a4e3ca6 150 D_1_LED_BUTTON; // Update LED from Button
prussell 4:3a065a4e3ca6 151 #ifdef D_2_LED_BUTTON
prussell 4:3a065a4e3ca6 152 D_2_LED_BUTTON; // Update LED from Button
prussell 3:3651f1a58d9e 153 #endif
prussell 3:3651f1a58d9e 154 };
prussell 3:3651f1a58d9e 155
prussell 3:3651f1a58d9e 156 //============================== Handle Ticker1
prussell 3:3651f1a58d9e 157 uint8_t uTicker1;
prussell 3:3651f1a58d9e 158 void onTicker1(void)
prussell 0:aa7314f3fa84 159 {
prussell 3:3651f1a58d9e 160 DEBUG(pcPingUART);
prussell 4:3a065a4e3ca6 161 D_0_LED_TICKER; // Update LED from Ticker
prussell 0:aa7314f3fa84 162
prussell 4:3a065a4e3ca6 163 #if D_BLE_UART==1
prussell 3:3651f1a58d9e 164 if (uartServicePtr != NULL) {
prussell 3:3651f1a58d9e 165 ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), (const uint8_t *)pcPingBLE, strlen(pcPingBLE)); // BLE UART = Ping Message (Max 20char)
prussell 3:3651f1a58d9e 166 }
prussell 4:3a065a4e3ca6 167 #endif
prussell 0:aa7314f3fa84 168 }
prussell 0:aa7314f3fa84 169
prussell 3:3651f1a58d9e 170 //============================== Handle BLE: Disconnect, Written...
prussell 3:3651f1a58d9e 171 void onDisconnect(Gap::Handle_t tHandle, Gap::DisconnectionReason_t eReason)
prussell 0:aa7314f3fa84 172 {
prussell 3:3651f1a58d9e 173 // When BLE Disconnected mkit may output over long DEBUG over USB Serial (Careful of IO clash on other PCBs)
prussell 3:3651f1a58d9e 174 DEBUG("\nBLEi: Callback_BLE_Disconnect(Handle:%d, eReason:0x%02x=", tHandle, eReason );//PR: Occurs properly when click disconnect in App nRFToolbox:HRM
prussell 3:3651f1a58d9e 175 switch(eReason) {
prussell 3:3651f1a58d9e 176 case Gap::REMOTE_USER_TERMINATED_CONNECTION: DEBUG("REMOTE_USER_TERMINATED_CONNECTION"); break;
prussell 3:3651f1a58d9e 177 case Gap::CONN_INTERVAL_UNACCEPTABLE: DEBUG("CONN_INTERVAL_UNACCEPTABLE"); break;
prussell 3:3651f1a58d9e 178 case Gap::LOCAL_HOST_TERMINATED_CONNECTION: DEBUG("LOCAL_HOST_TERMINATED_CONNECTION"); break;
prussell 3:3651f1a58d9e 179 default: DEBUG("UNKNOWN"); break;
prussell 3:3651f1a58d9e 180 }
prussell 3:3651f1a58d9e 181 DEBUG("), Restarting Advertising\n", tHandle, eReason );//PR: Occurs properly when click disconnect in App nRFToolbox:HRM
prussell 5:ac98ff227ad7 182 ble.startAdvertising(); // restart advertising //20150130: Thanks to Wayne Keenan (waynek) for spotting this missing line!!
prussell 0:aa7314f3fa84 183 }
prussell 0:aa7314f3fa84 184
prussell 0:aa7314f3fa84 185 void onDataWritten(const GattCharacteristicWriteCBParams *params)
prussell 0:aa7314f3fa84 186 {
prussell 4:3a065a4e3ca6 187 #if D_BLE_UART==1
prussell 0:aa7314f3fa84 188 if ((uartServicePtr != NULL) && (params->charHandle == uartServicePtr->getTXCharacteristicHandle())) {
prussell 0:aa7314f3fa84 189 uint16_t bytesRead = params->len;
prussell 0:aa7314f3fa84 190 DEBUG("BLE-UART Echo Rx[%u]=[%*s]\n", bytesRead, params->len, params->data);
prussell 0:aa7314f3fa84 191 ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), params->data, bytesRead);
prussell 0:aa7314f3fa84 192 } else {
prussell 3:3651f1a58d9e 193 DEBUG("Unexpected Characteristic Write, Handle:%d\n", params->charHandle);
prussell 0:aa7314f3fa84 194 }
prussell 4:3a065a4e3ca6 195 #else
prussell 4:3a065a4e3ca6 196 DEBUG("Unexpected Characteristic Write, Handle:%d\n", params->charHandle);
prussell 4:3a065a4e3ca6 197 #endif
prussell 0:aa7314f3fa84 198 }
prussell 0:aa7314f3fa84 199
prussell 3:3651f1a58d9e 200 //==============================
prussell 0:aa7314f3fa84 201 int main(void)
prussell 0:aa7314f3fa84 202 {
prussell 3:3651f1a58d9e 203 Ticker ticker1;
prussell 3:3651f1a58d9e 204 ticker1.attach(onTicker1, D_PING_SEC); //Ping Rate
prussell 0:aa7314f3fa84 205
prussell 2:0931d94f42a2 206 DEBUG("BLE Init %s\n", pcDeviceName);
prussell 5:ac98ff227ad7 207 DEBUG("After FOTA loading any unused IO pins may hold previous state, initialize all pins or reset to clear\n");
prussell 0:aa7314f3fa84 208 ble.init();
prussell 3:3651f1a58d9e 209 ble.onDisconnection(onDisconnect);
prussell 2:0931d94f42a2 210 ble.onDataWritten(onDataWritten);
prussell 0:aa7314f3fa84 211
prussell 0:aa7314f3fa84 212 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
prussell 0:aa7314f3fa84 213 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, (const uint8_t *)pcDeviceName, strlen(pcDeviceName));
prussell 0:aa7314f3fa84 214
prussell 0:aa7314f3fa84 215 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); /* needs to be connectable to allow use of DFUService */
prussell 3:3651f1a58d9e 216 //ble.setAdvertisingInterval(1600); /* 1s; in multiples of 0.625ms. */
prussell 3:3651f1a58d9e 217 ble.setAdvertisingInterval(Gap::MSEC_TO_ADVERTISEMENT_DURATION_UNITS(1000)); //PR: Advertise 1sec (1Hz)
prussell 0:aa7314f3fa84 218 ble.startAdvertising();
prussell 0:aa7314f3fa84 219
prussell 4:3a065a4e3ca6 220 //DeviceInformationService deviceInfo(ble, "ARM", "Model1", "SN1000", "hw-rev1", "fw-rev1");
prussell 4:3a065a4e3ca6 221 DeviceInformationService deviceInfo(ble, "ARM", pcDeviceName, "SN1000", "hw-rev1", "fw-rev1");
prussell 0:aa7314f3fa84 222
prussell 4:3a065a4e3ca6 223 //Enable FOTA DFU
prussell 4:3a065a4e3ca6 224 //? DFUService dfu(ble); // Included implicitely by ble.init() for FOTA platforms, but doing explicitly may be desired for some cases
prussell 0:aa7314f3fa84 225
prussell 4:3a065a4e3ca6 226 #if D_BLE_UART==1
prussell 4:3a065a4e3ca6 227 UARTService uartService(ble); //Setup BLE UART
prussell 0:aa7314f3fa84 228 uartServicePtr = &uartService;
prussell 4:3a065a4e3ca6 229 #endif
prussell 3:3651f1a58d9e 230
prussell 4:3a065a4e3ca6 231 DEBUG(D_OPERATION_LED D_OPERATION_BLE);
prussell 4:3a065a4e3ca6 232 B1int.fall(&onButton); B1int.rise(&onButton); // Button1
prussell 4:3a065a4e3ca6 233 #ifdef D_2_LED_BUTTON
prussell 4:3a065a4e3ca6 234 B2int.fall(&onButton); B2int.rise(&onButton); // Button2
prussell 4:3a065a4e3ca6 235 #endif
prussell 6:85f68f27170c 236
prussell 6:85f68f27170c 237 #if D_PCB==D_MKIT
prussell 6:85f68f27170c 238 #ifdef D_MkitPROBING
prussell 6:85f68f27170c 239 //**Warning:As of 20150219 nRF appears to have max 3 PwmOut channels, others don't output but compile OK. (Maybe see SoftPWM or FastPWM for more channels)
prussell 6:85f68f27170c 240
prussell 6:85f68f27170c 241 //For IO Pinout check: PWM 10%~80% on Debug Header pins to allow probing verification:
prussell 6:85f68f27170c 242 // Signals by schematic (User guide has typos), arranged by header rows from PCB edge
prussell 6:85f68f27170c 243 // nRF51 PWM //mkit
prussell 6:85f68f27170c 244 PwmOut pwm_p30(p30); pwm_p30=0.1; //P6.7
prussell 6:85f68f27170c 245 #endif
prussell 6:85f68f27170c 246 #endif
prussell 6:85f68f27170c 247
prussell 6:85f68f27170c 248 #if D_PCB==D_ATOMWEAR
prussell 6:85f68f27170c 249 #ifdef D_AtomPROBING
prussell 6:85f68f27170c 250 //**Disconnect all modules except Main/Debug/Battery**
prussell 6:85f68f27170c 251
prussell 6:85f68f27170c 252 //**Warning:As of 20150219 nRF appears to have max 3 PwmOut channels, others don't output but compile OK. (Maybe see SoftPWM or FastPWM for more channels)
prussell 6:85f68f27170c 253
prussell 6:85f68f27170c 254 //For IO Pinout check: PWM 10%~80% on Debug Header pins to allow probing verification:
prussell 6:85f68f27170c 255 // Signals by schematic (User guide has typos), arranged by header rows from PCB edge
prussell 6:85f68f27170c 256 // nRF51 PWM // Schematic //Header Bus //Silkscreen
prussell 6:85f68f27170c 257 PwmOut pwm_p13(p13); pwm_p13=0.1;// SPI_SCK1 //P17.2 22 //8
prussell 6:85f68f27170c 258 PwmOut pwm_p14(p14); pwm_p14=0.2;// SPI_MOSI1 //P17.4 23 //10
prussell 6:85f68f27170c 259 PwmOut pwm_p15(p15); pwm_p15=0.3;// SPI_MISO1 //P17.6 24 //12
prussell 6:85f68f27170c 260
prussell 6:85f68f27170c 261 // PwmOut pwm_p0(p0); pwm_p0=0.4;// GPIO1 //P17.1 11 //7
prussell 6:85f68f27170c 262 // PwmOut pwm_p2(p2); pwm_p2=0.5;// GPIO2 //P17.3 10 //9
prussell 6:85f68f27170c 263 // PwmOut pwm_p3(p3); pwm_p3=0.6;// GPIO3 //P17.5 9 //11
prussell 6:85f68f27170c 264
prussell 6:85f68f27170c 265 // PwmOut pwm_p12(p12); pwm_p12=0.7;// UART_RX //P15.2 21 //2
prussell 6:85f68f27170c 266 // PwmOut pwm_p11(p11); pwm_p11=0.8;// UART_TX //P15.4 20 //4
prussell 6:85f68f27170c 267 // ---- // VCC Unreg //P15.6 13 //6 ==Unregulated Power from Battery (Regulator on nRF PCB)
prussell 6:85f68f27170c 268
prussell 6:85f68f27170c 269 // SWDIO // SWDIO //P15.1 19 //1
prussell 6:85f68f27170c 270 // SWCLK // SWDCLK //P15.3 18 //3
prussell 6:85f68f27170c 271 // GND // GND //P15.5 15 //5
prussell 6:85f68f27170c 272 #endif
prussell 6:85f68f27170c 273 #endif
prussell 6:85f68f27170c 274
prussell 6:85f68f27170c 275
prussell 6:85f68f27170c 276 for (;;) {
prussell 0:aa7314f3fa84 277 ble.waitForEvent();
prussell 3:3651f1a58d9e 278 }
prussell 0:aa7314f3fa84 279 }
prussell 3:3651f1a58d9e 280 //========== end: main.cpp ==========
prussell 3:3651f1a58d9e 281