test
Dependencies: BLE_API nRF51822 mbed
Fork of KS7 by
main.cpp
- Committer:
- gomihgy
- Date:
- 2015-10-27
- Revision:
- 5:1730064b94bd
- Parent:
- 4:edd6e262de9e
- Child:
- 6:bc960e6fd1ed
File content as of revision 5:1730064b94bd:
#include "mbed.h" #include "io.h" #include "BLEDevice.h" // Advertise #define INTERVAL_1SEC (1000UL) #define ADV_TIMEOUT (0) #define DEVICE_NAME "Kitchen Scale" #define BLE_TXPOWER_4DBM (4) // Device Information Service (DIS) (20 character limit) // https://developer.bluetooth.org/gatt/services/Pages/ServiceViewer.aspx?u=org.bluetooth.service.device_information.xml #define MANUFACTURER_NAME_STRING "akita11/GomiHgy" // Manufacturer Name String - shall represent the name of the manufacturer of the device. #define MODEL_NUMBER_STRING "Model Number" // Model Number String - shall represent the model number that is assigned by the device vendor. #define SERIAL_NUMBER_STRING "Serial Number" // Serial Number String - shall represent the serial number for a particular instance of the device. #define HARDWARE_REVISION_STRING "v1.0.0@151023" // Hardware Revision String - shall represent the hardware revision for the hardware within the device. #define FIRMWARE_REVISION_STRING "rev0004:edd6e262de9e" // Firmware Revision String - shall represent the firmware revision for the firmware within the device. #define SOFTWARE_REVISION_STRING "v0.1.00.005:151027r1" // Software Revision String - shall represent the software revision for the software within the device. // Weight Scale Service (Original) #define UUID_WEIGHT_SCALE_SERVICE (0x181D) #define UUID_WEIGHT_MEASUREMENT_CHAR (0x3A9D) #ifdef UART_DEBUG Serial pc(P0_9, P0_8);// TX=P0_9 #define UART_BAUD_RATE (9600UL) #endif /* Serial pc(P0_9, P0_8);// TX=P0_9 AnalogIn vin(P0_1); int main() { pc.baud(9600); while(1){ pc.printf("CONFIG=%x\r\n", NRF_ADC->CONFIG); // 0x0000046a // EXTREFSEL=00 (none) // PSEL=00000100 (use AnalogInput2) // REFSEL=11 (VDD with 1/3 prescale) // INPSEL=010 (prescale=1/3) // RES=10 (10bit) pc.printf("%f %d\r\n", vin.read(), NRF_ADC->RESULT); wait(0.1); } } */ io io; Ticker tk; // 1s timer for switch check & weighgt measure float weight; char weight_str[20]; uint8_t fPow = 0; BLEDevice ble; Gap::ConnectionParams_t connectionParams; /* Complete list of 16-bit Service IDs */ uint16_t uuid16_list[] = {GattService::UUID_DEVICE_INFORMATION_SERVICE,UUID_WEIGHT_SCALE_SERVICE}; /* Weight Scale Service */ GattCharacteristic WeightMeasurement(GattCharacteristic::UUID_SERIAL_NUMBER_STRING_CHAR/*UUID_WEIGHT_MEASUREMENT_CHAR*/, (uint8_t *)&weight_str, sizeof(weight_str), sizeof(weight_str), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE); GattCharacteristic *WMSChars[] = {&WeightMeasurement }; GattService WMS(UUID_WEIGHT_SCALE_SERVICE , WMSChars, sizeof(WMSChars) / sizeof(GattCharacteristic *)); /* Device Information Service */ GattCharacteristic ManuName(GattCharacteristic::UUID_MANUFACTURER_NAME_STRING_CHAR, (uint8_t *)&MANUFACTURER_NAME_STRING, sizeof(MANUFACTURER_NAME_STRING) - 1, sizeof(MANUFACTURER_NAME_STRING) - 1, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); GattCharacteristic ModelNum(GattCharacteristic::UUID_MODEL_NUMBER_STRING_CHAR, (uint8_t *)&MODEL_NUMBER_STRING, sizeof(MODEL_NUMBER_STRING) - 1, sizeof(MODEL_NUMBER_STRING) - 1, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); //GattCharacteristic SerialNum(GattCharacteristic::UUID_SERIAL_NUMBER_STRING_CHAR, (uint8_t *)&SERIAL_NUMBER_STRING, sizeof(SERIAL_NUMBER_STRING) - 1, sizeof(SERIAL_NUMBER_STRING) - 1, // GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); GattCharacteristic HWVersion(GattCharacteristic::UUID_HARDWARE_REVISION_STRING_CHAR, (uint8_t *)&HARDWARE_REVISION_STRING, sizeof(HARDWARE_REVISION_STRING) - 1, sizeof(HARDWARE_REVISION_STRING) - 1, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); GattCharacteristic FWVersion(GattCharacteristic::UUID_FIRMWARE_REVISION_STRING_CHAR, (uint8_t *)&FIRMWARE_REVISION_STRING, sizeof(FIRMWARE_REVISION_STRING) - 1, sizeof(FIRMWARE_REVISION_STRING) - 1, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); GattCharacteristic SWVersion(GattCharacteristic::UUID_SOFTWARE_REVISION_STRING_CHAR, (uint8_t *)&SOFTWARE_REVISION_STRING, sizeof(SOFTWARE_REVISION_STRING) - 1, sizeof(SOFTWARE_REVISION_STRING) - 1, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); GattCharacteristic *DISChars[] = {&ManuName, &ModelNum, /*&SerialNum,*/ &HWVersion, &FWVersion, &SWVersion }; GattService DIS(GattService::UUID_DEVICE_INFORMATION_SERVICE , DISChars, sizeof(DISChars) / sizeof(GattCharacteristic *)); // 1s timer for switch check & weighgt measure void ticker_1s() { io.analog_pow(1); // turn analog power on weight = io.get_weight(); // get weight [g] sprintf (weight_str, "%0.3f[g]", weight); ble.updateCharacteristicValue(WeightMeasurement.getValueAttribute().getHandle(), (uint8_t *)&weight_str, sizeof(weight_str)); /* // check switch, and control power flag (fPower) if (fPow == 0 && io.get_switch() == 1){ while(io.get_switch() == 1); // wait until switch released fPow = 1; } if (fPow == 1 && io.get_switch() == 1){ while(io.get_switch() == 1); // wait until switch released fPow = 0; } */ // io.display_value = (uint16_t)(io.get_weight_raw() * 9999.0); // dummy display // io.display_value = (int)(io.get_x() * 9900 + io.get_y() * 99); // test: display joystick XY value // io.display_value = (uint16_t)(io.get_x() * 9999.0); // dummy display io.analog_pow(0); // turn analog power off } /* * BLE CallBacks */ void BLEConnectionCallback(Gap::Handle_t handle, Gap::addr_type_t type, const Gap::address_t addr,const Gap::ConnectionParams_t *params) { ble.updateConnectionParams(handle, &connectionParams); } void BLEDisconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason) { ble.startAdvertising(); } void BLEDataWrittenCallback(const GattCharacteristicWriteCBParams *params) { // Do Nothing. } void BLEDataReadCallback(const GattCharacteristicReadCBParams *params) { // Do Nothing. } void BLERadioNotificationCallback(bool radio_active) { if (radio_active == false) { // Do Nothing. } } void BleInitialize(void){ // Initialize ble.init(); // Event Set ble.onConnection(&BLEConnectionCallback); ble.onDisconnection(&BLEDisconnectionCallback); //ble.onDataWritten(&BLEDataWrittenCallback); //ble.onDataRead(&BLEDataReadCallback); ble.onRadioNotification(&BLERadioNotificationCallback); ble.getPreferredConnectionParams(&connectionParams); connectionParams.minConnectionInterval = INTERVAL_1SEC; connectionParams.maxConnectionInterval = INTERVAL_1SEC; ble.setPreferredConnectionParams(&connectionParams); ble.setTxPower(BLE_TXPOWER_4DBM); ble.accumulateAdvertisingPayload((GapAdvertisingData::Flags)(GapAdvertisingData::LE_GENERAL_DISCOVERABLE | GapAdvertisingData::BREDR_NOT_SUPPORTED)); ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (const uint8_t *)DEVICE_NAME, strlen(DEVICE_NAME)); ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS,(uint8_t *)uuid16_list, sizeof(uuid16_list)); ble.setAdvertisingInterval(INTERVAL_1SEC); ble.setAdvertisingTimeout(ADV_TIMEOUT); /* 0 is disable the advertising timeout. */ ble.addService(WMS); ble.addService(DIS); } int main() { BleInitialize(); #ifdef UART_DEBUG pc.baud(UART_BAUD_RATE); #endif tk.attach(&ticker_1s, 0.1); ble.startAdvertising(); // io.calibrate_weight(); // initial calibration while(1){ io.display(1); for (int i = 0; i < 50; i++){ io.display_value = (uint16_t)(io.get_weight() * 9999.0); // dummy display wait(0.1); } io.display(0.3); for (int i = 0; i < 50; i++){ io.display_value = (int)(io.get_x() * 9900 + io.get_y() * 99); // test: display joystick XY value wait(0.1); } // io.display_value = (uint16_t)(io.get_weight() * 9999.0); // dummy display // wait(0.1); // for (float i = 0; i < 1.0; i+=0.05){ // if (i <0.5) io.display(1.0-i); // else io.display(i); // change display brightneess // wait(0.1); // io.display_value = (uint16_t)(io.get_weight() * 9999.0); // dummy display // } } }