Output the angle data of Encoder

Dependencies:   AD5754 FatFileSystem Impact_nagano_0630 MSCFileSystem QEI mbed

Committer:
hikaru24
Date:
Sat Jul 16 00:19:40 2016 +0000
Revision:
1:f37787740470
Parent:
0:27283d71db7d
Child:
2:8b24c7cfc9b2
impact_measurement_0712

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hikaru24 0:27283d71db7d 1 #include "mbed.h"
hikaru24 0:27283d71db7d 2 #include "QEI.h" // for encoder
hikaru24 0:27283d71db7d 3 #include "USBHostMSD.h" // for USB memory
hikaru24 0:27283d71db7d 4 #include "AD5754.h" // for DA converter
hikaru24 0:27283d71db7d 5
hikaru24 0:27283d71db7d 6 #define PIEZO_PERIOD_US 1000 // 1kHz
hikaru24 0:27283d71db7d 7 #define ENCODER_PERIOD_US 1000 // 1kHz
hikaru24 0:27283d71db7d 8 //#define ENCODER_PERIOD_US 100000 // 10Hz
hikaru24 0:27283d71db7d 9 //#define VIBRATOR_PERIOD_US 200 // 5kHz
hikaru24 0:27283d71db7d 10 //#define ACC_PERIOD_US 200 //5kHz
hikaru24 0:27283d71db7d 11
hikaru24 0:27283d71db7d 12 //// State in main phase ////
hikaru24 0:27283d71db7d 13 #define INITIALISATION_STATE 0
hikaru24 0:27283d71db7d 14 #define BEFORE_IMPACT_STATE 1
hikaru24 0:27283d71db7d 15 #define AFTER_IMPACT_STATE 2
hikaru24 0:27283d71db7d 16
hikaru24 0:27283d71db7d 17 #define RECORD_PERIOD 1.0
hikaru24 0:27283d71db7d 18
hikaru24 1:f37787740470 19 #define SAVE_NUMBER 1024 // 5(kHz) * 0.2(s) = 1000
hikaru24 0:27283d71db7d 20
hikaru24 0:27283d71db7d 21 #define AVE_WINDOW 10
hikaru24 0:27283d71db7d 22 #define VEL_WINDOW 10
hikaru24 0:27283d71db7d 23
hikaru24 0:27283d71db7d 24 Serial pc(USBTX, USBRX);
hikaru24 0:27283d71db7d 25
hikaru24 0:27283d71db7d 26 AnalogIn piezo(p19);
hikaru24 0:27283d71db7d 27 QEI encoder(p21, p22, NC, 2000); // encoder
hikaru24 0:27283d71db7d 28 AnalogOut vibrator(p18);
hikaru24 0:27283d71db7d 29 AD5754 dac(p5, NC, p7, p8); // spi_(mosi, miso, sck), nCS_(cs)
hikaru24 0:27283d71db7d 30
hikaru24 0:27283d71db7d 31
hikaru24 0:27283d71db7d 32 Ticker piezo_t;
hikaru24 0:27283d71db7d 33 Ticker encoder_t;
hikaru24 0:27283d71db7d 34 //Ticker vibrator_t;
hikaru24 0:27283d71db7d 35 //Ticker acc_t;
hikaru24 0:27283d71db7d 36
hikaru24 0:27283d71db7d 37 Timer t;
hikaru24 0:27283d71db7d 38
hikaru24 0:27283d71db7d 39 volatile bool piezo_flag = false;
hikaru24 0:27283d71db7d 40 void piezo_interrupt(){
hikaru24 0:27283d71db7d 41 piezo_flag = true;
hikaru24 0:27283d71db7d 42 }
hikaru24 0:27283d71db7d 43
hikaru24 0:27283d71db7d 44 volatile bool encoder_flag = false;
hikaru24 0:27283d71db7d 45 void encoder_interrupt(){
hikaru24 0:27283d71db7d 46 encoder_flag = true;
hikaru24 0:27283d71db7d 47 }
hikaru24 0:27283d71db7d 48
hikaru24 0:27283d71db7d 49 /*
hikaru24 0:27283d71db7d 50 volatile bool vibrator_flag = false;
hikaru24 0:27283d71db7d 51 void vibrator_interrupt(){
hikaru24 0:27283d71db7d 52 vibrator_flag = true;
hikaru24 0:27283d71db7d 53 }
hikaru24 0:27283d71db7d 54 */
hikaru24 0:27283d71db7d 55 /*
hikaru24 0:27283d71db7d 56 volatile bool acc_flag = false;
hikaru24 0:27283d71db7d 57 void acc_interrupt(){
hikaru24 0:27283d71db7d 58 acc_flag = true;
hikaru24 0:27283d71db7d 59 }
hikaru24 0:27283d71db7d 60 */
hikaru24 0:27283d71db7d 61
hikaru24 0:27283d71db7d 62 int main() {
hikaru24 0:27283d71db7d 63
hikaru24 0:27283d71db7d 64 pc.baud(115200);
hikaru24 0:27283d71db7d 65
hikaru24 0:27283d71db7d 66 USBHostMSD msd("usb");
hikaru24 0:27283d71db7d 67
hikaru24 1:f37787740470 68
hikaru24 0:27283d71db7d 69 while(!msd.connect()){
hikaru24 0:27283d71db7d 70 wait(1);
hikaru24 0:27283d71db7d 71 }
hikaru24 0:27283d71db7d 72
hikaru24 0:27283d71db7d 73 piezo_t.attach_us(&piezo_interrupt, PIEZO_PERIOD_US);
hikaru24 0:27283d71db7d 74 encoder_t.attach_us(&encoder_interrupt, ENCODER_PERIOD_US);
hikaru24 0:27283d71db7d 75 //vibrator_t.attach_us(&vibrator_interrupt, VIBRATOR_PERIOD_US);
hikaru24 0:27283d71db7d 76 //acc_t.attach_us(&acc__interrupt, ACC_PERIOD_US);
hikaru24 0:27283d71db7d 77
hikaru24 0:27283d71db7d 78 uint16_t DAdata[3] = {}; // 16bit; 0 ~ 32768 ~ 65535 (-5 ~0 ~ 5(V))
hikaru24 0:27283d71db7d 79 int channel = 0;
hikaru24 0:27283d71db7d 80
hikaru24 0:27283d71db7d 81
hikaru24 0:27283d71db7d 82 bool start_flag = true;
hikaru24 0:27283d71db7d 83 bool main_flag = false;
hikaru24 0:27283d71db7d 84 bool end_flag = false;
hikaru24 0:27283d71db7d 85
hikaru24 0:27283d71db7d 86 short state = INITIALISATION_STATE;
hikaru24 0:27283d71db7d 87
hikaru24 0:27283d71db7d 88 //// Time ////
hikaru24 0:27283d71db7d 89 float start_time;
hikaru24 0:27283d71db7d 90
hikaru24 0:27283d71db7d 91 //// Piezosensor ////
hikaru24 0:27283d71db7d 92 float piezo_val = 0.0;
hikaru24 0:27283d71db7d 93 //float piezo_val_buf[10] = {};
hikaru24 0:27283d71db7d 94
hikaru24 0:27283d71db7d 95 //// Encoder ////
hikaru24 0:27283d71db7d 96 int encoder_cnt = 0;
hikaru24 0:27283d71db7d 97 int encoder_buf[AVE_WINDOW] = {};
hikaru24 0:27283d71db7d 98 int encoder_ave = 0;
hikaru24 0:27283d71db7d 99 int encoder_ave_buf[VEL_WINDOW] = {};
hikaru24 0:27283d71db7d 100 int encoder_vel = 0;
hikaru24 0:27283d71db7d 101
hikaru24 0:27283d71db7d 102 int i = 0;
hikaru24 0:27283d71db7d 103 int j = 0;
hikaru24 0:27283d71db7d 104 int buf[500] = {};
hikaru24 0:27283d71db7d 105 int data = 0;
hikaru24 0:27283d71db7d 106 int ret;
hikaru24 0:27283d71db7d 107
hikaru24 0:27283d71db7d 108 /*
hikaru24 0:27283d71db7d 109 //// Vibrator ////
hikaru24 0:27283d71db7d 110 float vib_cmd = 0.5;
hikaru24 0:27283d71db7d 111 */
hikaru24 0:27283d71db7d 112
hikaru24 0:27283d71db7d 113 //// Accelerometer ////
hikaru24 0:27283d71db7d 114 /*
hikaru24 0:27283d71db7d 115 int acc_val[3] = {};
hikaru24 0:27283d71db7d 116 float acc_fval[3] {};
hikaru24 0:27283d71db7d 117 float acc_fval_xbuf[5] = {};
hikaru24 0:27283d71db7d 118 float acc_fval_ybuf[5] = {};
hikaru24 0:27283d71db7d 119 float acc_fval_zbuf[5] = {};
hikaru24 0:27283d71db7d 120 */
hikaru24 0:27283d71db7d 121
hikaru24 0:27283d71db7d 122 //// Data buff ////
hikaru24 0:27283d71db7d 123 float save_data[SAVE_NUMBER] = {};
hikaru24 0:27283d71db7d 124 int save_cnt;
hikaru24 0:27283d71db7d 125
hikaru24 0:27283d71db7d 126 LocalFileSystem local("local");
hikaru24 0:27283d71db7d 127
hikaru24 0:27283d71db7d 128 //// Option ////
hikaru24 0:27283d71db7d 129 int print_cnt = 0;
hikaru24 0:27283d71db7d 130
hikaru24 0:27283d71db7d 131
hikaru24 0:27283d71db7d 132 // Fix vibrator
hikaru24 0:27283d71db7d 133 vibrator = 0.0;
hikaru24 0:27283d71db7d 134
hikaru24 0:27283d71db7d 135 pc.printf("'S' key: Start state\n\n");
hikaru24 0:27283d71db7d 136 //pc.printf("'E' key: End state\n\n");
hikaru24 0:27283d71db7d 137 wait(1);
hikaru24 0:27283d71db7d 138
hikaru24 0:27283d71db7d 139 dac.rangeSelect();
hikaru24 0:27283d71db7d 140 dac.setPowerControl();
hikaru24 0:27283d71db7d 141
hikaru24 0:27283d71db7d 142
hikaru24 0:27283d71db7d 143 while(start_flag){
hikaru24 0:27283d71db7d 144 if(pc.readable()){
hikaru24 0:27283d71db7d 145 if(pc.getc() == 's'){
hikaru24 0:27283d71db7d 146 start_flag = false;
hikaru24 0:27283d71db7d 147 pc.printf("\nHAPTIC test start\n");
hikaru24 0:27283d71db7d 148
hikaru24 1:f37787740470 149 /*
hikaru24 0:27283d71db7d 150 pc.printf("\nFile reading:\n");
hikaru24 0:27283d71db7d 151 FILE *fp = fopen( "/usb/test.csv", "r");
hikaru24 0:27283d71db7d 152
hikaru24 0:27283d71db7d 153 if ( fp == NULL )
hikaru24 0:27283d71db7d 154 {
hikaru24 0:27283d71db7d 155 error("\nCould not open file\n");
hikaru24 0:27283d71db7d 156 }
hikaru24 1:f37787740470 157 */
hikaru24 0:27283d71db7d 158
hikaru24 0:27283d71db7d 159 /*
hikaru24 0:27283d71db7d 160 while( (ret=fscanf(fp, "%d", &data)) != EOF){
hikaru24 0:27283d71db7d 161 buf[i] = data;
hikaru24 0:27283d71db7d 162 i++;
hikaru24 0:27283d71db7d 163 pc.printf("\nError\n");
hikaru24 0:27283d71db7d 164 }
hikaru24 0:27283d71db7d 165 */
hikaru24 0:27283d71db7d 166
hikaru24 0:27283d71db7d 167
hikaru24 1:f37787740470 168 //fclose(fp);
hikaru24 0:27283d71db7d 169
hikaru24 0:27283d71db7d 170 wait(0.5);
hikaru24 0:27283d71db7d 171 pc.printf("Start initialization\nLift device\n\n");
hikaru24 0:27283d71db7d 172 wait(0.5);
hikaru24 0:27283d71db7d 173 main_flag = true;
hikaru24 0:27283d71db7d 174 }
hikaru24 0:27283d71db7d 175 }
hikaru24 0:27283d71db7d 176 }
hikaru24 0:27283d71db7d 177
hikaru24 0:27283d71db7d 178 t.start();
hikaru24 0:27283d71db7d 179
hikaru24 0:27283d71db7d 180 while(main_flag){
hikaru24 0:27283d71db7d 181 switch(state){
hikaru24 0:27283d71db7d 182 case INITIALISATION_STATE:
hikaru24 0:27283d71db7d 183 if(encoder_flag){
hikaru24 0:27283d71db7d 184 vibrator = 0.5;
hikaru24 0:27283d71db7d 185 encoder_flag = false;
hikaru24 0:27283d71db7d 186 encoder_cnt = encoder.getPulses(); // One of the encoders needs a sign change
hikaru24 0:27283d71db7d 187
hikaru24 0:27283d71db7d 188 encoder_ave = encoder_cnt;
hikaru24 0:27283d71db7d 189 for(int i=0; i<AVE_WINDOW-1; i++){
hikaru24 0:27283d71db7d 190 encoder_buf[i+1] = encoder_buf[i];
hikaru24 0:27283d71db7d 191 encoder_ave += encoder_buf[i];
hikaru24 0:27283d71db7d 192 }
hikaru24 0:27283d71db7d 193 encoder_buf[0] = encoder_cnt;
hikaru24 0:27283d71db7d 194 encoder_ave = encoder_ave/AVE_WINDOW;
hikaru24 0:27283d71db7d 195
hikaru24 1:f37787740470 196 if(encoder_ave < -350){
hikaru24 1:f37787740470 197 state = BEFORE_IMPACT_STATE;
hikaru24 1:f37787740470 198 pc.printf("Finish initialization\n\n");
hikaru24 0:27283d71db7d 199 }
hikaru24 0:27283d71db7d 200
hikaru24 0:27283d71db7d 201
hikaru24 0:27283d71db7d 202 if(print_cnt > 1000000/ENCODER_PERIOD_US){
hikaru24 0:27283d71db7d 203 printf("encoder = %d\n", encoder_ave);
hikaru24 0:27283d71db7d 204 print_cnt = 0;
hikaru24 0:27283d71db7d 205 }
hikaru24 0:27283d71db7d 206 print_cnt++;
hikaru24 0:27283d71db7d 207
hikaru24 0:27283d71db7d 208 ////// DA converter //////
hikaru24 1:f37787740470 209 DAdata[0] = (uint16_t)((int16_t)(32768)); // 16bit; 0 ~ 32768 ~ 65535 (-5 ~0 ~ 5(V))
hikaru24 0:27283d71db7d 210 if(DAdata[0] > 65536){
hikaru24 0:27283d71db7d 211 DAdata[0] = 0;
hikaru24 0:27283d71db7d 212 }
hikaru24 0:27283d71db7d 213 channel = 0;
hikaru24 0:27283d71db7d 214 dac.send(channel, DAdata[0]);
hikaru24 0:27283d71db7d 215 //////
hikaru24 0:27283d71db7d 216
hikaru24 0:27283d71db7d 217 }
hikaru24 0:27283d71db7d 218 break;
hikaru24 0:27283d71db7d 219 case BEFORE_IMPACT_STATE:
hikaru24 0:27283d71db7d 220
hikaru24 0:27283d71db7d 221 if(piezo_flag){
hikaru24 0:27283d71db7d 222 piezo_flag = false;
hikaru24 0:27283d71db7d 223 piezo_val = piezo; // 0.0(0.0V)~ 0.5(1.65V) ~ 1.0(3.3V)
hikaru24 0:27283d71db7d 224 /*
hikaru24 0:27283d71db7d 225 if(print_cnt > 1000000/PIEZO_PERIOD_US){
hikaru24 0:27283d71db7d 226 //printf("piezosensor = %0.3f\n", piezo_val);
hikaru24 0:27283d71db7d 227 //printf("time = %f\n", t.read());
hikaru24 0:27283d71db7d 228 print_cnt = 0;
hikaru24 0:27283d71db7d 229 }
hikaru24 0:27283d71db7d 230 print_cnt++;
hikaru24 0:27283d71db7d 231 */
hikaru24 0:27283d71db7d 232
hikaru24 0:27283d71db7d 233 // Save piezo data in save_data[0] ~ [99]
hikaru24 1:f37787740470 234 /*
hikaru24 0:27283d71db7d 235 save_data[100] = piezo_val;
hikaru24 0:27283d71db7d 236 for(save_cnt=0; save_cnt<100; save_cnt++){
hikaru24 0:27283d71db7d 237 save_data[save_cnt] = save_data[save_cnt+1];
hikaru24 0:27283d71db7d 238 }
hikaru24 1:f37787740470 239 */
hikaru24 0:27283d71db7d 240
hikaru24 0:27283d71db7d 241 }
hikaru24 0:27283d71db7d 242 if(encoder_flag){
hikaru24 0:27283d71db7d 243 encoder_flag = false;
hikaru24 0:27283d71db7d 244 encoder_cnt = encoder.getPulses(); // One of the encoders needs a sign change
hikaru24 0:27283d71db7d 245
hikaru24 1:f37787740470 246
hikaru24 0:27283d71db7d 247 encoder_ave = encoder_cnt;
hikaru24 0:27283d71db7d 248 for(int i=0; i<AVE_WINDOW-1; i++){
hikaru24 0:27283d71db7d 249 encoder_buf[i+1] = encoder_buf[i];
hikaru24 0:27283d71db7d 250 encoder_ave += encoder_buf[i];
hikaru24 0:27283d71db7d 251 }
hikaru24 0:27283d71db7d 252 encoder_buf[0] = encoder_cnt;
hikaru24 0:27283d71db7d 253 encoder_ave = encoder_ave/AVE_WINDOW;
hikaru24 1:f37787740470 254
hikaru24 0:27283d71db7d 255
hikaru24 1:f37787740470 256
hikaru24 1:f37787740470 257 for(int i=VEL_WINDOW-2; i>=0; i--){
hikaru24 0:27283d71db7d 258 encoder_ave_buf[i+1] = encoder_ave_buf[i];
hikaru24 0:27283d71db7d 259 }
hikaru24 0:27283d71db7d 260 encoder_ave_buf[0] = encoder_ave;
hikaru24 0:27283d71db7d 261 encoder_vel = encoder_ave_buf[VEL_WINDOW-1] - encoder_ave_buf[0];
hikaru24 1:f37787740470 262
hikaru24 1:f37787740470 263 if(print_cnt > 1000000/ENCODER_PERIOD_US){
hikaru24 1:f37787740470 264 printf("velocity = %d\n", encoder_vel);
hikaru24 1:f37787740470 265 print_cnt = 0;
hikaru24 1:f37787740470 266 }
hikaru24 1:f37787740470 267 print_cnt++;
hikaru24 0:27283d71db7d 268
hikaru24 0:27283d71db7d 269 //if(encoder_cnt < 1 && encoder_vel >10){
hikaru24 1:f37787740470 270 if(encoder_cnt > -1 && encoder_vel == -16){ //
hikaru24 0:27283d71db7d 271 state = AFTER_IMPACT_STATE;
hikaru24 0:27283d71db7d 272 pc.printf("Collision!!\n\n");
hikaru24 1:f37787740470 273 printf("Collision velocity = %d\n", encoder_vel);
hikaru24 0:27283d71db7d 274 start_time = t.read();
hikaru24 0:27283d71db7d 275 save_cnt = 100;
hikaru24 1:f37787740470 276
hikaru24 1:f37787740470 277 DAdata[0] = (uint16_t)((int16_t)(50000)); // 16bit; 0 ~ 32768 ~ 65535 (-5 ~0 ~ 5(V))
hikaru24 1:f37787740470 278 if(DAdata[0] > 65536){
hikaru24 1:f37787740470 279 DAdata[0] = 0;
hikaru24 1:f37787740470 280 }
hikaru24 1:f37787740470 281 channel = 0;
hikaru24 1:f37787740470 282 dac.send(channel, DAdata[0]);
hikaru24 1:f37787740470 283
hikaru24 0:27283d71db7d 284 }
hikaru24 0:27283d71db7d 285
hikaru24 0:27283d71db7d 286 /*
hikaru24 0:27283d71db7d 287 if(print_cnt > 1000000/ENCODER_PERIOD_US){
hikaru24 0:27283d71db7d 288 printf("encoder = %d\n", encoder_cnt);
hikaru24 0:27283d71db7d 289 print_cnt = 0;
hikaru24 0:27283d71db7d 290 }
hikaru24 0:27283d71db7d 291 print_cnt++;
hikaru24 0:27283d71db7d 292 */
hikaru24 0:27283d71db7d 293 }
hikaru24 0:27283d71db7d 294 break;
hikaru24 0:27283d71db7d 295 case AFTER_IMPACT_STATE:
hikaru24 1:f37787740470 296 DAdata[0] = (uint16_t)((int16_t)(50000)); // 16bit; 0 ~ 32768 ~ 65535 (-5 ~0 ~ 5(V))
hikaru24 1:f37787740470 297 if(DAdata[0] > 65536){
hikaru24 1:f37787740470 298 DAdata[0] = 0;
hikaru24 0:27283d71db7d 299 }
hikaru24 1:f37787740470 300 channel = 0;
hikaru24 1:f37787740470 301 dac.send(channel, DAdata[0]);
hikaru24 0:27283d71db7d 302
hikaru24 0:27283d71db7d 303 /*
hikaru24 0:27283d71db7d 304 if(vibrator_flag){
hikaru24 0:27283d71db7d 305 vibrator_flag = false;
hikaru24 0:27283d71db7d 306 //vibrator = vib_cmd;
hikaru24 0:27283d71db7d 307 }
hikaru24 0:27283d71db7d 308 */
hikaru24 1:f37787740470 309
hikaru24 1:f37787740470 310 pc.printf("'R' key: Restart\n\n");
hikaru24 1:f37787740470 311 while(state == AFTER_IMPACT_STATE) {
hikaru24 1:f37787740470 312 if(pc.readable()){
hikaru24 1:f37787740470 313 if(pc.getc() == 'r'){
hikaru24 1:f37787740470 314 state = INITIALISATION_STATE;
hikaru24 1:f37787740470 315 }
hikaru24 1:f37787740470 316 }
hikaru24 1:f37787740470 317 }
hikaru24 0:27283d71db7d 318 break;
hikaru24 0:27283d71db7d 319 default:
hikaru24 0:27283d71db7d 320 state = INITIALISATION_STATE;
hikaru24 0:27283d71db7d 321 break;
hikaru24 0:27283d71db7d 322 }
hikaru24 0:27283d71db7d 323
hikaru24 0:27283d71db7d 324 /*
hikaru24 0:27283d71db7d 325 if(acc_flag){
hikaru24 0:27283d71db7d 326 acc_flag = false;
hikaru24 0:27283d71db7d 327 accelerometer.getOutput(acc_val);
hikaru24 0:27283d71db7d 328 acc_fval[0] = (float)(int16_t)acc_val[0];
hikaru24 0:27283d71db7d 329 acc_fval[1] = (float)(int16_t)acc_val[1];
hikaru24 0:27283d71db7d 330 acc_fval[2] = (float)(int16_t)acc_val[2];
hikaru24 0:27283d71db7d 331 //printf("x = %6.2f y = %6.2f z = %6.2f\n", acc_fval[0]*200/4096, acc_fval[1]*200/4096, acc_fval[2]*200/4096);
hikaru24 0:27283d71db7d 332 }
hikaru24 0:27283d71db7d 333 */
hikaru24 0:27283d71db7d 334
hikaru24 0:27283d71db7d 335 if(pc.readable()){
hikaru24 0:27283d71db7d 336 if(pc.getc() == 'e'){
hikaru24 0:27283d71db7d 337 main_flag = false;
hikaru24 0:27283d71db7d 338 end_flag = true;
hikaru24 0:27283d71db7d 339 }
hikaru24 0:27283d71db7d 340 }
hikaru24 0:27283d71db7d 341
hikaru24 0:27283d71db7d 342 }
hikaru24 0:27283d71db7d 343 pc.printf("HAPTIC test stop\n\n\n");
hikaru24 0:27283d71db7d 344 wait(1);
hikaru24 0:27283d71db7d 345
hikaru24 0:27283d71db7d 346 while(end_flag){
hikaru24 1:f37787740470 347
hikaru24 0:27283d71db7d 348 FILE *fp;
hikaru24 1:f37787740470 349 fp = fopen("/usb/test.csv", "w");
hikaru24 0:27283d71db7d 350 if(fp == NULL){
hikaru24 0:27283d71db7d 351 error("Could not open file for write\n");
hikaru24 0:27283d71db7d 352 }
hikaru24 0:27283d71db7d 353 else{
hikaru24 0:27283d71db7d 354 for(int i=0; i<SAVE_NUMBER-1; i++){
hikaru24 0:27283d71db7d 355 fprintf(fp,"%f\n",save_data[i]);
hikaru24 0:27283d71db7d 356 }
hikaru24 0:27283d71db7d 357 fclose(fp);
hikaru24 0:27283d71db7d 358 }
hikaru24 1:f37787740470 359
hikaru24 0:27283d71db7d 360 end_flag = false;
hikaru24 0:27283d71db7d 361 }
hikaru24 0:27283d71db7d 362 printf("END Haptic test\n");
hikaru24 0:27283d71db7d 363 }
hikaru24 0:27283d71db7d 364
hikaru24 0:27283d71db7d 365