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: mbed Servo LSM9DS1_Library_
Revision 0:f66784158dab, committed 2020-02-26
- Comitter:
- kzkyuta
- Date:
- Wed Feb 26 02:49:19 2020 +0000
- Child:
- 1:d22b2e802de9
- Commit message:
- This version is for the sensor which detects voluntary eyelid closure.
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LSM9DS1_Library.lib Wed Feb 26 02:49:19 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/jmar7/code/LSM9DS1_Library/#24878c10a776
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Servo.lib Wed Feb 26 02:49:19 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/simon/code/Servo/#36b69a7ced07
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Feb 26 02:49:19 2020 +0000 @@ -0,0 +1,243 @@ +#define DEVICE_SERIAL_FC 1 +#include "mbed.h" +#include "Servo.h" +#include "LSM9DS1.h" + +//Serial pc(USBTX, USBRX); // to receive the name of participant +Serial pc(P0_19, P0_18); // to receive the name of participant +LSM9DS1 imu(P0_5, P0_4, 0xD6, 0x3C); + +AnalogIn sensor_0(P0_11); +AnalogIn sensor_1(P0_12); +AnalogIn sensor_2(P0_13); + +#define ARRAY_SIZE 10 +int array_0[ARRAY_SIZE]; +int array_1[ARRAY_SIZE]; +int array_2[ARRAY_SIZE]; + +int diff_0; +int diff_1; +int diff_2; + +int val_0; +int val_1; +int val_2; + +bool TH_Vol; + +int val; + +unsigned short counter_read; +unsigned short prev_counter_read; +unsigned short counter_wait; +unsigned short position; + +#define THRESHOLD 800 +#define THRESHOLD_VOL -100 + +DigitalOut rled(P0_15); +DigitalOut sp(P0_15); +DigitalOut gled(P0_23); +DigitalOut bled(P0_16); +DigitalIn sw(P0_1); +DigitalIn bt(P0_14); + +Servo myservo(P0_9); +bool servoState_c = true; +bool servoState_p = true; +bool isAutoActuation = false; +bool isServoClose = false; + +Ticker timer_1; + +uint8_t mode; // 0:auto, 1:manual, 2:BT base ctrl +uint8_t bt_state; +bool sw_state = true; + +void counter(){ + counter_read ++; + counter_wait ++; + if(counter_read >= 60000) counter_read = 0; + if(counter_wait >= 60000) counter_wait = 1000; +} + +void readVal(){ +// imu.readAccel(); +// imu.readMag(); +// imu.readGyro(); + // read the sensor value and push to the window array for differenciation. + val_0 = sensor_0.read_u16(); + val_1 = sensor_1.read_u16(); + val_2 = sensor_2.read_u16(); + + if(val_1 < 100 && val_2 < 100) TH_Vol = true; + else TH_Vol = false; + + if(val_0 > 36000 && val_0 < 27000) val_0 = array_0[ARRAY_SIZE - 1]; + if(val_1 > 36000 && val_1 < 27000) val_1 = array_1[ARRAY_SIZE - 1]; + if(val_2 > 36000 && val_2 < 27000) val_2 = array_2[ARRAY_SIZE - 1]; + + position ++; + int tempPos = position % ARRAY_SIZE; + + array_0[tempPos] = (val_0 + array_0[ARRAY_SIZE - 1] + array_0[ARRAY_SIZE - 2] + array_0[ARRAY_SIZE - 3])/3; + array_1[tempPos] = (val_1 + array_1[ARRAY_SIZE - 1] + array_1[ARRAY_SIZE - 2] + array_1[ARRAY_SIZE - 3])/3; + array_2[tempPos] = (val_2 + array_2[ARRAY_SIZE - 1] + array_2[ARRAY_SIZE - 2] + array_2[ARRAY_SIZE - 3])/3; + + // calcurate the differenciation. + if(tempPos == ARRAY_SIZE - 1){ + diff_0 = array_0[tempPos] - array_0[0]; + diff_1 = array_1[tempPos] - array_1[0]; + diff_2 = array_2[tempPos] - array_2[0]; + }else{ + diff_0 = array_0[tempPos] - array_0[tempPos + 1]; + diff_1 = array_1[tempPos] - array_1[tempPos + 1]; + diff_2 = array_2[tempPos] - array_2[tempPos + 1]; + } +} + +void setup(){ + timer_1.attach_us(&counter, 1000); + myservo.calibrate(0.0005, 45.0); + myservo = 0.55; + imu.begin(); + sw.mode(PullUp); +// pc.set_flow_control(Serial::RTSCTS, p7, p8); +} + +void ledShow(uint8_t _input){ + switch(_input){ + case 0: + rled = 0; + gled = 0; + bled = 0; + break; + case 1: + rled = 1; + gled = 0; + bled = 0; + break; + case 2: + rled = 0; + gled = 1; + bled = 0; + break; + case 3: + rled = 0; + gled = 0; + bled = 1; + break; + default: + rled = 0; + gled = 0; + bled = 0; + break; + } +} + +void ledCtrl(){ + if(bt_state){ + if(counter_read % 500 >= 250){ + ledShow(mode + 1); + }else{ + ledShow(0); + } + }else{ + ledShow(mode + 1); + } +} + +void changeMode(){ + mode++; + if(mode >= 3) mode = 0; +} + +void servoOpen(){ + myservo = 0.55; +} + +void servoClose(){ + myservo = 0.0; +} + +void autoActuation(){ + if(isAutoActuation){ + if(servoState_c && servoState_p){ + servoState_c = false; + myservo = 0.0; + counter_wait = 0; + }else if(!servoState_c && servoState_p){ + if(counter_wait >= 250) servoState_p = false; + }else if(!servoState_c && !servoState_p){ + servoState_c = true; + myservo = 0.55; + counter_wait = 0; + }else if(servoState_c && !servoState_p){ + if(counter_wait >= 500) servoState_p = true; + isAutoActuation = false; + } + } +} + +void btnCtrl(){ + if(!sw){ + pc.printf("Pushed"); + if(sw_state){ + sw_state = false; + counter_wait = 0; + } + } + if(sw && !sw_state){ + if((counter_wait > 50) && (counter_wait < 800)){ + if(mode == 1){ + if(isServoClose){ + servoOpen(); + }else{ + servoClose(); + } + isServoClose = !isServoClose; + } + }else if(counter_wait >= 800){ + changeMode(); + servoOpen(); + } + sw_state = true; + pc.printf("mode is %d\n", mode); + } +} + +void detection(){ + if(TH_Vol){ + if(diff_0 < THRESHOLD_VOL){ + if((diff_0 > -10000) || (diff_1 > -10000) || (diff_2 < -10000)){ + pc.printf("detected!!"); + isAutoActuation = true; + } + } + } + //else{ +// if((diff_0 > THRESHOLD) || (diff_1 > THRESHOLD) || (diff_2 > THRESHOLD)){ +// if((diff_0 < 3000) || (diff_1 < 3000) || (diff_2 < 3000)){ +// pc.printf("detected"); +// isAutoActuation = true; +// } +// } +// } +} + +int main() { + setup(); + while(1) { + if(counter_read % 3 == 0){ + readVal(); + detection(); + } + if(mode == 0){ + autoActuation(); + } + btnCtrl(); + bt_state = bt; + ledCtrl(); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed Feb 26 02:49:19 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file