Output the angle data of Encoder

Dependencies:   AD5754 FatFileSystem Impact_nagano_0630 MSCFileSystem QEI mbed

Files at this revision

API Documentation at this revision

Comitter:
hikaru24
Date:
Sat Jul 16 00:19:40 2016 +0000
Parent:
0:27283d71db7d
Child:
2:8b24c7cfc9b2
Commit message:
impact_measurement_0712

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Sat Jul 02 11:03:56 2016 +0000
+++ b/main.cpp	Sat Jul 16 00:19:40 2016 +0000
@@ -16,7 +16,7 @@
 
 #define RECORD_PERIOD 1.0
 
-#define SAVE_NUMBER 2048
+#define SAVE_NUMBER 1024 // 5(kHz) * 0.2(s) = 1000
 
 #define AVE_WINDOW 10
 #define VEL_WINDOW 10
@@ -65,6 +65,7 @@
     
     USBHostMSD msd("usb");
     
+    
     while(!msd.connect()){
         wait(1);
     }
@@ -145,6 +146,7 @@
                 start_flag = false;
                 pc.printf("\nHAPTIC test start\n");
                 
+                /*
                 pc.printf("\nFile reading:\n");
                 FILE *fp = fopen( "/usb/test.csv", "r");
                 
@@ -152,6 +154,7 @@
                 {
                     error("\nCould not open file\n");
                 }
+                */
                 
                 /*
                 while( (ret=fscanf(fp, "%d", &data)) != EOF){
@@ -162,7 +165,7 @@
                 */
                 
                 
-                fclose(fp); 
+                //fclose(fp); 
                 
                 wait(0.5);
                 pc.printf("Start initialization\nLift device\n\n");
@@ -190,9 +193,9 @@
                     encoder_buf[0] = encoder_cnt;
                     encoder_ave = encoder_ave/AVE_WINDOW;
                     
-                    if(encoder_ave > 600){
-                        //state = BEFORE_IMPACT_STATE;
-                        //pc.printf("Finish initialization\n\n");
+                    if(encoder_ave < -350){
+                        state = BEFORE_IMPACT_STATE;
+                        pc.printf("Finish initialization\n\n");
                     }
                     
                     
@@ -203,7 +206,7 @@
                     print_cnt++;
                     
                     ////// DA converter //////
-                    DAdata[0] = (uint16_t)((int16_t)(65535)); // 16bit; 0 ~ 32768 ~ 65535 (-5 ~0 ~ 5(V))
+                    DAdata[0] = (uint16_t)((int16_t)(32768)); // 16bit; 0 ~ 32768 ~ 65535 (-5 ~0 ~ 5(V))
                     if(DAdata[0] > 65536){
                         DAdata[0] = 0;
                     }
@@ -228,17 +231,19 @@
                     */
                     
                     // Save piezo data in save_data[0] ~ [99]
+                    /*
                     save_data[100] = piezo_val;
                     for(save_cnt=0; save_cnt<100; save_cnt++){
                         save_data[save_cnt] = save_data[save_cnt+1];
                     }
+                    */
                     
                 }
                 if(encoder_flag){
                     encoder_flag = false;
                     encoder_cnt = encoder.getPulses();  // One of the encoders needs a sign change
                     
-                    /*
+                    
                     encoder_ave = encoder_cnt;
                     for(int i=0; i<AVE_WINDOW-1; i++){
                         encoder_buf[i+1] = encoder_buf[i];
@@ -246,22 +251,36 @@
                     }
                     encoder_buf[0] = encoder_cnt;
                     encoder_ave = encoder_ave/AVE_WINDOW;
-                    */
+                    
                     
-                    /*
-                    for(int i=0; i<VEL_WINDOW-1; i++){
+                    
+                    for(int i=VEL_WINDOW-2; i>=0; i--){
                         encoder_ave_buf[i+1] = encoder_ave_buf[i];
                     }
                     encoder_ave_buf[0] = encoder_ave;
                     encoder_vel = encoder_ave_buf[VEL_WINDOW-1] - encoder_ave_buf[0];
-                    */
+                    
+                    if(print_cnt > 1000000/ENCODER_PERIOD_US){
+                        printf("velocity = %d\n", encoder_vel);
+                        print_cnt = 0;
+                    }
+                    print_cnt++;
                     
                     //if(encoder_cnt < 1 && encoder_vel >10){
-                    if(encoder_cnt < 1){
+                    if(encoder_cnt > -1 && encoder_vel == -16){ // 
                         state = AFTER_IMPACT_STATE;
                         pc.printf("Collision!!\n\n");
+                        printf("Collision velocity = %d\n", encoder_vel);
                         start_time = t.read();
                         save_cnt = 100;
+                        
+                        DAdata[0] = (uint16_t)((int16_t)(50000)); // 16bit; 0 ~ 32768 ~ 65535 (-5 ~0 ~ 5(V))
+                        if(DAdata[0] > 65536){
+                            DAdata[0] = 0;
+                        }
+                        channel = 0;
+                        dac.send(channel, DAdata[0]);
+                    
                     }
                     
                     /*
@@ -274,35 +293,28 @@
                 }
                 break;
             case AFTER_IMPACT_STATE:
-                if(t.read() > start_time + RECORD_PERIOD){
-                    main_flag = false;
-                    end_flag = true;
+                DAdata[0] = (uint16_t)((int16_t)(50000)); // 16bit; 0 ~ 32768 ~ 65535 (-5 ~0 ~ 5(V))
+                if(DAdata[0] > 65536){
+                    DAdata[0] = 0;
                 }
-                if(piezo_flag){
-                    piezo_flag = false;
-                    piezo_val = piezo; // 0.0(0.0V)~ 0.5(1.65V) ~ 1.0(3.3V)
-                    /*
-                    if(print_cnt > 1000000/PIEZO_PERIOD_US){
-                        //printf("piezosensor = %0.3f\n", piezo_val);
-                        //printf("time = %f\n", t.read());
-                        print_cnt = 0;
-                    }
-                    print_cnt++;
-                    */
+                channel = 0;
+                dac.send(channel, DAdata[0]);
                     
-                    // Save piezo data in save_data[100] ~ [2047]
-                    if(save_cnt < SAVE_NUMBER){
-                        save_data[save_cnt] = piezo_val;
-                        save_cnt++;
-                    }
-                    
-                }
                 /*
                 if(vibrator_flag){
                     vibrator_flag = false;
                     //vibrator = vib_cmd;
                 }
                 */
+                
+                pc.printf("'R' key: Restart\n\n");
+                while(state == AFTER_IMPACT_STATE) {
+                    if(pc.readable()){
+                        if(pc.getc() == 'r'){
+                            state = INITIALISATION_STATE;
+                        }
+                    }
+                }
                 break;
             default:
                 state = INITIALISATION_STATE;
@@ -332,9 +344,9 @@
     wait(1);
     
     while(end_flag){
-        /*
+        
         FILE *fp;
-        fp = fopen("/local/hap_test.csv", "w"); 
+        fp = fopen("/usb/test.csv", "w"); 
         if(fp == NULL){
             error("Could not open file for write\n");
         }
@@ -344,7 +356,7 @@
             }
             fclose(fp);
         }
-        */
+        
         end_flag = false;
     }
     printf("END Haptic test\n");