la4-2(unfinished)

Dependencies:   MMA8451Q

Fork of Accelerometer_example by William Marsh

main.cpp

Committer:
Peilingyi
Date:
2018-02-16
Revision:
2:eebefb7c9690
Parent:
0:a1caba5c4e48
Child:
3:374bdcd8ee4c

File content as of revision 2:eebefb7c9690:

#include "mbed.h"
#include "rtos.h"
#include "MMA8451Q.h"

  PinName const SDA = PTE25;
  PinName const SCL = PTE24;

#define MMA8451_I2C_ADDRESS (0x1d<<1)

Thread thread1;
DigitalOut ledr(LED1);
DigitalOut ledg(LED2);
timer t;

void stationary
{
   while(1)
   {
    if ((abs((x+y+z)-1))<threshold)
    {   
    switch (state)
        case 0:
            ledr=1;
            ledg=1;
            state = 1;
            break;
        case 1:
                if ((abs(z-1)<=errorrange))//flat
                {
                    if (countflag == 0)
                    {
                        pc.printf("flat");
                        countflag = filter;
                        ledg = 0;
                        t.start();
           //             state = 1;//for flat
                    }    
                    else
                    {
                        countflag--;
                    }
                } 
                else
                {
                     t.stop();
                    temp_t = t.read();
                    if (temp_t>10) 
                    {
                        state = 2;
                        steps = 1;
                        ledg = 0;
                        ledr = 1;
                    }
                    else
                    {
                        ledg = 1;
                        ledr = 0;
                        state =0;
                        pc.printf("error!");
                    }
                
                }
                             
            } 
            break;
        case 2:
        {
            if (abs(x+1.0f)<=errorrange)
            {
                if (countflag == 0)
                {
                    pc.printf("right");
                    countflag = filter;
                    t.start();
                   
                }
                else
                {
                    countflag--;
                }
            }  
            else
              {
                    t.stop();
                    temp_t = t.read();
                    if ((temp_t>=2) && (temp_t<=6)) 
                    {
                        state = 3;
                        steps = 2;
                    }
                    else
                    {
                        ledg = 1;
                        ledr = 0;
                        pc.printf("error!");
                    }
                
                }
             }
             break;
             case 3:
             {
                 if (abs(x+1.0f)<=errorrange)
                {
                    if (countflag == 0)
                    {
                        pc.printf("up");
                        countflag = filter;
                        t.start(); 
                    }
                    else
                    {
                        countflag--;
                    }
                }  
                 else
                {
                    t.stop();
                    temp_t = t.read();
                    if ((temp_t>=4) && (temp_t<=8)) 
                    {
                        state = 0;
                    }
                    else
                    {
                        ledg = 1;
                        ledr = 0;
                        pc.printf("error!");
                    }
                
                }
             }
             
        
      
    } 
}

int main(void)
{
   
    
    MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
    PwmOut rled(LED1);
    PwmOut gled(LED2);
    PwmOut bled(LED3);
    Serial pc(USBTX, USBRX); // tx, rx
    ledg = 1;
    ledr = 1;
    

    thread1.start(callback(stationary ));
     
    pc.printf("MMA8451 ID: %d\n", acc.getWhoAmI());

    while (true) {
        float x, y, z;
      
        x = acc.getAccX();
        y = acc.getAccY();
        z = acc.getAccZ();
        rled = 1.0f - abs(x);
        gled = 1.0f - abs(y);
        bled = 1.0f - abs(z);
        Thread::wait(300);
    
  
        pc.printf("X: %1.2f, Y: %1.2f, Z: %1.2f\n", x, y, z);
    
    }
}