Compass Working

Dependencies:   mbed

Tap.cpp

Committer:
pstephens18
Date:
2016-01-19
Revision:
5:f6762034b4c0
Parent:
4:92024cb66c9c

File content as of revision 5:f6762034b4c0:

#include "Tap.h"
I2C acc(p9,p10);
DigitalIn int2(p20);
InterruptIn check(p12);
BusOut led(LED1,LED2,LED3,LED4);
char acc_config[2];
const int addr=(0x53<<1);
char data1[1];
char ack;

void Tap_init() 
    {
    acc.frequency(100000);   
    acc_config[0]=0x31; acc_config[1]=0x0B;         //data format
    ack = acc.write(addr,acc_config, 2);
    wait(0.1);
      
    acc_config[0]=0x2D; acc_config[1]=0x08;         //power control->measure mode
    acc.write(addr,acc_config, 2);   
    wait(0.1);
    
    acc_config[0]=0x1D; acc_config[1]=0x50;         //Tap Threshold ->5g 
    acc.write(addr,acc_config, 2); 
    wait(0.1);
    
    acc_config[0]=0x21; acc_config[1]=0x10;         //Tap duration -> 0.01
    acc.write(addr,acc_config, 2);    
    wait(0.1);
    
    acc_config[0]=0x22; acc_config[1]=0x05;         //Tap Gap ~0.006
    acc.write(addr,acc_config, 2); 
    wait(0.1);
    
    acc_config[0]=0x23; acc_config[1]=0xFF;         //Tap window ->~0.38175
    acc.write(addr,acc_config, 2);
    wait(0.1);
    
    acc_config[0]=0x2A; acc_config[1]=0x07;         //Axis -> x&y&z
    acc.write(addr,acc_config, 2);
    wait(0.1);
    
    acc_config[0]=0x2E; acc_config[1]=0x60;         //enable interupt -> single and double tap
    acc.write(addr,acc_config, 2);
    wait(0.1);
    
    acc_config[0]=0x2F; acc_config[1]=0x60;         //map interupt ->int2
    acc.write(addr,acc_config, 2);
    wait(0.1);
    }
    float Tap()
    {    
        int2.rise(&Tap_return)
        while(1)
            {
            wait(0.01);
            
            if(int2.read()==1)  // Check for interupt signal
            {
               
                acc_config[0]=0x30;
                acc.write(addr,acc_config,1);             
                acc.read(addr,data1,1);  // Get interupt information
                
                if(data1[0] & 0x40)  // Turn on one LED for one tap
                {
                    led =1; 
                }
                if(data1[0] & 0x20)  // Turn on two LEDs for two taps
                {
                    led =2;
                }
                wait(1);
                 // Turn off LED
                 if(led==1){return 1;}
                 if(led ==2){return 2;}
                
            }     
        }   
    }
    
    void Tap_return()
    {
            
    }