
mbed HRM1017によるAD9850の操作
Dependencies: BLE_API mbed nRF51822
what's this ? / 概要
あとで、ちゃんと書く(とおもう)
detail / 詳細
あとで、ちゃんと書く(とおもう)
BEL command format / BLEコマンドフォーマット
あとで、ちゃんと書く(とおもう)
BLE App for iPhone
iOS用アプリソースコード App source codes for iOS
https://github.com/ohneta/AD9850BLE
pictures / とりあえず写真など
外観
アプリ画面
more ...
main.cpp
- Committer:
- ohneta
- Date:
- 2015-06-18
- Revision:
- 0:cc32f8c167de
File content as of revision 0:cc32f8c167de:
#include "mbed.h" #include "AD9850.h" #include "BLEDevice.h" #define DEBUG 1 //----------------------------------------------------------------------- //----------------------------------------------------------------------- Ticker ticker; Serial pc(P0_9, P0_11); DigitalOut led1(P0_18); DigitalOut led2(P0_19); DigitalIn btn1(P0_16); DigitalIn btn2(P0_17); AD9850 dds(P0_20, P0_25, P0_24, P0_23); //----------------------------------------------------------------------- uint32_t targetFreq = 10 * 1000 * 1000; // 10MHz - default uint32_t incrementFreq = 100 * 1000; // This is a 100KHz frequency increment //----------------------------------------------------------------------- BLEDevice ble; const static char DEVICE_NAME[] = "DDS-CTRL 0.2"; static const uint16_t uuid16_list[] = {0xFFFF}; // Custom UUID, FFFF is reserved for development // Set Up custom Characteristics static uint8_t deviceValue = 0; static uint8_t outputValue = 0; static uint32_t frequencyValue = 0; ReadWriteArrayGattCharacteristic<uint8_t, 1> deviceChar(0xA201, &deviceValue); ReadWriteArrayGattCharacteristic<uint8_t, 1> outputChar(0xA202, &outputValue); ReadWriteArrayGattCharacteristic<uint32_t, 1> frequencyChar(0xA203, &frequencyValue); // Set up custom service GattCharacteristic *characteristics[] = { &deviceChar, &outputChar, &frequencyChar, }; GattService customService(0xA001, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *)); //----------------------------------------------------------------------- /** * */ void connectionCallback(Gap::Handle_t Handle_t, Gap::addr_type_t peerAddrType, const Gap::address_t peerAddr, Gap::addr_type_t ownAddrType, const Gap::address_t ownAddr, const Gap::ConnectionParams_t *params) { pc.printf("connectionCallback\n"); } //-------------------------------- /* * Restart advertising when phone app disconnects */ void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason) { pc.printf("disconnectionCallback\n"); ble.startAdvertising(); } //-------------------------------- /* * handle writes to writeCharacteristic */ void writeCharCallback(const GattCharacteristicWriteCBParams *params) { led2 = !led2; pc.printf("BLE:onDataWritten\n"); if (params->charHandle == deviceChar.getValueHandle()) { memcpy(&deviceChar, params->data, params->len); pc.printf("deviceChar\n"); pc.printf("deviceChar: deviceValue: %x\n", deviceValue); } else if (params->charHandle == outputChar.getValueHandle()) { memcpy(&outputValue, params->data, params->len); pc.printf("outputChar : outputValue: %x\n", outputValue); } else if (params->charHandle == frequencyChar.getValueHandle()) { memcpy(&targetFreq, params->data, params->len); pc.printf("frequencyChar\n"); pc.printf("targetFreq: %d\n", targetFreq); } } //----------------------------------------------------------------------- void tickerCallback() { led1 = !led1; } char guruguru(int cnt) { static char gurus[] = {'-', '\\', '|', '/'}; return gurus[cnt % 4]; } //-------------------------------- int main(void) { ticker.attach(&tickerCallback, 0.5); pc.baud(115200); pc.printf("\n"); pc.printf("------------------------\n"); pc.printf("DDS-CTRL start\n"); led1 = 0; led2 = 0;; ble.init(); ble.onConnection(connectionCallback); ble.onDisconnection(disconnectionCallback); ble.onDataWritten(writeCharCallback); // setup advertising { // BLE only, no classic BT ble.accumulateAdvertisingPayload( GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE ); // advertising type ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); // add name ble.accumulateAdvertisingPayload( GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME) ); // UUID's broadcast in advertising packet ble.accumulateAdvertisingPayload( GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list) ); ble.setAdvertisingInterval(100); // interval is 100ms. // add my service ble.addService(customService); // start advertising ble.startAdvertising(); } pc.printf("BLE init\n"); // DDS 初期化 { dds.init(); pc.printf("\nFREQ: %d [default]\n", targetFreq); dds.setFrequency(targetFreq, 0, 0); dds.setFrequency(targetFreq, 0, 0); // TODO: なぜか最初だけ2回ださないと設定されない... } pc.printf("DDS init\n"); int loopCounter = 0; int lastFreq = targetFreq; while (true) { ble.waitForEvent(); loopCounter++; //pc.putc(guruguru(loopCounter)); //pc.putc('\r'); pc.putc('*'); wait_ms(100); if (lastFreq != targetFreq) { pc.printf("\nFREQ: %d\n", targetFreq); dds.setFrequency(targetFreq, 0, 0); //gInternalStorageBuffer.freq = targetFreq; //nRF51822_internalStorage_write(); lastFreq = targetFreq; } } } //---------------------------------------------------------