]> Pileus Git - ~andy/csm213a-hw/blobdiff - yue/main.cpp
Debugging..
[~andy/csm213a-hw] / yue / main.cpp
index 0fdb8660bd56340e275e4284919ab19b6408c560..218b27a9bbf8e96336ff8667e510d8c93f493063 100644 (file)
@@ -15,9 +15,9 @@
          (x) > (max) ? (max) : (x))\r
 \r
 #define MMA8451_I2C_ADDRESS (0x1d<<1)   // acc sensor address\r
-#define TIME_ACCURACY     0.01\r
+#define TIME_ACCURACY     0.0005\r
 \r
-#define ACC_SNS_DEFAULT   0.1   // default collecting interval in seconds\r
+#define ACC_SNS_DEFAULT   0.01 // default collecting interval in seconds\r
 #define MAG_SNS_DEFAULT   0.1\r
 #define LGT_SNS_DEFAULT   0.1\r
 #define TCH_SNS_DEFAULT   0.1\r
@@ -89,6 +89,8 @@ TSISensor  tchSensor;
 AnalogIn   lgtSensor(PTE22);\r
 AnalogIn   a2dSensor(A0);\r
 \r
+AnalogOut  a2dOutput(PTE30);\r
+\r
 DigitalOut led1(LED1);\r
 DigitalOut led2(LED2);\r
 \r
@@ -104,11 +106,11 @@ float lgtTmr = LGT_SNS_DEFAULT;
 float a2dTmr = A2D_SNS_DEFAULT;\r
 float ledTmr = LED_OUT_DEFAULT;\r
 \r
-bool accEnable = true;\r
+bool accEnable = false;\r
 bool magEnable = false;\r
 bool lgtEnable = false;\r
 bool tchEnable = false;\r
-bool a2dEnable = false;\r
+bool a2dEnable = true;\r
 bool ledEnable = true;\r
 \r
 bool useStr = false;\r
@@ -144,17 +146,23 @@ void printBin(uint8_t *frame, int len);
 int main(void) {\r
     // Initialization\r
     // Interruption Declarations\r
-    clock1.attach(&clock1_interrupt, TIME_ACCURACY);    // maximun accuracy be 0.1s\r
+    //clock1.attach(&clock1_interrupt, TIME_ACCURACY);    // maximun accuracy be 0.1s\r
     serial.attach(&serialRx_interrupt, Serial::RxIrq);  // receive interrupt for serialS\r
-    serial.baud(115200);\r
+    //serial.baud(115200);\r
+    serial.baud(230400);\r
     magSensor.begin();\r
 \r
     sdma_setup(UART0, 0);\r
 \r
     printStr("\r\n============= Start of the program ============\r\n");\r
 \r
+    int ticks = 0, tocks = 0;\r
     while(1){\r
-        wait(3);\r
+       ticks = (us_ticker_read()*1E-6) / TIME_ACCURACY;\r
+       if (tocks < ticks) {\r
+               clock1_interrupt();\r
+               tocks++;\r
+       }\r
     }\r
 }\r
 \r
@@ -211,41 +219,44 @@ void clock1_interrupt(void){
     static int a2dCnt;\r
     static int ledCnt;\r
 \r
-    accCnt++;\r
-    magCnt++;\r
-    lgtCnt++;\r
-    tchCnt++;\r
-    a2dCnt++;\r
-    ledCnt++;\r
+    // Write A2D output sine wave\r
+    a2dOutput.write(sin(a2dCnt * TIME_ACCURACY * (2*PI) * 0.1));\r
 \r
     // Send data through Serial\r
-    if (accEnable && (accCnt<0 || accCnt>=accTmr/TIME_ACCURACY)){\r
+    if (accEnable && accCnt >= (int)(accTmr/TIME_ACCURACY+0.5)){\r
         sendAccInfo();\r
         accCnt = 0;\r
     }\r
-    if (magEnable && (magCnt<0 || magCnt>=magTmr/TIME_ACCURACY)){\r
+    if (magEnable && magCnt >= (int)(magTmr/TIME_ACCURACY+0.5)){\r
         sendMagInfo();\r
         magCnt = 0;\r
     }\r
-    if (lgtEnable && (lgtCnt<0 || lgtCnt>=lgtTmr/TIME_ACCURACY)){\r
+    if (lgtEnable && lgtCnt >= (int)(lgtTmr/TIME_ACCURACY+0.5)){\r
         sendLgtInfo();\r
         lgtCnt = 0;\r
     }\r
-    if (tchEnable && (tchCnt<0 || tchCnt>=tchTmr/TIME_ACCURACY)){\r
+    if (tchEnable && tchCnt >= (int)(tchTmr/TIME_ACCURACY+0.5)){\r
         sendTchInfo();\r
         tchCnt = 0;\r
     }\r
-    if (a2dEnable && (a2dCnt<0 || a2dCnt>=a2dTmr/TIME_ACCURACY)){\r
+    if (a2dEnable && a2dCnt >= (int)(a2dTmr/TIME_ACCURACY+0.5)){\r
         sendA2dInfo();\r
         a2dCnt = 0;\r
     }\r
 \r
     // Toggel LED for debugging\r
-    if (ledEnable && (ledCnt<0 || ledCnt>=ledTmr/TIME_ACCURACY)){\r
+    if (ledEnable && ledCnt>=ledTmr/TIME_ACCURACY){\r
         led1   = !led1;\r
        ledCnt = 0;\r
     }\r
 \r
+    accCnt++;\r
+    magCnt++;\r
+    lgtCnt++;\r
+    tchCnt++;\r
+    a2dCnt++;\r
+    ledCnt++;\r
+\r
     sdma_flush();\r
 }\r
 \r
@@ -362,7 +373,7 @@ void sendTchInfo(void){
 \r
 void sendA2dInfo(void){\r
     float a2dData[6];\r
-    a2dData[0] = 0;\r
+    a2dData[0] = a2dSensor.read();\r
     a2dData[1] = 0;\r
     a2dData[2] = 0;\r
     a2dData[3] = 0;\r