first try tap on rig

Dependencies:   BLE_API PinDetect mbed-src-bmd-200

main.cpp

Committer:
vertinfo
Date:
2015-07-21
Revision:
0:e3f0057448f0

File content as of revision 0:e3f0057448f0:

#include "MMA845x.h"
#include "PinDetect.h"
#include "mbed.h"
 
Serial pc(USBTX, USBRX);

I2C accel(I2C_SDA0, I2C_SCL0);

AnalogIn ambientLight(p6);

PinDetect  user_btn_1 ( p11, PullUp );
PinDetect  user_btn_2 ( p0,  PullUp );

//InterruptIn int2(p0);

//InterruptIn user_btn_1(p11);

PwmOut ledR(LED1);
PwmOut ledG(LED3);
PwmOut ledB(LED2);

int accel_int_mode = 0;
int opMode = 0;
int opModeMax = 3;


//MMA845x(I2C &i2c, InterruptIn &int1, InterruptIn &int2, MMA845x_SA0 const i2c_addr);
MMA845x accel_0(accel, p4, p23, MMA845x::SA0_VSS);
//MMA845x accel_0(accel, int1, int2, MMA845x::SA0_VSS);

#ifdef USE_EEPROM
SPI spi1(SPI_PSELMOSI1, SPI_PSELMISO1, SPI_PSELSCK1);
DigitalOut spi_cs(SPI_PSELSS1);
#endif

void toggleLED(PwmOut *led)
{
    if (led->read() < 0.001)
    {
        printf("led on");
        led->write(.2);
    }
    else
    {
        printf("led off, %f",led->read());
        led->write(0);
    }
}

void btn_1_press(void)
{
    if (++opMode == opModeMax) {opMode = 0;}
    printf("OpMode = %d\n\r",opMode);
    switch ( opMode )
    {
        case 0:
            accel_0.disable();
            ledR = 0.2;
            ledG = 0;
            ledB = 0;
            
            break;
        case 1:
            ledR = 0;
            ledG = 0.2;
            ledB = 0;
            accel_0.enablePulseMode();
            break;
        default:
            ledR = 0;
            ledG = 0;
            ledB = 0.2;
            accel_0.enableDataReadyMode();
            break;
    }
}

void btn_2_press(void)
{
    //ledR = !ledR;
    //printf("Button 2 Pressed!\n\r");
    switch ( opMode )
    {
        case 0:
            break;
        case 2:
            if (accel_int_mode == 0)
            {
                accel_int_mode = 1;
            }
            else
            {
                accel_int_mode = 0;
            }
            accel_0.setIntMode(accel_int_mode);
            break;
        default:
            break;
            //do nothing
    }
}

void zTap(void)
{       
    switch ( opMode )
    {
        case 0:
            break;
        case 1:
            toggleLED(&ledB);  
            break;
        default:
            toggleLED(&ledG);  
            break;
    }
      
}
void SysTick_Handler (void)
{
    toggleLED(&ledB); 
}

int main()
{
    pc.baud(115200);
    //int readings[3] = {0, 0, 0};
    ledR.period_ms(10);
    ledG.period_ms(10);
    ledB.period_ms(10);
    
    ledR = .1;
    ledG = .1;
    ledB = .1;
    
    
    //SysTick_Config(1000);
    //SysTick_Enable();
    //systick.attach_us(&systimer, 2500);
    
    user_btn_1.setAssertValue( 0 );
    user_btn_2.setAssertValue( 0 );
    user_btn_1.attach_asserted( &btn_1_press );
    //user_btn_1.mode( PullUp );
    //user_btn_1.rise( &btn_1_press );
    user_btn_2.attach_asserted( &btn_2_press );
    user_btn_1.setSampleFrequency( 20000 ); 
    user_btn_2.setSampleFrequency( 20000 ); // Defaults to 20ms.
    
    accel_0.attachZAxisPulse( &zTap );
    
    //int adr = 0x3A;
    char data[2];
    char cmd = 0x0D;
    accel.write(0x3A, &cmd, 1, true);
    accel.read(0x3A, &data[0], 1);
    //printf("\n\r\n\rWho am I?: 0x%.2X\n\r",data[0]);
    
    //accel_0.enableMotionMode();
    //accel_0.registerDump();
    accel_0.enableDataReadyMode();
    
    
    //--------------------
    double x = accel_0.getX();
    double y = accel_0.getY();
    double z = accel_0.getZ();
    printf("X: %d, Y: %d, Z: %d\n\r", x , y, z);
    

    while (50) {
        sleep();
    }

}