University project with FRDM-KL25Z

Dependencies:   mbed MMA8451Q

Committer:
rolandtamas
Date:
Tue Jan 11 19:12:13 2022 +0000
Revision:
1:d60a7ce97623
Parent:
0:81d50ca17412
Final version of the project

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rolandtamas 0:81d50ca17412 1 #include "mbed.h"
rolandtamas 0:81d50ca17412 2 #include "MMA8451Q.h"
rolandtamas 0:81d50ca17412 3
rolandtamas 0:81d50ca17412 4 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
rolandtamas 0:81d50ca17412 5 PinName const SDA = PTE25;
rolandtamas 0:81d50ca17412 6 PinName const SCL = PTE24;
rolandtamas 0:81d50ca17412 7 #elif defined (TARGET_KL05Z)
rolandtamas 0:81d50ca17412 8 PinName const SDA = PTB4;
rolandtamas 0:81d50ca17412 9 PinName const SCL = PTB3;
rolandtamas 0:81d50ca17412 10 #elif defined (TARGET_K20D50M)
rolandtamas 0:81d50ca17412 11 PinName const SDA = PTB1;
rolandtamas 0:81d50ca17412 12 PinName const SCL = PTB0;
rolandtamas 0:81d50ca17412 13 #else
rolandtamas 0:81d50ca17412 14 #error TARGET NOT DEFINED
rolandtamas 0:81d50ca17412 15 #endif
rolandtamas 0:81d50ca17412 16
rolandtamas 0:81d50ca17412 17 #define MMA8451_I2C_ADDRESS (0x1d<<1)
rolandtamas 0:81d50ca17412 18 #define MAXBLINKSPEED 0.8
rolandtamas 0:81d50ca17412 19
rolandtamas 0:81d50ca17412 20 int main(void)
rolandtamas 0:81d50ca17412 21 {
rolandtamas 0:81d50ca17412 22 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
rolandtamas 0:81d50ca17412 23 PwmOut rled(LED1);
rolandtamas 0:81d50ca17412 24 PwmOut gled(LED2);
rolandtamas 1:d60a7ce97623 25
rolandtamas 1:d60a7ce97623 26 float x_data, y_data;
rolandtamas 1:d60a7ce97623 27 float x_ref = 0.05f;
rolandtamas 1:d60a7ce97623 28 float y_ref = 0.05f;
rolandtamas 1:d60a7ce97623 29
rolandtamas 1:d60a7ce97623 30 printf("MMA8451 ID: %d\n", acc.getWhoAmI()); //acts as a reset message
rolandtamas 0:81d50ca17412 31
rolandtamas 0:81d50ca17412 32 while (true) {
rolandtamas 1:d60a7ce97623 33 x_data = acc.getAccX(); // detect pitch
rolandtamas 1:d60a7ce97623 34 y_data = acc.getAccY(); //detect roll
rolandtamas 1:d60a7ce97623 35
rolandtamas 1:d60a7ce97623 36 if(abs(x_data) > x_ref)
rolandtamas 1:d60a7ce97623 37 {
rolandtamas 1:d60a7ce97623 38 gled = 1.0f;
rolandtamas 1:d60a7ce97623 39 printf("Pitch detected !!!\n");
rolandtamas 1:d60a7ce97623 40 wait(MAXBLINKSPEED * abs(x_data)); //speed of blinking changes depending on pitch position
rolandtamas 1:d60a7ce97623 41 gled = 0.0f;
rolandtamas 1:d60a7ce97623 42 }
rolandtamas 1:d60a7ce97623 43 if(abs(y_data) > y_ref)
rolandtamas 1:d60a7ce97623 44 {
rolandtamas 0:81d50ca17412 45 rled = 1.0f;
rolandtamas 1:d60a7ce97623 46 printf("Roll detected !!!\n");
rolandtamas 1:d60a7ce97623 47 wait(MAXBLINKSPEED * abs(y_data)); //speed of blinking changes depending on roll position
rolandtamas 0:81d50ca17412 48 rled = 0.0f;
rolandtamas 0:81d50ca17412 49 }
rolandtamas 1:d60a7ce97623 50 if(abs(x_data) == x_ref && abs(y_data) == y_ref)
rolandtamas 1:d60a7ce97623 51 {
rolandtamas 1:d60a7ce97623 52 printf("Board is leveled !!!\n");
rolandtamas 0:81d50ca17412 53 }
rolandtamas 1:d60a7ce97623 54 printf("X: %.2f, Y: %.2f\n", x_data, y_data);
rolandtamas 1:d60a7ce97623 55
rolandtamas 0:81d50ca17412 56 }
rolandtamas 0:81d50ca17412 57 }