UART control , PWM signal output 3ch

Dependencies:   mbed

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?

UserRevisionLine numberNew 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",&para);
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",&para);
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",&para);
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",&para);
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",&para);
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",&para);
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",&para);
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",&para);
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",&para);
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",&para);
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",&para);
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",&para);
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 }