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