Dependencies:   mbed

Fork of ADXL345Test_for_motortest by jack zen

Revision:
5:ff61547eaee6
Parent:
4:f5a78245f2d0
--- 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);
+               }
+             
             }
-
+           
      }
- 
  }