Output the angle data of Encoder
Dependencies: AD5754 FatFileSystem Impact_nagano_0630 MSCFileSystem QEI mbed
main.cpp@1:f37787740470, 2016-07-16 (annotated)
- 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?
User | Revision | Line number | New 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 |