![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Rtos API example
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 #include "MMA8451Q.h" 00003 #include "test_env.h" 00004 00005 #ifdef TARGET_KL05Z 00006 #define SDA PTB4 00007 #define SCL PTB3 00008 00009 #elif TARGET_K20D50M 00010 #define SDA PTB1 00011 #define SCL PTB0 00012 00013 #else 00014 #define SDA PTE25 00015 #define SCL PTE24 00016 #endif 00017 00018 namespace { 00019 const int MMA8451_I2C_ADDRESS = 0x1D << 1; // I2C bus address 00020 const float MMA8451_DIGITAL_SENSITIVITY = 4096.0; // Counts/g 00021 } 00022 00023 float calc_3d_vector_len(float x, float y, float z) { 00024 return sqrt(x*x + y*y + z*z); 00025 } 00026 00027 #define TEST_ITERATIONS 25 00028 #define TEST_ITERATIONS_SKIP 5 00029 #define MEASURE_DEVIATION_TOLERANCE 0.025 // 2.5% 00030 00031 int main(void) { 00032 MBED_HOSTTEST_TIMEOUT(15); 00033 MBED_HOSTTEST_SELECT(default_auto); 00034 MBED_HOSTTEST_DESCRIPTION(MMA8451Q accelerometer); 00035 MBED_HOSTTEST_START("KL25Z_5"); 00036 00037 DigitalOut led(LED_GREEN); 00038 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS); 00039 bool result = true; 00040 printf("WHO AM I: 0x%2X\r\n\n", acc.getWhoAmI()); 00041 00042 for (int i = 0; i < TEST_ITERATIONS; i++) { 00043 if (i < TEST_ITERATIONS_SKIP) { 00044 // Skip first 5 measurements 00045 continue; 00046 } 00047 const float g_vect_len = calc_3d_vector_len(acc.getAccX(), acc.getAccY(), acc.getAccZ()) / MMA8451_DIGITAL_SENSITIVITY; 00048 const float deviation = fabs(g_vect_len - 1.0); 00049 const char *succes_str = deviation <= MEASURE_DEVIATION_TOLERANCE ? "[OK]" : "[FAIL]"; 00050 result = result && (deviation <= MEASURE_DEVIATION_TOLERANCE); 00051 printf("X:% 6d Y:% 6d Z:% 5d GF:%0.3fg, dev:%0.3f ... %s\r\n", acc.getAccX(), acc.getAccY(), acc.getAccZ(), g_vect_len, deviation, succes_str); 00052 wait(0.5); 00053 led = !led; 00054 } 00055 MBED_HOSTTEST_RESULT(result); 00056 }
Generated on Sun Jul 17 2022 08:25:26 by
![doxygen](doxygen.png)