takuya okada
/
test
疑似的な脈波・呼吸・いびきを出力するプログラムです。
main.cpp@4:17cfeca0673c, 2017-01-26 (annotated)
- Committer:
- woodbed
- Date:
- Thu Jan 26 09:33:27 2017 +0000
- Revision:
- 4:17cfeca0673c
- Parent:
- 3:2f4d9f3a4618
AM???????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
woodbed | 0:63339e4deacf | 1 | #include "mbed.h" |
woodbed | 1:97c5a956a371 | 2 | |
woodbed | 1:97c5a956a371 | 3 | //Serial Port Setting |
woodbed | 1:97c5a956a371 | 4 | Serial pc(p13, p14); // シリアルポートのインスタンス |
woodbed | 1:97c5a956a371 | 5 | |
woodbed | 1:97c5a956a371 | 6 | //PWM Port Setting |
woodbed | 1:97c5a956a371 | 7 | PwmOut signal_1(p21); |
woodbed | 1:97c5a956a371 | 8 | PwmOut signal_2(p22); |
woodbed | 1:97c5a956a371 | 9 | PwmOut signal_3(p23); |
woodbed | 1:97c5a956a371 | 10 | |
woodbed | 1:97c5a956a371 | 11 | //Ticker |
woodbed | 1:97c5a956a371 | 12 | Ticker timer; |
woodbed | 1:97c5a956a371 | 13 | |
woodbed | 1:97c5a956a371 | 14 | //Digital Out |
woodbed | 1:97c5a956a371 | 15 | DigitalOut ledch1(LED1); |
woodbed | 1:97c5a956a371 | 16 | DigitalOut test(p20); |
woodbed | 1:97c5a956a371 | 17 | |
woodbed | 2:1e0021f8eb7d | 18 | //cos Wave |
woodbed | 1:97c5a956a371 | 19 | float coswave[256]; |
woodbed | 1:97c5a956a371 | 20 | |
woodbed | 1:97c5a956a371 | 21 | //status flug |
woodbed | 2:1e0021f8eb7d | 22 | int status1 =0; //suatus1 : 0=波形出力停止中, 1=波形出力中 |
woodbed | 1:97c5a956a371 | 23 | |
woodbed | 1:97c5a956a371 | 24 | //User set Wave Paramater 初期値 |
woodbed | 2:1e0021f8eb7d | 25 | int sample_dt = 100; //microsec 10kHz |
woodbed | 2:1e0021f8eb7d | 26 | float hb_carr_freq = 8.7; //Hz |
woodbed | 2:1e0021f8eb7d | 27 | float hb_mod_freq = 1; //Hz |
woodbed | 4:17cfeca0673c | 28 | float hb_carr_level = 0.5; //min=0 max=0.5 0.5以上ではMOD 50%以上で振幅が飽和する 0.083 |
woodbed | 4:17cfeca0673c | 29 | float hb_mod_ratio = 100; //0-100 % 63% |
woodbed | 2:1e0021f8eb7d | 30 | float resp_freq = 0.3; //Hz |
woodbed | 4:17cfeca0673c | 31 | float resp_level = 0.56; //min=0 max=1 0.56 |
woodbed | 2:1e0021f8eb7d | 32 | float snore_freq = 150; //Hz |
woodbed | 2:1e0021f8eb7d | 33 | float snore_level = 0.23; //min=0 max=1 |
woodbed | 2:1e0021f8eb7d | 34 | int snore_oncycle = 10000; //On Time = snore_oncycle * sample_dt, snore_oncycle < snore_allcycle; |
woodbed | 2:1e0021f8eb7d | 35 | int snore_allcycle = 33333; //OFF Time = (allcycle - oncycle) * sample_dt |
woodbed | 2:1e0021f8eb7d | 36 | int snore_onoff = 1; //0: ALL Time ON, 1:On Time only |
woodbed | 1:97c5a956a371 | 37 | |
woodbed | 1:97c5a956a371 | 38 | //Set wave paramater |
woodbed | 1:97c5a956a371 | 39 | //HB_carr |
woodbed | 1:97c5a956a371 | 40 | float hb_carr_period = 1000000*1/hb_carr_freq; //microSec |
woodbed | 2:1e0021f8eb7d | 41 | float hb_carr_n = 0; |
woodbed | 2:1e0021f8eb7d | 42 | float hb_carr_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 2:1e0021f8eb7d | 43 | float hb_carr_tend = 0; //The remainder of sampling points in the signal |
woodbed | 2:1e0021f8eb7d | 44 | float hb_carr_tstart = 0; //start offset of sampling time |
woodbed | 2:1e0021f8eb7d | 45 | float hb_carr_t_samplepoint = 0; |
woodbed | 2:1e0021f8eb7d | 46 | float hb_carr_table_dt = hb_carr_period/256; |
woodbed | 1:97c5a956a371 | 47 | float hb_carr_n_samplepoint = 0; |
woodbed | 1:97c5a956a371 | 48 | float hb_carr_v_samplepoint = 0; |
woodbed | 1:97c5a956a371 | 49 | |
woodbed | 1:97c5a956a371 | 50 | //HB_mod |
woodbed | 4:17cfeca0673c | 51 | float hb_mod_period = 1000000*1/hb_mod_freq; |
woodbed | 4:17cfeca0673c | 52 | float hb_mod_n = 0; |
woodbed | 4:17cfeca0673c | 53 | float hb_mod_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 4:17cfeca0673c | 54 | float hb_mod_tend = 0; //The remainder of sampling points in the signal |
woodbed | 4:17cfeca0673c | 55 | float hb_mod_tstart = 0; //start offset of sampling time |
woodbed | 4:17cfeca0673c | 56 | float hb_mod_t_samplepoint = 0; |
woodbed | 4:17cfeca0673c | 57 | float hb_mod_table_dt = hb_mod_period/256; |
woodbed | 4:17cfeca0673c | 58 | float hb_mod_n_samplepoint = 0; |
woodbed | 4:17cfeca0673c | 59 | float hb_mod_v_samplepoint = 0; |
woodbed | 1:97c5a956a371 | 60 | |
woodbed | 2:1e0021f8eb7d | 61 | float hb_mod_ra = hb_mod_ratio * 0.01; |
woodbed | 1:97c5a956a371 | 62 | float hb_signal = 0; |
woodbed | 4:17cfeca0673c | 63 | float mod_signal = 0; |
woodbed | 0:63339e4deacf | 64 | |
woodbed | 1:97c5a956a371 | 65 | //RESP |
woodbed | 1:97c5a956a371 | 66 | float resp_period = 1000000*1/resp_freq; //microSec |
woodbed | 2:1e0021f8eb7d | 67 | float resp_n = 0; |
woodbed | 2:1e0021f8eb7d | 68 | float resp_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 2:1e0021f8eb7d | 69 | float resp_tend = 0; //The remainder of sampling points in the signal |
woodbed | 2:1e0021f8eb7d | 70 | float resp_tstart = 0; //start offset of sampling time |
woodbed | 1:97c5a956a371 | 71 | float resp_t_samplepoint = 0; |
woodbed | 2:1e0021f8eb7d | 72 | float resp_table_dt = resp_period/256; |
woodbed | 1:97c5a956a371 | 73 | float resp_n_samplepoint = 0; |
woodbed | 1:97c5a956a371 | 74 | float resp_v_samplepoint = 0; |
woodbed | 1:97c5a956a371 | 75 | float resp_signal = 0; |
woodbed | 1:97c5a956a371 | 76 | |
woodbed | 1:97c5a956a371 | 77 | //SNORE Paramater |
woodbed | 1:97c5a956a371 | 78 | float snore_period = 1000000*1/snore_freq; //microSec |
woodbed | 2:1e0021f8eb7d | 79 | float snore_n = 0; |
woodbed | 2:1e0021f8eb7d | 80 | float snore_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 2:1e0021f8eb7d | 81 | float snore_tend = 0; //The remainder of sampling points in the signal |
woodbed | 2:1e0021f8eb7d | 82 | float snore_tstart = 0; //start offset of sampling time |
woodbed | 2:1e0021f8eb7d | 83 | float snore_t_samplepoint = 0; |
woodbed | 2:1e0021f8eb7d | 84 | float snore_table_dt = snore_period/256; //2016/12/12 255->256 |
woodbed | 1:97c5a956a371 | 85 | float snore_n_samplepoint = 0; |
woodbed | 1:97c5a956a371 | 86 | float snore_v_samplepoint = 0; |
woodbed | 1:97c5a956a371 | 87 | int snore_cycle = 0; |
woodbed | 1:97c5a956a371 | 88 | float snore_signal = 0; |
woodbed | 1:97c5a956a371 | 89 | |
woodbed | 1:97c5a956a371 | 90 | int pwidth_1 = 0; |
woodbed | 1:97c5a956a371 | 91 | int pwidth_2 = 0; |
woodbed | 1:97c5a956a371 | 92 | int pwidth_3 = 0; |
woodbed | 1:97c5a956a371 | 93 | |
woodbed | 4:17cfeca0673c | 94 | // Debug use only ---- |
woodbed | 4:17cfeca0673c | 95 | int dbcount = 0; |
woodbed | 4:17cfeca0673c | 96 | |
woodbed | 4:17cfeca0673c | 97 | // End of debug use ---- |
woodbed | 4:17cfeca0673c | 98 | |
woodbed | 1:97c5a956a371 | 99 | //Signal Culcurate |
woodbed | 1:97c5a956a371 | 100 | void signal_culc(){ |
woodbed | 1:97c5a956a371 | 101 | |
woodbed | 1:97c5a956a371 | 102 | //HB section |
woodbed | 1:97c5a956a371 | 103 | //HB_carr |
woodbed | 1:97c5a956a371 | 104 | hb_carr_n_sample = (hb_carr_period - hb_carr_tstart) / sample_dt; |
woodbed | 2:1e0021f8eb7d | 105 | hb_carr_tend = fmod((hb_carr_period - hb_carr_tstart) , sample_dt); |
woodbed | 2:1e0021f8eb7d | 106 | if(hb_carr_tend == 0){ |
woodbed | 2:1e0021f8eb7d | 107 | hb_carr_n_sample = hb_carr_n_sample-1; |
woodbed | 2:1e0021f8eb7d | 108 | } |
woodbed | 1:97c5a956a371 | 109 | hb_carr_t_samplepoint = hb_carr_tstart + sample_dt * hb_carr_n; //time of sampling point |
woodbed | 1:97c5a956a371 | 110 | hb_carr_n_samplepoint = hb_carr_t_samplepoint / hb_carr_table_dt; |
woodbed | 2:1e0021f8eb7d | 111 | if(hb_carr_n_samplepoint >= 256){ |
woodbed | 2:1e0021f8eb7d | 112 | hb_carr_n_samplepoint = 0; |
woodbed | 2:1e0021f8eb7d | 113 | } |
woodbed | 2:1e0021f8eb7d | 114 | hb_carr_v_samplepoint = coswave[(int)hb_carr_n_samplepoint]; |
woodbed | 2:1e0021f8eb7d | 115 | if(hb_carr_n > (int)hb_carr_n_sample) { |
woodbed | 2:1e0021f8eb7d | 116 | hb_carr_n =0; |
woodbed | 1:97c5a956a371 | 117 | hb_carr_tstart = sample_dt - hb_carr_tend; |
woodbed | 1:97c5a956a371 | 118 | } |
woodbed | 1:97c5a956a371 | 119 | else { |
woodbed | 1:97c5a956a371 | 120 | hb_carr_n++; |
woodbed | 1:97c5a956a371 | 121 | } |
woodbed | 1:97c5a956a371 | 122 | //HB_mod |
woodbed | 4:17cfeca0673c | 123 | //A(1+macosωmt)*cosωct Acosωct = fcarr(t),ma = modulation ratio, |
woodbed | 4:17cfeca0673c | 124 | hb_mod_n_sample = (hb_mod_period - hb_mod_tstart) / sample_dt; |
woodbed | 4:17cfeca0673c | 125 | hb_mod_tend = fmod((hb_mod_period - hb_mod_tstart) , sample_dt); |
woodbed | 4:17cfeca0673c | 126 | if(hb_mod_tend == 0){ |
woodbed | 4:17cfeca0673c | 127 | hb_mod_n_sample = hb_mod_n_sample-1; |
woodbed | 2:1e0021f8eb7d | 128 | } |
woodbed | 4:17cfeca0673c | 129 | hb_mod_t_samplepoint = hb_mod_tstart + sample_dt * hb_mod_n; //time of sampling point |
woodbed | 4:17cfeca0673c | 130 | hb_mod_n_samplepoint = hb_mod_t_samplepoint / hb_mod_table_dt; |
woodbed | 4:17cfeca0673c | 131 | if(hb_mod_n_samplepoint >= 256){ |
woodbed | 4:17cfeca0673c | 132 | hb_mod_n_samplepoint = 0; |
woodbed | 2:1e0021f8eb7d | 133 | } |
woodbed | 4:17cfeca0673c | 134 | hb_mod_v_samplepoint = hb_mod_ra*(coswave[(int)hb_mod_n_samplepoint]); |
woodbed | 4:17cfeca0673c | 135 | if(hb_mod_n > (int)hb_mod_n_sample) { |
woodbed | 4:17cfeca0673c | 136 | hb_mod_n =0; |
woodbed | 4:17cfeca0673c | 137 | hb_mod_tstart = sample_dt - hb_mod_tend; |
woodbed | 1:97c5a956a371 | 138 | } |
woodbed | 1:97c5a956a371 | 139 | else { |
woodbed | 4:17cfeca0673c | 140 | hb_mod_n++; |
woodbed | 1:97c5a956a371 | 141 | } |
woodbed | 1:97c5a956a371 | 142 | |
woodbed | 4:17cfeca0673c | 143 | //HB_AM MOD |
woodbed | 4:17cfeca0673c | 144 | |
woodbed | 4:17cfeca0673c | 145 | hb_signal = 0.5*(hb_carr_level*(1+hb_mod_v_samplepoint)*hb_carr_v_samplepoint)+0.5;//0-1 -> 0V-3.3V |
woodbed | 4:17cfeca0673c | 146 | |
woodbed | 4:17cfeca0673c | 147 | //debug part |
woodbed | 4:17cfeca0673c | 148 | /* |
woodbed | 4:17cfeca0673c | 149 | if(dbcount>=100){ |
woodbed | 4:17cfeca0673c | 150 | pc.printf("%f, %f, %f\n",hb_signal,mod_signal,hb_mod_v_samplepoint); |
woodbed | 4:17cfeca0673c | 151 | dbcount = 0; |
woodbed | 4:17cfeca0673c | 152 | } |
woodbed | 4:17cfeca0673c | 153 | dbcount++; |
woodbed | 4:17cfeca0673c | 154 | */ |
woodbed | 4:17cfeca0673c | 155 | //end debug part |
woodbed | 4:17cfeca0673c | 156 | |
woodbed | 1:97c5a956a371 | 157 | //RESP section |
woodbed | 1:97c5a956a371 | 158 | resp_n_sample = (resp_period - resp_tstart) / sample_dt; |
woodbed | 1:97c5a956a371 | 159 | resp_tend = fmod((resp_period - resp_tstart) , sample_dt); |
woodbed | 2:1e0021f8eb7d | 160 | if(resp_tend == 0){ |
woodbed | 2:1e0021f8eb7d | 161 | resp_n_sample = resp_n_sample-1; |
woodbed | 2:1e0021f8eb7d | 162 | } |
woodbed | 1:97c5a956a371 | 163 | resp_t_samplepoint = resp_tstart + sample_dt * resp_n; //time of sampling point |
woodbed | 1:97c5a956a371 | 164 | resp_n_samplepoint = resp_t_samplepoint / resp_table_dt; |
woodbed | 2:1e0021f8eb7d | 165 | if(resp_n_samplepoint >= 256){ |
woodbed | 2:1e0021f8eb7d | 166 | resp_n_samplepoint = 0; |
woodbed | 2:1e0021f8eb7d | 167 | } |
woodbed | 2:1e0021f8eb7d | 168 | resp_v_samplepoint = resp_level*(coswave[(int)resp_n_samplepoint]); |
woodbed | 4:17cfeca0673c | 169 | resp_signal = 0.5*resp_v_samplepoint+0.5; //0-1 -> 0V-3.3V |
woodbed | 2:1e0021f8eb7d | 170 | if(resp_n > (int)resp_n_sample) { |
woodbed | 2:1e0021f8eb7d | 171 | resp_n =0; |
woodbed | 1:97c5a956a371 | 172 | resp_tstart = sample_dt - resp_tend; |
woodbed | 1:97c5a956a371 | 173 | } |
woodbed | 1:97c5a956a371 | 174 | else { |
woodbed | 1:97c5a956a371 | 175 | resp_n++; |
woodbed | 1:97c5a956a371 | 176 | } |
woodbed | 1:97c5a956a371 | 177 | |
woodbed | 1:97c5a956a371 | 178 | //SNORE section |
woodbed | 1:97c5a956a371 | 179 | snore_n_sample = (snore_period - snore_tstart) / sample_dt; // |
woodbed | 1:97c5a956a371 | 180 | snore_tend = fmod((snore_period - snore_tstart) , sample_dt); |
woodbed | 1:97c5a956a371 | 181 | if(snore_tend == 0){ |
woodbed | 1:97c5a956a371 | 182 | snore_n_sample = snore_n_sample-1; |
woodbed | 1:97c5a956a371 | 183 | } |
woodbed | 1:97c5a956a371 | 184 | else { |
woodbed | 1:97c5a956a371 | 185 | } |
woodbed | 1:97c5a956a371 | 186 | snore_t_samplepoint = snore_tstart + sample_dt * snore_n; //time of sampling point |
woodbed | 1:97c5a956a371 | 187 | snore_n_samplepoint = snore_t_samplepoint / snore_table_dt; |
woodbed | 2:1e0021f8eb7d | 188 | if(snore_n_samplepoint >= 256){ |
woodbed | 2:1e0021f8eb7d | 189 | snore_n_samplepoint = 0; |
woodbed | 2:1e0021f8eb7d | 190 | } |
woodbed | 2:1e0021f8eb7d | 191 | snore_v_samplepoint = snore_level*(coswave[(int)snore_n_samplepoint]); |
woodbed | 2:1e0021f8eb7d | 192 | if(snore_n > (int)snore_n_sample) { |
woodbed | 1:97c5a956a371 | 193 | snore_n =0; //2016/12/12 1->0 |
woodbed | 1:97c5a956a371 | 194 | snore_tstart = sample_dt - snore_tend; |
woodbed | 1:97c5a956a371 | 195 | } |
woodbed | 1:97c5a956a371 | 196 | else { |
woodbed | 1:97c5a956a371 | 197 | snore_n++; |
woodbed | 1:97c5a956a371 | 198 | } |
woodbed | 1:97c5a956a371 | 199 | if(snore_onoff==0){ |
woodbed | 1:97c5a956a371 | 200 | } |
woodbed | 1:97c5a956a371 | 201 | else if(snore_onoff==1){ |
woodbed | 1:97c5a956a371 | 202 | if (snore_cycle <= snore_oncycle) { |
woodbed | 1:97c5a956a371 | 203 | snore_cycle++; |
woodbed | 1:97c5a956a371 | 204 | } |
woodbed | 1:97c5a956a371 | 205 | else if (snore_cycle>snore_oncycle && snore_cycle <= snore_allcycle){ |
woodbed | 1:97c5a956a371 | 206 | snore_v_samplepoint = 0; |
woodbed | 1:97c5a956a371 | 207 | snore_cycle++; |
woodbed | 1:97c5a956a371 | 208 | } |
woodbed | 1:97c5a956a371 | 209 | else { |
woodbed | 1:97c5a956a371 | 210 | snore_cycle = 0; |
woodbed | 1:97c5a956a371 | 211 | } |
woodbed | 1:97c5a956a371 | 212 | } |
woodbed | 4:17cfeca0673c | 213 | snore_signal = 0.5*snore_v_samplepoint+0.5; //0-1 -> 0V-3.3V |
woodbed | 1:97c5a956a371 | 214 | |
woodbed | 1:97c5a956a371 | 215 | //PWM Output Pulse width |
woodbed | 1:97c5a956a371 | 216 | pwidth_1 = hb_signal * sample_dt; |
woodbed | 1:97c5a956a371 | 217 | pwidth_2 = resp_signal * sample_dt; |
woodbed | 1:97c5a956a371 | 218 | pwidth_3 = snore_signal * sample_dt; |
woodbed | 1:97c5a956a371 | 219 | |
woodbed | 1:97c5a956a371 | 220 | signal_1.pulsewidth_us(pwidth_1); |
woodbed | 1:97c5a956a371 | 221 | signal_2.pulsewidth_us(pwidth_2); |
woodbed | 1:97c5a956a371 | 222 | signal_3.pulsewidth_us(pwidth_3); |
woodbed | 1:97c5a956a371 | 223 | } |
woodbed | 1:97c5a956a371 | 224 | |
woodbed | 1:97c5a956a371 | 225 | //チッカー割り込みハンドラ |
woodbed | 1:97c5a956a371 | 226 | void attime(){ |
woodbed | 1:97c5a956a371 | 227 | if(status1==1){ |
woodbed | 1:97c5a956a371 | 228 | ledch1=0; |
woodbed | 1:97c5a956a371 | 229 | signal_culc(); |
woodbed | 1:97c5a956a371 | 230 | } |
woodbed | 1:97c5a956a371 | 231 | else{ |
woodbed | 1:97c5a956a371 | 232 | ledch1=!ledch1; |
woodbed | 1:97c5a956a371 | 233 | } |
woodbed | 1:97c5a956a371 | 234 | } |
woodbed | 1:97c5a956a371 | 235 | |
woodbed | 1:97c5a956a371 | 236 | //Serial 受信割り込みハンドラ |
woodbed | 1:97c5a956a371 | 237 | void isrRx() { |
woodbed | 1:97c5a956a371 | 238 | |
woodbed | 1:97c5a956a371 | 239 | /* UART受信コマンド |
woodbed | 1:97c5a956a371 | 240 | start: 波形出力スタート |
woodbed | 1:97c5a956a371 | 241 | stop: 波形出力ストップ |
woodbed | 1:97c5a956a371 | 242 | St: 割り込み周期[μsec] |
woodbed | 1:97c5a956a371 | 243 | carrf: 脈波AM変調波搬送波周波数[Hz] |
woodbed | 1:97c5a956a371 | 244 | modf: 脈波AM変調波変調周波数[Hz] |
woodbed | 1:97c5a956a371 | 245 | carrl: 脈波振幅 |
woodbed | 1:97c5a956a371 | 246 | modr: 脈波変調波変調率[%] |
woodbed | 1:97c5a956a371 | 247 | respf: 呼吸周波数[Hz] |
woodbed | 1:97c5a956a371 | 248 | respl: 呼吸振幅 |
woodbed | 1:97c5a956a371 | 249 | snorf: 体動・イビキ周波数[Hz] |
woodbed | 1:97c5a956a371 | 250 | snorl: 体動・イビキ振幅 |
woodbed | 1:97c5a956a371 | 251 | snon: 体動・イビキONサイクル |
woodbed | 1:97c5a956a371 | 252 | snall: 体動・イビキALLサイクル |
woodbed | 1:97c5a956a371 | 253 | sncn: 体動・イビキ断続制御 |
woodbed | 1:97c5a956a371 | 254 | */ |
woodbed | 1:97c5a956a371 | 255 | |
woodbed | 1:97c5a956a371 | 256 | char scan[10]; |
woodbed | 1:97c5a956a371 | 257 | float para; |
woodbed | 0:63339e4deacf | 258 | |
woodbed | 2:1e0021f8eb7d | 259 | pc.scanf("%s",scan); // 文字列受信バッファより取り出し |
woodbed | 1:97c5a956a371 | 260 | // pc.printf("read = %s\n",scan); |
woodbed | 1:97c5a956a371 | 261 | |
woodbed | 1:97c5a956a371 | 262 | if(strcmp(scan,"start")==0){ |
woodbed | 1:97c5a956a371 | 263 | pc.printf("go\n"); |
woodbed | 2:1e0021f8eb7d | 264 | status1=1; //波形出力状態へ遷移 |
woodbed | 1:97c5a956a371 | 265 | } |
woodbed | 1:97c5a956a371 | 266 | else if(strcmp(scan,"stop")==0){ |
woodbed | 1:97c5a956a371 | 267 | pc.printf("end\n"); |
woodbed | 2:1e0021f8eb7d | 268 | status1=0; //波形出力停止へ遷移 |
woodbed | 1:97c5a956a371 | 269 | } |
woodbed | 3:2f4d9f3a4618 | 270 | else if(strcmp(scan,"dt")==0){ |
woodbed | 1:97c5a956a371 | 271 | pc.scanf("%f",¶); |
woodbed | 1:97c5a956a371 | 272 | sample_dt = para; |
woodbed | 1:97c5a956a371 | 273 | pc.printf("dt = %f\n",sample_dt); |
woodbed | 1:97c5a956a371 | 274 | } |
woodbed | 1:97c5a956a371 | 275 | else if(strcmp(scan,"carrf")==0){ |
woodbed | 1:97c5a956a371 | 276 | pc.scanf("%f",¶); |
woodbed | 2:1e0021f8eb7d | 277 | hb_carr_freq = para; |
woodbed | 2:1e0021f8eb7d | 278 | hb_carr_period = 1000000*1/hb_carr_freq; //microSec |
woodbed | 2:1e0021f8eb7d | 279 | hb_carr_n = 0; |
woodbed | 2:1e0021f8eb7d | 280 | hb_carr_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 2:1e0021f8eb7d | 281 | hb_carr_tend = 0; //The remainder of sampling points in the signal |
woodbed | 2:1e0021f8eb7d | 282 | hb_carr_tstart = 0; //start offset of sampling time |
woodbed | 2:1e0021f8eb7d | 283 | hb_carr_t_samplepoint = 0; |
woodbed | 2:1e0021f8eb7d | 284 | hb_carr_table_dt = hb_carr_period/256; |
woodbed | 1:97c5a956a371 | 285 | hb_carr_n_samplepoint = 0; |
woodbed | 1:97c5a956a371 | 286 | hb_carr_v_samplepoint = 0; |
woodbed | 1:97c5a956a371 | 287 | pc.printf("carrf = %f\n",hb_carr_table_dt); |
woodbed | 4:17cfeca0673c | 288 | hb_mod_period = 1000000*1/hb_mod_freq; |
woodbed | 4:17cfeca0673c | 289 | hb_mod_n = 0; |
woodbed | 4:17cfeca0673c | 290 | hb_mod_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 4:17cfeca0673c | 291 | hb_mod_tend = 0; //The remainder of sampling points in the signal |
woodbed | 4:17cfeca0673c | 292 | hb_mod_tstart = 0; //start offset of sampling time |
woodbed | 4:17cfeca0673c | 293 | hb_mod_t_samplepoint = 0; |
woodbed | 4:17cfeca0673c | 294 | hb_mod_table_dt = hb_mod_period/256; |
woodbed | 4:17cfeca0673c | 295 | hb_mod_n_samplepoint = 0; |
woodbed | 4:17cfeca0673c | 296 | hb_mod_v_samplepoint = 0; |
woodbed | 1:97c5a956a371 | 297 | } |
woodbed | 1:97c5a956a371 | 298 | else if(strcmp(scan,"modf")==0){ |
woodbed | 1:97c5a956a371 | 299 | pc.scanf("%f",¶); |
woodbed | 2:1e0021f8eb7d | 300 | hb_mod_freq = para; |
woodbed | 4:17cfeca0673c | 301 | hb_mod_period = 1000000*1/hb_mod_freq; |
woodbed | 4:17cfeca0673c | 302 | hb_mod_n = 0; |
woodbed | 4:17cfeca0673c | 303 | hb_mod_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 4:17cfeca0673c | 304 | hb_mod_tend = 0; //The remainder of sampling points in the signal |
woodbed | 4:17cfeca0673c | 305 | hb_mod_tstart = 0; //start offset of sampling time |
woodbed | 4:17cfeca0673c | 306 | hb_mod_t_samplepoint = 0; |
woodbed | 4:17cfeca0673c | 307 | hb_mod_table_dt = hb_mod_period/256; |
woodbed | 4:17cfeca0673c | 308 | hb_mod_n_samplepoint = 0; |
woodbed | 4:17cfeca0673c | 309 | hb_mod_v_samplepoint = 0; |
woodbed | 4:17cfeca0673c | 310 | pc.printf("modf = %f\n",hb_mod_table_dt); |
woodbed | 2:1e0021f8eb7d | 311 | hb_carr_n = 0; |
woodbed | 2:1e0021f8eb7d | 312 | hb_carr_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 2:1e0021f8eb7d | 313 | hb_carr_tend = 0; //The remainder of sampling points in the signal |
woodbed | 2:1e0021f8eb7d | 314 | hb_carr_tstart = 0; //start offset of sampling time |
woodbed | 2:1e0021f8eb7d | 315 | hb_carr_t_samplepoint = 0; |
woodbed | 2:1e0021f8eb7d | 316 | hb_carr_table_dt = hb_carr_period/256; |
woodbed | 2:1e0021f8eb7d | 317 | hb_carr_n_samplepoint = 0; |
woodbed | 2:1e0021f8eb7d | 318 | hb_carr_v_samplepoint = 0; |
woodbed | 1:97c5a956a371 | 319 | } |
woodbed | 1:97c5a956a371 | 320 | else if(strcmp(scan,"carrl")==0){ |
woodbed | 1:97c5a956a371 | 321 | pc.scanf("%f",¶); |
woodbed | 2:1e0021f8eb7d | 322 | hb_carr_level = para; |
woodbed | 1:97c5a956a371 | 323 | pc.printf("carrl = %f\n",hb_carr_level); |
woodbed | 1:97c5a956a371 | 324 | } |
woodbed | 1:97c5a956a371 | 325 | else if(strcmp(scan,"modr")==0){ |
woodbed | 1:97c5a956a371 | 326 | pc.scanf("%f",¶); |
woodbed | 2:1e0021f8eb7d | 327 | hb_mod_ratio = para; |
woodbed | 2:1e0021f8eb7d | 328 | hb_mod_ra = hb_mod_ratio *0.01; |
woodbed | 1:97c5a956a371 | 329 | pc.printf("modr = %f\n",hb_mod_ra); |
woodbed | 1:97c5a956a371 | 330 | } |
woodbed | 1:97c5a956a371 | 331 | else if(strcmp(scan,"respf")==0){ |
woodbed | 1:97c5a956a371 | 332 | pc.scanf("%f",¶); |
woodbed | 2:1e0021f8eb7d | 333 | resp_freq = para; |
woodbed | 2:1e0021f8eb7d | 334 | resp_period = 1000000*1/resp_freq;//microSec |
woodbed | 2:1e0021f8eb7d | 335 | resp_n = 0; |
woodbed | 2:1e0021f8eb7d | 336 | resp_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 2:1e0021f8eb7d | 337 | resp_tend = 0; //The remainder of sampling points in the signal |
woodbed | 2:1e0021f8eb7d | 338 | resp_tstart = 0; //start offset of sampling time |
woodbed | 1:97c5a956a371 | 339 | resp_t_samplepoint = 0; |
woodbed | 2:1e0021f8eb7d | 340 | resp_table_dt = resp_period/256; |
woodbed | 1:97c5a956a371 | 341 | resp_n_samplepoint = 0; |
woodbed | 1:97c5a956a371 | 342 | resp_v_samplepoint = 0; |
woodbed | 1:97c5a956a371 | 343 | pc.printf("respf = %f\n",resp_table_dt); |
woodbed | 1:97c5a956a371 | 344 | } |
woodbed | 1:97c5a956a371 | 345 | else if(strcmp(scan,"respl")==0){ |
woodbed | 1:97c5a956a371 | 346 | pc.scanf("%f",¶); |
woodbed | 2:1e0021f8eb7d | 347 | resp_level = para; |
woodbed | 1:97c5a956a371 | 348 | pc.printf("respl = %f\n",resp_level); |
woodbed | 1:97c5a956a371 | 349 | } |
woodbed | 1:97c5a956a371 | 350 | else if(strcmp(scan,"snorf")==0){ |
woodbed | 1:97c5a956a371 | 351 | pc.scanf("%f",¶); |
woodbed | 2:1e0021f8eb7d | 352 | snore_freq = para; |
woodbed | 1:97c5a956a371 | 353 | snore_period = 1000000*1/snore_freq; //microSec |
woodbed | 2:1e0021f8eb7d | 354 | snore_n = 0; //2016/12/12 1->0 |
woodbed | 2:1e0021f8eb7d | 355 | snore_n_sample = 0; //The maximum number of sampling points in the signal |
woodbed | 2:1e0021f8eb7d | 356 | snore_tend = 0; //The remainder of sampling points in the signal |
woodbed | 2:1e0021f8eb7d | 357 | snore_tstart = 0; //start offset of sampling time |
woodbed | 2:1e0021f8eb7d | 358 | snore_t_samplepoint = 0; |
woodbed | 2:1e0021f8eb7d | 359 | snore_table_dt = snore_period/256; |
woodbed | 1:97c5a956a371 | 360 | snore_n_samplepoint = 0; |
woodbed | 1:97c5a956a371 | 361 | snore_v_samplepoint = 0; |
woodbed | 1:97c5a956a371 | 362 | snore_cycle = 0; |
woodbed | 1:97c5a956a371 | 363 | pc.printf("snorf = %f\n",snore_table_dt); |
woodbed | 1:97c5a956a371 | 364 | } |
woodbed | 1:97c5a956a371 | 365 | else if(strcmp(scan,"snorl")==0){ |
woodbed | 1:97c5a956a371 | 366 | pc.scanf("%f",¶); |
woodbed | 2:1e0021f8eb7d | 367 | snore_level = para; |
woodbed | 1:97c5a956a371 | 368 | pc.printf("snorl = %f\n",snore_level); |
woodbed | 1:97c5a956a371 | 369 | } |
woodbed | 1:97c5a956a371 | 370 | else if(strcmp(scan,"snon")==0){ |
woodbed | 1:97c5a956a371 | 371 | pc.scanf("%f",¶); |
woodbed | 2:1e0021f8eb7d | 372 | snore_oncycle = (int)para; |
woodbed | 1:97c5a956a371 | 373 | pc.printf("snon = %d\n",snore_oncycle); |
woodbed | 1:97c5a956a371 | 374 | } |
woodbed | 1:97c5a956a371 | 375 | else if(strcmp(scan,"snall")==0){ |
woodbed | 1:97c5a956a371 | 376 | pc.scanf("%f",¶); |
woodbed | 2:1e0021f8eb7d | 377 | snore_allcycle = (int)para; |
woodbed | 1:97c5a956a371 | 378 | pc.printf("snall = %d\n",snore_allcycle); |
woodbed | 1:97c5a956a371 | 379 | } |
woodbed | 1:97c5a956a371 | 380 | else if(strcmp(scan,"sncn")==0){ |
woodbed | 1:97c5a956a371 | 381 | pc.scanf("%f",¶); |
woodbed | 2:1e0021f8eb7d | 382 | snore_onoff = (int)para; |
woodbed | 1:97c5a956a371 | 383 | pc.printf("sncn = %d\n",snore_onoff); |
woodbed | 1:97c5a956a371 | 384 | } |
woodbed | 1:97c5a956a371 | 385 | else { |
woodbed | 1:97c5a956a371 | 386 | pc.printf("Command Error\n"); |
woodbed | 1:97c5a956a371 | 387 | } |
woodbed | 1:97c5a956a371 | 388 | } |
woodbed | 0:63339e4deacf | 389 | |
woodbed | 0:63339e4deacf | 390 | int main() { |
woodbed | 0:63339e4deacf | 391 | |
woodbed | 2:1e0021f8eb7d | 392 | //Make cos wave |
woodbed | 0:63339e4deacf | 393 | int i; |
woodbed | 2:1e0021f8eb7d | 394 | for(i=0;i<=255;i++){ |
woodbed | 4:17cfeca0673c | 395 | coswave[i]=cos(2.0*3.1415*i/256); //2017/1/5 0.5*(cos(2.0*3.1415*i/256)); |
woodbed | 0:63339e4deacf | 396 | } |
woodbed | 0:63339e4deacf | 397 | i = 0; |
woodbed | 0:63339e4deacf | 398 | |
woodbed | 2:1e0021f8eb7d | 399 | signal_1.period_us(sample_dt); //Pulse_cycle = 100usec = 10kHz |
woodbed | 1:97c5a956a371 | 400 | signal_2.period_us(sample_dt); |
woodbed | 2:1e0021f8eb7d | 401 | signal_3.period_us(sample_dt); |
woodbed | 0:63339e4deacf | 402 | |
woodbed | 1:97c5a956a371 | 403 | int j; |
woodbed | 1:97c5a956a371 | 404 | j = sample_dt; |
woodbed | 2:1e0021f8eb7d | 405 | timer.attach_us(&attime,j); //⇒UART割り込み”START”に移動 |
woodbed | 0:63339e4deacf | 406 | |
woodbed | 2:1e0021f8eb7d | 407 | pc.attach(isrRx, Serial::RxIrq); // 割込みハンドラ登録 |
woodbed | 1:97c5a956a371 | 408 | NVIC_SetPriority(UART1_IRQn,1); |
woodbed | 0:63339e4deacf | 409 | |
woodbed | 1:97c5a956a371 | 410 | while(1) { |
woodbed | 1:97c5a956a371 | 411 | } |
woodbed | 0:63339e4deacf | 412 | } |