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 nRF51822 mbed
Fork of KS7 by
Diff: main.cpp
- Revision:
- 14:81347f8f0bda
- Parent:
- 13:6b3cce9e588b
- Child:
- 15:544e0ce3c1d9
--- a/main.cpp Wed Dec 09 04:51:26 2015 +0000
+++ b/main.cpp Thu Dec 17 04:02:23 2015 +0000
@@ -15,7 +15,7 @@
#define MANUFACTURER_NAME_STRING "Hacarus" // Manufacturer Name String - shall represent the name of the manufacturer of the device.
#define MODEL_NUMBER_STRING "0001" // Model Number String - shall represent the model number that is assigned by the device vendor.
#define SERIAL_NUMBER_STRING "000780c0ffeef00d" // Serial Number String - shall represent the serial number for a particular instance of the device.
-#define FIRMWARE_REVISION_STRING "v1.00.003@rev0013" // Firmware Revision String - shall represent the firmware revision for the firmware within the device.
+#define FIRMWARE_REVISION_STRING "v1.00.004@rev0014" // Firmware Revision String - shall represent the firmware revision for the firmware within the device.
// Weight Scale Service (Original)
#define UUID_WEIGHT_SCALE_SERVICE (0x181D)
@@ -23,7 +23,10 @@
// JoyStick
#define PUSH_MINTHRESHOLD (0.2)
#define PUSH_MAXTHRESHOLD (0.6)
-#define PUSH_COUNT (15)
+#define PUSH_COUNT (3)
+
+#define SW_THRESHOLD (0.5)
+#define SW_SAMPLECOUNT (3)
// Mode
#define MODE_OFF (0) // LED OFF
@@ -45,9 +48,13 @@
uint32_t scale = 0;
int update_counter = 0;
int push_counter = 0;
+float sw_data[SW_SAMPLECOUNT];
+uint8_t sw_count = 0;
int led_mode = MODE_OFF;
float led_brightness = BRIGHTNESS_MINVALUE;
+Timer t;
+
// UART for debug
#ifdef UART_DEBUG
@@ -90,29 +97,20 @@
/* to confirm joystick */
bool check_joystick(){
- bool pushing = false;
- float value_x,value_y;
-
-// value_x = io.get_x();
-// value_y = io.get_y();
+ float sum_data = 0;
- if(PUSH_MINTHRESHOLD >= value_x || PUSH_MAXTHRESHOLD <= value_x){
- pushing = true;
- }
- else if(PUSH_MINTHRESHOLD >= value_y || PUSH_MAXTHRESHOLD <= value_y){
- pushing = true;
+ // ジョイスティックXのADC値(0〜1.0換算)が0.5以上ならON、0.5未満ならOFF
+ sw_data[sw_count] = io.get_x();
+
+ if(++sw_count >= SW_SAMPLECOUNT){
+ sw_count = 0;
}
- if(pushing){
- if(++push_counter >= PUSH_COUNT){
- push_counter = 0;
- return true;
- }
- }else{
- push_counter = 0;
+ for(int count = 0;count < SW_SAMPLECOUNT;count++){
+ sum_data += sw_data[count];
}
- return false;
+ return ((sum_data / SW_SAMPLECOUNT) >= SW_THRESHOLD);
}
uint32_t quick_ieee11073_from_float(float data)
@@ -148,44 +146,44 @@
switch(led_mode){
case MODE_OFF:
- //if(check_joystick()){
-// io.display_value = 0;
+ if(check_joystick()){
+// io.display_value = 0;
led_mode = MODE_START;
- //}
+ }
break;
case MODE_START:
led_brightness += BRIGHTNESS_ADDVALUE;
io.display(led_brightness);
if(led_brightness >= BRIGHTNESS_MAXVALUE){
+ update_counter = 0;
led_mode = MODE_ON;
ble.startAdvertising();
}
break;
case MODE_ON:
- //if(!check_joystick()){
- io.analog_pow(1); // turn analog power on
- wait_ms(1);
- weight = io.get_weight() * 9999.0;
- io.display_value = (uint16_t)weight; // dummy display
- io.analog_pow(0); // turn analog power off
- if(++update_counter >= 5){
- weight_data = quick_ieee11073_from_float(weight);
- ble.updateCharacteristicValue(WeightMeasurement.getValueAttribute().getHandle(),
- (uint8_t *)&weight_data,
- sizeof(weight_data));
- update_counter = 0;
- }
- /*
- }else{
+ if(!check_joystick()){
led_mode = MODE_END;
if(ble.getGapState().connected){
ble.disconnect(Gap::REMOTE_USER_TERMINATED_CONNECTION);
}else{
ble.stopAdvertising();
}
+ return;
+ }
+ //io.analog_pow(1); // turn analog power on
+ //wait_ms(1);
+ weight = io.get_weight() * 9999.0;
+ io.display_value = (uint16_t)weight; // dummy display
+ //io.analog_pow(0); // turn analog power off
+
+ if(++update_counter >= 5){
+ weight_data = quick_ieee11073_from_float(weight);
+ ble.updateCharacteristicValue(WeightMeasurement.getValueAttribute().getHandle(),
+ (uint8_t *)&weight_data,
+ sizeof(weight_data));
update_counter = 0;
}
- */
+
break;
case MODE_END:
led_brightness -= BRIGHTNESS_ADDVALUE;
@@ -274,33 +272,75 @@
BleInitialize();
- tk.attach_us(&ticker_callback, LED_INTERVAL_NSEC);
+ // SW Initialize
+ for(int count = 0;count < SW_SAMPLECOUNT;count++){
+ sw_data[count] = 0;
+ }
+
+
/*
- // test for Full Power Consumption
- io.display(1);
- io.analog_pow(1);
- io.display_value = 8888;
-*/
- //io.display(0.5); io.display_value = 1111;
- //io.analog_pow(1);
- /*
- io.display(0.5);
+ //tk.attach_us(&ticker_callback, LED_INTERVAL_NSEC);
if(NRF_UICR->XTALFREQ == 0xFFFFFF00){
io.display_value = 3232;
}else if(NRF_UICR->XTALFREQ == 0xFFFFFFFF){
io.display_value = 1616;
}
+*/
io.analog_pow(1);
- */
- ble.startAdvertising();
-
- //while(1){
- // DEBUG("%f %f %f\r\n", io._get_adc(0), io._get_adc(1), io._get_adc(2));
- // io.display_value = io._get_adc_raw(0) % 10000;
- //}
+
for (;; ) {
- ble.waitForEvent();
+ // 100msec waitForEvent
+ t.reset();
+ t.start();
+ while(t.read_ms() < 100){
+ ble.waitForEvent();
+ }
+
+ // ticker処理
+ switch(led_mode){
+ case MODE_OFF:
+ if(check_joystick()){
+ led_mode = MODE_START;
+ }
+ break;
+ case MODE_START:
+ led_brightness += BRIGHTNESS_ADDVALUE;
+ io.display(led_brightness);
+ if(led_brightness >= BRIGHTNESS_MAXVALUE){
+ update_counter = 0;
+ led_mode = MODE_ON;
+ ble.startAdvertising();
+ }
+ break;
+ case MODE_ON:
+ if(!check_joystick()){
+ led_mode = MODE_END;
+ if(ble.getGapState().connected){
+ ble.disconnect(Gap::REMOTE_USER_TERMINATED_CONNECTION);
+ }else{
+ ble.stopAdvertising();
+ }
+ }else{
+ weight = io.get_weight() * 9999.0;
+ io.display_value = (uint16_t)weight; // dummy display
+ if(++update_counter >= 5){
+ weight_data = quick_ieee11073_from_float(weight);
+ ble.updateCharacteristicValue(WeightMeasurement.getValueAttribute().getHandle(),
+ (uint8_t *)&weight_data,
+ sizeof(weight_data));
+ update_counter = 0;
+ }
+ }
+ break;
+ case MODE_END:
+ led_brightness -= BRIGHTNESS_ADDVALUE;
+ io.display(led_brightness);
+ if(led_brightness <= BRIGHTNESS_MINVALUE){
+ led_mode = MODE_OFF;
+ }
+ break;
+ }
}
}
