駆動信号発生器用プログラム

Dependencies:   mbed

Committer:
woodbed
Date:
Fri Mar 24 04:42:17 2017 +0000
Revision:
0:1f4efca8f7dd
???????????

Who changed what in which revision?

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