(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.001\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
} cmd_t;\r
\r
// Data Frame Information\r
+#pragma pack(1)\r
typedef struct {\r
uint8_t header;\r
struct {\r
} bits;\r
uint8_t count;\r
uint8_t data[];\r
-} __attribute__((__packed__)) state_t;\r
+} state_t;\r
+#pragma pack()\r
\r
// Command Frame Information\r
+#pragma pack(1)\r
typedef struct {\r
uint8_t header;\r
struct {\r
uint8_t sns : 4;\r
} bits;\r
float interval;\r
-} __attribute__((__packed__)) control_t;\r
+} control_t;\r
+#pragma pack()\r
\r
// Define Devices & Pins\r
MMA8451Q accSensor(PTE25, PTE24, MMA8451_I2C_ADDRESS);\r
AnalogIn lgtSensor(PTE22);\r
AnalogIn a2dSensor(A0);\r
\r
+AnalogOut a2dOutput(PTE30);\r
+\r
DigitalOut led1(LED1);\r
DigitalOut led2(LED2);\r
\r
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
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
magSensor.begin();\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() * TIME_ACCURACY;\r
+ if (tocks < ticks) {\r
+ clock1_interrupt();\r
+ tocks++;\r
+ }\r
}\r
}\r
\r
a2dCnt++;\r
ledCnt++;\r
\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
sendAccInfo();\r
\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