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