jack zen / Mbed 2 deprecated ADXL345Test_for_motor_test

Dependencies:   mbed

Fork of ADXL345Test_for_motortest by jack zen

Files at this revision

API Documentation at this revision

Comitter:
jack__zen
Date:
Tue Sep 05 01:48:26 2017 +0000
Parent:
4:f5a78245f2d0
Commit message:
ADXL345 Test for motor

Changed in this revision

TM1638.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TM1638.lib	Tue Sep 05 01:48:26 2017 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/jack__zen/code/TM1638_for_motor/#4c879f562e2a
--- a/main.cpp	Tue Aug 29 09:18:15 2017 +0000
+++ b/main.cpp	Tue Sep 05 01:48:26 2017 +0000
@@ -1,8 +1,110 @@
 #include "ADXL345_I2C.h"
+#include "TM1638.h"
+#include "mbed.h"
+#if(1)
+#include "Font_7Seg.h"
 
+// DisplayData_t size is 16 bytes (8 Grids @ 10 Segments) 
+
+TM1638::DisplayData_t all_str   = {0xFF,0x00, 0xFF,0x03, 0xFF,0x03, 0xFF,0x03, 0xFF,0x03, 0xFF,0x03, 0xFF,0x03, 0xFF,0x03};  
+TM1638::DisplayData_t cls_str   = {0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00};
+TM1638::DisplayData_t hello_str = {C7_H,0x00, C7_E,0x00, C7_L,0x00, C7_L,0x00, C7_O,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00};
+TM1638::DisplayData_t ledx[]     = {
+                                    {C7_R,0x00, C7_A,0x00, C7_W,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_X,0x00},
+                                    {C7_M,0x02, C7_E,0x00, C7_A,0x00, C7_N,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_X,0x00},
+                                    {C7_S,0x00, C7_U,0x02, C7_M,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_X,0x00},
+                                    {C7_S,0x00, C7_T,0x00, C7_D,0x02, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_X,0x00},
+                                    {C7_1,0x00, C7_I,0x00, C7_O,0x00, 0x00,0x02, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_X,0x00},
+                                    {C7_2,0x00, C7_I,0x00, C7_O,0x00, 0x00,0x00, 0x00,0x02, 0x00,0x00, 0x00,0x00, C7_X,0x00},
+                                    {C7_3,0x00, C7_I,0x00, C7_O,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x02, 0x00,0x00, C7_X,0x00},
+                                    {C7_1,0x00, C7_D,0x00, C7_O,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x02, C7_X,0x00},
+                                    {C7_2,0x00, C7_D,0x00, C7_O,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_X,0x02},
+                                  };
+TM1638::DisplayData_t ledy[]     = {
+                                    {C7_R,0x00, C7_A,0x00, C7_W,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_Y,0x00},
+                                    {C7_M,0x02, C7_E,0x00, C7_A,0x00, C7_N,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_Y,0x00},
+                                    {C7_S,0x00, C7_U,0x02, C7_M,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_Y,0x00},
+                                    {C7_S,0x00, C7_T,0x00, C7_D,0x02, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_Y,0x00},
+                                    {C7_1,0x00, C7_I,0x00, C7_O,0x00, 0x00,0x02, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_Y,0x00},
+                                    {C7_2,0x00, C7_I,0x00, C7_O,0x00, 0x00,0x00, 0x00,0x02, 0x00,0x00, 0x00,0x00, C7_Y,0x00},
+                                    {C7_3,0x00, C7_I,0x00, C7_O,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x02, 0x00,0x00, C7_Y,0x00},
+                                    {C7_1,0x00, C7_D,0x00, C7_O,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x02, C7_Y,0x00},
+                                    {C7_2,0x00, C7_D,0x00, C7_O,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_Y,0x02},
+                                  };
+TM1638::DisplayData_t ledz[]     = {
+                                    {C7_R,0x00, C7_A,0x00, C7_W,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_Z,0x00},
+                                    {C7_M,0x02, C7_E,0x00, C7_A,0x00, C7_N,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_Z,0x00},
+                                    {C7_S,0x00, C7_U,0x02, C7_M,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_Z,0x00},
+                                    {C7_S,0x00, C7_T,0x00, C7_D,0x02, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_Z,0x00},
+                                    {C7_1,0x00, C7_I,0x00, C7_O,0x00, 0x00,0x02, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_Z,0x00},
+                                    {C7_2,0x00, C7_I,0x00, C7_O,0x00, 0x00,0x00, 0x00,0x02, 0x00,0x00, 0x00,0x00, C7_Z,0x00},
+                                    {C7_3,0x00, C7_I,0x00, C7_O,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x02, 0x00,0x00, C7_Z,0x00},
+                                    {C7_1,0x00, C7_D,0x00, C7_O,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x02, C7_Z,0x00},
+                                    {C7_2,0x00, C7_D,0x00, C7_O,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_Z,0x02},
+                                  };
+                                
+TM1638::DisplayData_t animate[] = {
+                                    {S7_A,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00},
+                                    {0x00,0x00, S7_A,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00},
+                                    {0x00,0x00, 0x00,0x00, S7_A,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00},
+                                    {0x00,0x00, 0x00,0x00, 0x00,0x00, S7_A,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00},
+                                    {0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, S7_A,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00},
+                                    {0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, S7_A,0x00, 0x00,0x00, 0x00,0x00},
+                                    {0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, S7_A,0x00, 0x00,0x00},
+                                    {0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, S7_A,0x00},
+                                                                                                            
+                                    {0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, S7_B,0x00},
+                                    {0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, S7_C,0x00},
+
+                                    {0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, S7_D,0x00},
+                                    {0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, S7_D,0x00, 0x00,0x00},
+                                    {0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, S7_D,0x00, 0x00,0x00, 0x00,0x00},
+                                    {0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, S7_D,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00},
+                                    {0x00,0x00, 0x00,0x00, 0x00,0x00, S7_D,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00},
+                                    {0x00,0x00, 0x00,0x00, S7_D,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00},
+                                    {0x00,0x00, S7_D,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00},
+                                    {S7_D,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00},
+
+                                    {S7_E,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00},
+                                    {S7_F,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00},
+                                  }; 
+//TM1638::DisplayData_t axis[] =    {
+//                                    {0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_X,0x00},
+//                                    {0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_Y,0x00},
+//                                    {0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, C7_Z,0x00},
+//                                  }; 
+
+//TM1638::DisplayData_t axis1[] =    {
+//                                    {C7_1,0x00, C7_X,0x00, 0x00,0x00, 0x00,0x00 ,C7_2,0x00, C7_X,0x00, 0x00,0x00, 0x00,0x00 },
+//                                    {C7_1,0x00, C7_Y,0x00, 0x00,0x00, 0x00,0x00 ,C7_2,0x00, C7_X,0x00, 0x00,0x00, 0x00,0x00 },
+//                                    {C7_1,0x00, C7_Z,0x00, 0x00,0x00, 0x00,0x00 ,C7_2,0x00, C7_X,0x00, 0x00,0x00, 0x00,0x00 },                                   
+//                                  }; 
+//TM1638::DisplayData_t axis2[] =    {
+//                                    {C7_1,0x00, C7_X,0x00, 0x00,0x00, 0x00,0x00 ,C7_2,0x00, C7_Y,0x00, 0x00,0x00, 0x00,0x00 },
+//                                    {C7_1,0x00, C7_Y,0x00, 0x00,0x00, 0x00,0x00 ,C7_2,0x00, C7_Y,0x00, 0x00,0x00, 0x00,0x00 },
+//                                    {C7_1,0x00, C7_Z,0x00, 0x00,0x00, 0x00,0x00 ,C7_2,0x00, C7_Y,0x00, 0x00,0x00, 0x00,0x00 },
+//                                  };     
+//TM1638::DisplayData_t axis3[] =    {
+//                                    {C7_1,0x00, C7_X,0x00, 0x00,0x00, 0x00,0x00 ,C7_2,0x00, C7_Z,0x00, 0x00,0x00, 0x00,0x00 },
+//                                    {C7_1,0x00, C7_Y,0x00, 0x00,0x00, 0x00,0x00 ,C7_2,0x00, C7_Z,0x00, 0x00,0x00, 0x00,0x00 },
+//                                    {C7_1,0x00, C7_Z,0x00, 0x00,0x00, 0x00,0x00 ,C7_2,0x00, C7_Z,0x00, 0x00,0x00, 0x00,0x00 },
+//                                  };                               
+
+                      
+// KeyData_t size is 4 bytes  
+TM1638::KeyData_t keydata; 
+
+//TM1638_LEDKEY8 declaration
+TM1638_LEDKEY8 LEDKEY8(PA_7,PA_6,PB_3, PD_14);
+
+
+
+#endif
  ADXL345_I2C accelerometer(I2C_SDA, I2C_SCL);
  Serial pc(USBTX, USBRX);
- 
+ AnalogOut AO1(PA_4),AO2(PA_5);
+ DigitalOut DO1(PG_0),DO2(PE_0);
+ DigitalIn DI(PG_1);
  class RangeMapper
  {
      /*
@@ -12,16 +114,23 @@
      protected: 
      double _ratio;
      double _offset;
+     double _outrange;
      public:
      RangeMapper(double x_min, double x_max, double y_min, double y_max)
       {
           _ratio = (y_max - y_min) / (x_max - x_min);
           _offset = y_min - x_min * _ratio; 
+          _outrange = y_max - y_min; 
       };
      ~RangeMapper(){};
      double getOutput(double x_input)
         {return x_input * _ratio + _offset;};
+     void zoom(float ratio)
+        {_ratio *=  ratio;};
+     void shift(float ratio)
+        {_offset +=  _outrange * ratio ; } ;
  };
+ 
 
  
  class DataProcess  
@@ -41,10 +150,11 @@
      int64_t _preData;  
      int64_t _dif1; //1 order differentiation
      int64_t _dif2; //2 order differentiation
+     double _absolute;
      public:
      DataProcess(): 
         _summary(0), _squardsum(0), _numbers(0), _max(0), _min(0),  
-        _itg1(0), _itg2(0), _itg3(0), _preData(0), _dif1(0), _dif2(0) {};
+        _itg1(0), _itg2(0), _itg3(0), _preData(0), _dif1(0), _dif2(0) ,_absolute(0){};
      ~DataProcess() {}; 
      void putData(int64_t x) {
          int64_t temp;
@@ -53,13 +163,15 @@
          _summary += x;
          _squardsum += x*x;
          _numbers ++;
-         _itg1 = _summary;
+         _itg1 += x - _summary / _numbers ;
          _itg2 += _itg1;
          _itg3 += _itg2;
          temp = _dif1;
          _dif1 = x - _preData;
          _preData = x;
          _dif2 = _dif1 - temp; 
+         if (x - _summary / _numbers >= 0) _absolute = x - _summary / _numbers;
+         if (x - _summary / _numbers < 0) _absolute  = _summary / _numbers - x ;
          };
      int64_t getSum(void) {return _summary;};
      double getMean(void) {return (double)_summary / (double)_numbers ;};
@@ -72,15 +184,19 @@
      int64_t getO3integration(void) {return _itg3;};
      int64_t GetO1differ(void) {return _dif1;};
      int64_t GetO2differ(void) {return _dif2;};
+     double getabsolute(void) {return _absolute;};
  };
- 
  int main() {
+     int cmd =0,cmd2=0,cmd3=0,cmd4=0,t=0,tmin=1250;//get12=0;
+     int test[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+     
+    //int cmd1 =0,ch1=0,ch2=0;
      char getc =0;
-     int channel = 0, datamode =0;
-     bool output = true, mapout = false;
+     int channel = 0, datamode= 0;//, datamode2 =9;
+     bool output = false, mapout = true;
      pc.baud(115200);
      int readings[3] = {0, 0, 0};
-     RangeMapper DAC_Mapper( 0 - 1<<13, 1<<13, 0, 1);
+     //RangeMapper DAC_Mapper( 0 - 1<<13, 1<<13, 0, 1);
      DataProcess dp1, dp2, dp3;
      DataProcess dp[3] = {dp1, dp2, dp3};
  
@@ -89,8 +205,20 @@
      pc.printf("Starting ADXL345 test...\r\n");
      wait(.001);
      pc.printf("Device ID is: 0x%02x\r\n", accelerometer.getDeviceID());
-    wait(.001);
-    
+     wait(.001);
+#if(1)
+     LEDKEY8.cls(); 
+     LEDKEY8.writeData(all_str);//全亮
+     wait(0.1);
+     LEDKEY8.setBrightness(TM1638_BRT3);    
+     wait(1);
+//     LEDKEY8.setBrightness(TM1638_BRT0);        
+//     wait(1);
+//     LEDKEY8.setBrightness(TM1638_BRT4);            
+//     wait(1);
+     //LEDKEY8.cls(true);
+     LEDKEY8.writeData(cls_str); 
+#endif    
     restart:
     
      // These are here to test whether any of the initialization fails. It will print the failure
@@ -133,40 +261,290 @@
      pc.printf("  e -> 1st order Integration \r\n");
      pc.printf("  f -> 2nd order Integration \r\n");
      pc.printf("  g -> 3rd order Integration \r\n");
-     pc.printf("  h -> 1st order Differentiation \r\n");
-     pc.printf("  k -> 2nd order Differentiation \r\n");
+     pc.printf("  h -> print Data Commands \r\n");
+     pc.printf("  k -> 1nd order Differentiation \r\n");
+     pc.printf("  m -> 2nd order Differentiation \r\n");
+     pc.printf("  + -> Output Zoom In 2X \r\n");
+     pc.printf("  - -> Output Zoom Out 2Z \r\n");
+     pc.printf("  ^ -> shift up 1% \r\n");
+     pc.printf("  v -> shift down 1% \r\n");
      pc.printf("Press any key to start. \r\n");
-     getc = pc.getc();  
-     
+     //getc = pc.getc();  
+     int error_count=0;
+     RangeMapper DAC_Mapper1( 0 - 1<<13, 1<<13, 0, 1);
+     RangeMapper DAC_Mapper2( 0 - 1<<13, 1<<13, 0, 1);
 
  
      while (1) {
-         int error_count=0;
-         if (pc.readable())
+         t++; 
+         LEDKEY8.getKeys(&keydata);//130us
+#if(1)
+         if(t>tmin){
+            if (keydata[LEDKEY8_SW1_IDX] == LEDKEY8_SW1_BIT )
+            {       
+                t=0;      
+                switch(cmd)
+                   {
+                      case 0 :pc.printf("Data procesing output switch to X channdel\r\n");cmd++;channel = 0;test[0]=C7_X;break;           
+                      case 1 :pc.printf("Data procesing output switch to Y channdel\r\n");cmd++;channel = 1;test[0]=C7_Y;break; 
+                      case 2 :pc.printf("Data procesing output switch to Z channdel\r\n");cmd=0;channel = 2;test[0]=C7_Z;break; 
+                      default: break;
+                   }
+                TM1638::DisplayData_t animate1={test[0],0x00, test[1],0x00, test[2],0x00,test[3],0x00, test[4],0x00,test[5],0x00, test[6],0x00,test[7],0x00};   
+                LEDKEY8.writeData(animate1);        
+            } 
+             if (keydata[LEDKEY8_SW2_IDX] == LEDKEY8_SW2_BIT )
+            {       
+                t=0;      
+//                switch(channel)
+//                   {
+//                      case 0 :LEDKEY8.writeData(ledx[cmd2]);break;           
+//                      case 1 :LEDKEY8.writeData(ledy[cmd2]);break; 
+//                      case 2 :LEDKEY8.writeData(ledz[cmd2]);break; 
+//                      default: break;
+//                   }
+                switch(cmd2)
+                   {
+                      case 0 :pc.printf("CH2(PA_5): Set to raw data output.\r\n");cmd2++;test[1]=C7_R;test[2]=C7_A;test[3]=C7_W;datamode=0;break;           
+                      case 1 :pc.printf("CH2(PA_5): Set to mean output.\r\n");cmd2++;datamode=1;test[1]=C7_M;test[2]=C7_E;test[3]=C7_A;break;
+                      case 2 :pc.printf("CH2(PA_5): Set to summary output.\r\n");cmd2++;datamode=2;test[1]=C7_S;test[2]=C7_U;test[3]=C7_M;break;           
+                      case 3 :pc.printf("CH2(PA_5): Set to variance output.\r\n");cmd2++;datamode=3;test[1]=C7_S;test[1]=C7_T;test[3]=C7_D;break; 
+                      case 4 :pc.printf("CH2(PA_5): Set to 1st order Integration output.\r\n");cmd2++;datamode=4;test[1]=C7_1;test[2]=C7_I;test[3]=C7_O;break;           
+                      case 5 :pc.printf("CH2(PA_5): Set to 2nd order Integration output.\r\n");cmd2++;datamode=5;test[1]=C7_2;test[2]=C7_I;test[3]=C7_O;break; 
+                      case 6 :pc.printf("CH2(PA_5): Set to 3rd order Integration output.\r\n");cmd2++;datamode=6;test[1]=C7_3;test[2]=C7_I;test[3]=C7_O;break;           
+                      case 7 :pc.printf("CH2(PA_5): Set to 1st order Differentiation output.\r\n");cmd2++;datamode=7;test[1]=C7_1;test[2]=C7_D;test[3]=C7_O;break;  
+                      case 8 :pc.printf("CH2(PA_5): Set to 2nd order Differentiation output.\r\n");cmd2++;datamode=8;test[1]=C7_2;test[2]=C7_D;test[3]=C7_O;break; 
+                      case 9 :pc.printf("CH2(PA_5): Set to getabsolute output.\r\n");cmd2=0;datamode=9;test[1]=C7_A;test[2]=C7_B;test[3]=C7_S;break; 
+                      default: break;
+                   }     
+                TM1638::DisplayData_t animate1={test[0],0x00, test[1],0x00, test[2],0x00,test[3],0x00, test[4],0x00,test[5],0x00, test[6],0x00,test[7],0x00};   
+                LEDKEY8.writeData(animate1);//340us      
+            } 
+            if (keydata[LEDKEY8_SW3_IDX] == LEDKEY8_SW3_BIT | keydata[LEDKEY8_SW4_IDX] == LEDKEY8_SW4_BIT)
+            {
+               if (keydata[LEDKEY8_SW3_IDX] == LEDKEY8_SW3_BIT )
+               {       
+                t=0;
+                cmd3++;
+                DAC_Mapper2.zoom(2);
+                pc.printf("Mapout zoom in.\r\n");     
+               }    
+               if (keydata[LEDKEY8_SW4_IDX] == LEDKEY8_SW4_BIT )
+               {       
+                t=0;
+                cmd3--;
+                DAC_Mapper2.zoom(0.5); 
+                pc.printf("Mapout zoom out.\r\n");    
+                }    
+                test[4]=C7_Z;
+                if(cmd3<0)
+                {
+                    test[5]=S7_G;
+                }
+                else
+                {
+                    test[5]=0;
+                }
+                switch(cmd3%10)
+                   {
+                      case 0 :test[7]=C7_0;break;
+                      case -1:           
+                      case 1 :test[7]=C7_1;break; 
+                      case -2: 
+                      case 2 :test[7]=C7_2;break;
+                      case -3:  
+                      case 3 :test[7]=C7_3;break;
+                      case -4:  
+                      case 4 :test[7]=C7_4;break; 
+                      case -5: 
+                      case 5 :test[7]=C7_5;break; 
+                      case -6: 
+                      case 6 :test[7]=C7_6;break; 
+                      case -7: 
+                      case 7 :test[7]=C7_7;break; 
+                      case -8: 
+                      case 8 :test[7]=C7_8;break; 
+                      case -9: 
+                      case 9 :test[7]=C7_9;break; 
+                      default: break;
+                   } 
+                switch(cmd3/10)
+                   {
+                      case 0 :test[6]=C7_0;break;
+                      case -1:           
+                      case 1 :test[6]=C7_1;break; 
+                      case -2: 
+                      case 2 :test[6]=C7_2;break;
+                      case -3:  
+                      case 3 :test[6]=C7_3;break;
+                      case -4:  
+                      case 4 :test[6]=C7_4;break; 
+                      case -5: 
+                      case 5 :test[6]=C7_5;break; 
+                      case -6: 
+                      case 6 :test[6]=C7_6;break; 
+                      case -7: 
+                      case 7 :test[6]=C7_7;break; 
+                      case -8: 
+                      case 8 :test[6]=C7_8;break; 
+                      case -9: 
+                      case 9 :test[6]=C7_9;break; 
+                      default: break;
+                   } 
+                   TM1638::DisplayData_t animate1={test[0],0x00, test[1],0x00, test[2],0x00,test[3],0x00, test[4],0x00,test[5],0x00, test[6],0x00,test[7],0x00};
+                   LEDKEY8.writeData(animate1);  
+            }
+            if(keydata[LEDKEY8_SW5_IDX] == LEDKEY8_SW5_BIT | keydata[LEDKEY8_SW6_IDX] == LEDKEY8_SW6_BIT)
             {
-                getc = pc.getc();
-                switch( getc)
-                    {
-                        case 'x' : channel = 0 ; pc.printf("Data procesing output switch to X channdel \r\n"); break;
-                        case 'y' : channel = 1 ; pc.printf("Data procesing output switch to Y channdel \r\n"); break;
-                        case 'z' : channel = 2 ; pc.printf("Data procesing output switch to Z channdel \r\n"); break;
-                        case '0' : 
-                        case 'o' : output = !output ; pc.printf("Turn %s data output.\r\n",  (output ? "On" : "Off") ); break;
-                        case '1' : 
-                        case 'i' : mapout = !mapout ; pc.printf("Turn %s mapping output.\r\n",  (mapout ? "On" : "Off") ); break;
-                        case 'a' : datamode = 0 ; pc.printf("Set to raw data output.\r\n"); break;
-                        case 'b' : datamode = 1 ; pc.printf("Set to mean output.\r\n"); break;
-                        case 'c' : datamode = 2 ; pc.printf("Set to summary output.\r\n"); break;
-                        case 'd' : datamode = 3 ; pc.printf("Set to variance output.\r\n"); break;
-                        case 'e' : datamode = 4 ; pc.printf("Set to 1st order Integration output.\r\n"); break;
-                        case 'f' : datamode = 5 ; pc.printf("Set to 2nd order Integration output.\r\n"); break;
-                        case 'g' : datamode = 6 ; pc.printf("Set to 3rd order Integration output.\r\n"); break;
-                        case 'h' : datamode = 7 ; pc.printf("Set to 1st order Differentiation output.\r\n"); break;
-                        case 'k' : datamode = 8 ; pc.printf("Set to 2nd order Differentiation output.\r\n"); break;
-                        default: break;
-                    }
+               if (keydata[LEDKEY8_SW5_IDX] == LEDKEY8_SW5_BIT )
+               {       
+                t=0;
+                cmd4++;
+                DAC_Mapper2.shift(0.1) ; 
+                pc.printf("Mapout shift up.\r\n");    
+               }    
+               if (keydata[LEDKEY8_SW6_IDX] == LEDKEY8_SW6_BIT )
+               {       
+                t=0;
+                cmd4--;
+                DAC_Mapper2.shift(-0.1) ; 
+                pc.printf("Mapout shift down.\r\n");    
+               }
+               test[4
+               
+               ]=C7_S;
+                if(cmd4<0)
+                {
+                    test[5]=S7_G;
+                }
+                else
+                {
+                    test[5]=0;
+                }
+                switch(cmd4%10)
+                   {
+                      case 0 :test[7]=C7_0;break;
+                      case -1:           
+                      case 1 :test[7]=C7_1;break; 
+                      case -2: 
+                      case 2 :test[7]=C7_2;break;
+                      case -3:  
+                      case 3 :test[7]=C7_3;break;
+                      case -4:  
+                      case 4 :test[7]=C7_4;break; 
+                      case -5: 
+                      case 5 :test[7]=C7_5;break; 
+                      case -6: 
+                      case 6 :test[7]=C7_6;break; 
+                      case -7: 
+                      case 7 :test[7]=C7_7;break; 
+                      case -8: 
+                      case 8 :test[7]=C7_8;break; 
+                      case -9: 
+                      case 9 :test[7]=C7_9;break; 
+                      default: break;
+                   } 
+                switch(cmd4/10)
+                   {
+                      case 0 :test[6]=C7_0;break;
+                      case -1:           
+                      case 1 :test[6]=C7_1;break; 
+                      case -2: 
+                      case 2 :test[6]=C7_2;break;
+                      case -3:  
+                      case 3 :test[6]=C7_3;break;
+                      case -4:  
+                      case 4 :test[6]=C7_4;break; 
+                      case -5: 
+                      case 5 :test[6]=C7_5;break; 
+                      case -6: 
+                      case 6 :test[6]=C7_6;break; 
+                      case -7: 
+                      case 7 :test[6]=C7_7;break; 
+                      case -8: 
+                      case 8 :test[6]=C7_8;break; 
+                      case -9: 
+                      case 9 :test[6]=C7_9;break; 
+                      default: break;
+                   }
+                   TM1638::DisplayData_t animate1={test[0],0x00, test[1],0x00, test[2],0x00,test[3],0x00, test[4],0x00,test[5],0x00, test[6],0x00,test[7],0x00};
+                   LEDKEY8.writeData(animate1);  
+            }    
+            if (keydata[LEDKEY8_SW7_IDX] == LEDKEY8_SW7_BIT )
+            {       
+                t=0;      
+                output=!output;
+                pc.printf("Turn %s data output.\r\n",  (output ? "On" : "Off") );    
+            }        
+            if (keydata[LEDKEY8_SW8_IDX] == LEDKEY8_SW8_BIT )
+            {       
+                t=0;      
+                mapout=!mapout;
+                pc.printf("Turn %s mapping output.\r\n",  (mapout ? "On" : "Off") );    
             }
-         accelerometer.getOutput(readings);
+        
+            
+#endif                    
+         //pc.printf("%i\r\n", pc.readable());
+         
+         if (pc.readable())
+            {  
+                 
+                getc = pc.getc();  
+                pc.format(8);
+                t=0;
+                switch(getc)
+                          {
+                               case 'x' : channel = 0 ; pc.printf("Data procesing output switch to X channdel \r\n");test[0]=C_X; break;
+                               case 'y' : channel = 1 ; pc.printf("Data procesing output switch to Y channdel \r\n");test[0]=C_Y; break;
+                               case 'z' : channel = 2 ; pc.printf("Data procesing output switch to Z channdel \r\n");test[0]=C_Z; break;
+                               case '0' : 
+                               case 'o' : output = !output ; pc.printf("Turn %s data output.\r\n",  (output ? "On" : "Off") ); break;
+                               case '1' : 
+                               case 'i' : mapout = !mapout ; pc.printf("Turn %s mapping output.\r\n",  (mapout ? "On" : "Off") ); break;
+                               case 'a' : datamode = 0 ; pc.printf("CH2(PA_5): Set to raw data output.\r\n"); break;
+                               case 'b' : datamode = 1 ; pc.printf("CH2(PA_5): Set to mean output.\r\n"); break;
+                               case 'c' : datamode = 2 ; pc.printf("CH2(PA_5): Set to summary output.\r\n"); break;
+                               case 'd' : datamode = 3 ; pc.printf("CH2(PA_5): Set to variance output.\r\n"); break;
+                               case 'e' : datamode = 4 ; pc.printf("CH2(PA_5): Set to 1st order Integration output.\r\n"); break;
+                               case 'f' : datamode = 5 ; pc.printf("CH2(PA_5): Set to 2nd order Integration output.\r\n"); break;
+                               case 'g' : datamode = 6 ; pc.printf("CH2(PA_5): Set to 3rd order Integration output.\r\n"); break;
+                               case 'h' : datamode = 0 ; pc.printf("Data Commands: \r\n"); 
+                                                         pc.printf("  x -> x channdel \r\n"); 
+                                                         pc.printf("  y -> y channdel \r\n"); 
+                                                         pc.printf("  z -> z channdel \r\n"); 
+                                                         pc.printf("  o,0 -> data output on/off \r\n"); 
+                                                         pc.printf("  i,1 -> mapper on/off \r\n"); 
+                                                         pc.printf("  a -> raw data \r\n");
+                                                         pc.printf("  b -> mean \r\n");
+                                                         pc.printf("  c -> summary \r\n");
+                                                         pc.printf("  d -> variance \r\n");
+                                                         pc.printf("  e -> 1st order Integration \r\n");
+                                                         pc.printf("  f -> 2nd order Integration \r\n");
+                                                         pc.printf("  g -> 3rd order Integration \r\n");
+                                                         pc.printf("  h -> print Data Commands \r\n");
+                                                         pc.printf("  k -> 1nd order Differentiation \r\n");
+                                                         pc.printf("  m -> 2nd order Differentiation \r\n");
+                                                         pc.printf("  + -> Output Zoom In 2X \r\n");
+                                                         pc.printf("  - -> Output Zoom Out 2Z \r\n");
+                                                         pc.printf("  ^ -> shift up 1% \r\n");
+                                                         pc.printf("  v -> shift down 1% \r\n");
+                                                         break;
+                               case 'k' : datamode = 7 ; pc.printf("CH2(PA_5): Set to 1st order Differentiation output.\r\n"); break;
+                               case 'm' : datamode = 8 ; pc.printf("CH2(PA_5): Set to 2nd order Differentiation output.\r\n"); break;
+                               case '=' :
+                               case '+' : DAC_Mapper2.zoom(2) ; pc.printf("Mapout zoom in.\r\n"); cmd3++;break;
+                               case '-' : DAC_Mapper2.zoom(0.5) ; pc.printf("Mapout zoom out.\r\n");cmd3--; break;
+                               case '6' :
+                               case '^' : DAC_Mapper2.shift(0.01) ; pc.printf("Mapout shift up.\r\n");cmd4++; break;
+                               case 'v' : DAC_Mapper2.shift(-0.01) ; pc.printf("Mapout shift down.\r\n");cmd4--; break;
+                               default: break; 
+                           }
+                }//if (pc.readable())   
+               }//t>=tmin
+         DO2=1;      
+         accelerometer.getOutput(readings);//220us
+         DO2=0;
          if (( 17601 == readings[0] ) ||  ( 17601 == readings[1] ) || ( 17601 == readings[2] ))
             {
             error_count++;
@@ -177,38 +555,66 @@
                 goto restart;
                 }
             }
-        else
+         else
             {
             double mapdata;
             error_count = 0; 
-            dp[0].putData((int16_t)readings[0]);
-            dp[1].putData((int16_t)readings[1]);
-            dp[2].putData((int16_t)readings[2]);
-            if (output)
-             {
-               switch (datamode)
+            int i;
+            for (i = 0; i < 3; i++)
+                {
+                    readings[i] = (int16_t) readings[i];
+                    dp[i].putData(readings[i]);
+                }            
+            if (output)//output
                {
-                case 0: mapdata = readings[channel]; pc.printf("RAW: %i, %i, %i\r\n", (int16_t)readings[0], (int16_t)readings[1], (int16_t)readings[2]); break;
+               
+                  switch (datamode)
+                     {
+                        case 0: pc.printf("RAW: %i, %i, %i\r\n", (int16_t)readings[0], (int16_t)readings[1], (int16_t)readings[2]);break; 
                 //case 0: mapdata = readings[channel]; pc.printf("RAW: %i, %i, %i\r\n", readings[0], readings[1], readings[2]); break;
-                case 1: mapdata = dp[channel].getMean(); pc.printf("MEAN: %f, %f, %f\r\n", dp[0].getMean(), dp[1].getMean(), dp[2].getMean() ); break;
-                case 2: mapdata = dp[channel].getSum(); pc.printf("SUM: %jd, %jd, %jd\r\n", dp[0].getSum(), dp[1].getSum(), dp[2].getSum() ); break;                
-                case 3: mapdata = dp[channel].getStdDiv(); pc.printf("STD: %f, %f, %f\r\n", dp[0].getStdDiv(), dp[1].getStdDiv(), dp[2].getStdDiv() ); break;
-                case 4: mapdata = dp[channel].getO1integration(); pc.printf("1ITG: %jd, %jd, %jd\r\n", dp[0].getO1integration(), dp[1].getO1integration(), dp[2].getO1integration() ); break;     
-                case 5: mapdata = dp[channel].getO2integration(); pc.printf("2ITG: %jd, %jd, %jd\r\n", dp[0].getO2integration(), dp[1].getO2integration(), dp[2].getO2integration() ); break;     
-                case 6: mapdata = dp[channel].getO3integration(); pc.printf("3ITG: %jd, %jd, %jd\r\n", dp[0].getO3integration(), dp[1].getO3integration(), dp[2].getO3integration() ); break;     
-                case 7: mapdata = dp[channel].GetO1differ(); pc.printf("1DIF: %jd, %jd, %jd\r\n", dp[0].GetO1differ(), dp[1].GetO1differ(), dp[2].GetO1differ() ); break;     
-                case 8: mapdata = dp[channel].GetO2differ(); pc.printf("2DIF: %jd, %jd, %jd\r\n", dp[0].GetO2differ(), dp[1].GetO2differ(), dp[2].GetO2differ() ); break;     
-                default: break;         
+                        case 1: pc.printf("MEAN: %f, %f, %f\r\n", dp[0].getMean(), dp[1].getMean(), dp[2].getMean() ); break;
+                        case 2: pc.printf("SUM: %jd, %jd, %jd\r\n", dp[0].getSum(), dp[1].getSum(), dp[2].getSum() ); break;               
+                        case 3: pc.printf("STD: %f, %f, %f\r\n", dp[0].getStdDiv(), dp[1].getStdDiv(), dp[2].getStdDiv() ); break;
+                        case 4: pc.printf("1ITG: %jd, %jd, %jd\r\n", dp[0].getO1integration(), dp[1].getO1integration(), dp[2].getO1integration() ); break; 
+                        case 5: pc.printf("2ITG: %jd, %jd, %jd\r\n", dp[0].getO2integration(), dp[1].getO2integration(), dp[2].getO2integration() ); break;   
+                        case 6: pc.printf("3ITG: %jd, %jd, %jd\r\n", dp[0].getO3integration(), dp[1].getO3integration(), dp[2].getO3integration() ); break; 
+                        case 7: pc.printf("1DIF: %jd, %jd, %jd\r\n", dp[0].GetO1differ(), dp[1].GetO1differ(), dp[2].GetO1differ() ); break;
+                        case 8: pc.printf("2DIF: %jd, %jd, %jd\r\n", dp[0].GetO2differ(), dp[1].GetO2differ(), dp[2].GetO2differ() ); break;   
+                        case 9: pc.printf("2DIF: %jd, %jd, %jd\r\n", dp[0].getabsolute(), dp[1].GetO2differ(), dp[2].GetO2differ() ); break; 
+                        default: break;         
+                     }
+                } 
+     
+            AO1=DAC_Mapper1.getOutput(readings[channel]);
+ 
+            if (mapout)
+               {
+               //double mapdata;
+                  switch (datamode)
+                     {
+                        case 0: mapdata = readings[channel];  break;
+                        case 1: mapdata = dp[channel].getMean(); break;
+                        case 2: mapdata = dp[channel].getSum();  break;                
+                        case 3: mapdata = dp[channel].getStdDiv();  break;
+                        case 4: mapdata = dp[channel].getO1integration(); break;     
+                        case 5: mapdata = dp[channel].getO2integration();  break;     
+                        case 6: mapdata = dp[channel].getO3integration();  break;     
+                        case 7: mapdata = dp[channel].GetO1differ(); break;     
+                        case 8: mapdata = dp[channel].GetO2differ(); break;     
+                        case 9: mapdata = dp[channel].getabsolute(); break;
+                        default: mapdata = 0; break;         
+                     }
+              // pc.printf("MAPPING OUTPUT: %jd\r\n", DAC_Mapper2.getOutput(mapdata) ); 
+    
+                  AO2=DAC_Mapper2.getOutput(mapdata);  
+                        
                }
-             }
-            if (mapout)
-             {
-                 // Set data the DAC
-                 DAC_Mapper.getOutput(mapdata);
-             }
-             wait(1);
+            else
+               {
+                  AO2=DAC_Mapper2.getOutput(0);
+               }
+             
             }
-
+           
      }
- 
  }