]> Pileus Git - ~andy/csm213a-hw/blobdiff - yue/main.cpp
Fix whitespace error
[~andy/csm213a-hw] / yue / main.cpp
index e580188dcce225a1caf375fed709594a5b036c5b..3dfd736b37deeb246bdb7b3ce6e5801484a30c2c 100644 (file)
@@ -15,7 +15,7 @@
          (x) > (max) ? (max) : (x))\r
 \r
 #define MMA8451_I2C_ADDRESS (0x1d<<1)   // acc sensor address\r
-#define TIME_ACCURACY     0.001\r
+#define TIME_ACCURACY     0.0005\r
 \r
 #define ACC_SNS_DEFAULT   0.01 // default collecting interval in seconds\r
 #define MAG_SNS_DEFAULT   0.1\r
@@ -87,7 +87,13 @@ MMA8451Q   accSensor(PTE25, PTE24, MMA8451_I2C_ADDRESS);
 MAG3110    magSensor(PTE25, PTE24);\r
 TSISensor  tchSensor;\r
 AnalogIn   lgtSensor(PTE22);\r
-AnalogIn   a2dSensor(A0);\r
+\r
+AnalogIn   a2dSensor0(A0);\r
+AnalogIn   a2dSensor1(A1);\r
+AnalogIn   a2dSensor2(A2);\r
+AnalogIn   a2dSensor3(A3);\r
+AnalogIn   a2dSensor4(A4);\r
+AnalogIn   a2dSensor5(A5);\r
 \r
 AnalogOut  a2dOutput(PTE30);\r
 \r
@@ -146,17 +152,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
@@ -212,45 +224,50 @@ void clock1_interrupt(void){
     static int tchCnt;\r
     static int a2dCnt;\r
     static int ledCnt;\r
+    static int sinCnt;\r
 \r
-    accCnt++;\r
-    magCnt++;\r
-    lgtCnt++;\r
-    tchCnt++;\r
-    a2dCnt++;\r
-    ledCnt++;\r
+    static float sinAmp  = 0.5;  // 0..1\r
+    static float sinFreq = 0.25; // Hz\r
 \r
     // Write A2D output sine wave\r
-    a2dOutput.write(sin(a2dCnt * TIME_ACCURACY * (2*PI) * 0.1));\r
+    a2dOutput.write(sinAmp*sin(sinCnt * TIME_ACCURACY * (2*PI) * sinFreq)*0.5 + 0.5);\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
+    sinCnt++;\r
+\r
     sdma_flush();\r
 }\r
 \r
@@ -367,12 +384,12 @@ void sendTchInfo(void){
 \r
 void sendA2dInfo(void){\r
     float a2dData[6];\r
-    a2dData[0] = a2dSensor.read();\r
-    a2dData[1] = 0;\r
-    a2dData[2] = 0;\r
-    a2dData[3] = 0;\r
-    a2dData[4] = 0;\r
-    a2dData[5] = 0;\r
+    a2dData[0] = a2dSensor0.read();\r
+    a2dData[1] = a2dSensor1.read();\r
+    a2dData[2] = a2dSensor2.read();\r
+    a2dData[3] = a2dSensor3.read();\r
+    a2dData[4] = a2dSensor4.read();\r
+    a2dData[5] = a2dSensor5.read();\r
     int len = packToFrame(txFrame, SNS_A2D, TYP_F32, 6, a2dData);\r
 \r
     printStr("[A2D] data=%2.2f %2.2f %2.2f %2.2f %2.2f %2.2f\r\n",\r