Dan Bryant / firstRig

Dependencies:   BLE_API PinDetect mbed-src-bmd-200

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "MMA845x.h"
00002 #include "PinDetect.h"
00003 #include "mbed.h"
00004  
00005 Serial pc(USBTX, USBRX);
00006 
00007 I2C accel(I2C_SDA0, I2C_SCL0);
00008 
00009 AnalogIn ambientLight(p6);
00010 
00011 PinDetect  user_btn_1 ( p11, PullUp );
00012 PinDetect  user_btn_2 ( p0,  PullUp );
00013 
00014 //InterruptIn int2(p0);
00015 
00016 //InterruptIn user_btn_1(p11);
00017 
00018 PwmOut ledR(LED1);
00019 PwmOut ledG(LED3);
00020 PwmOut ledB(LED2);
00021 
00022 int accel_int_mode = 0;
00023 int opMode = 0;
00024 int opModeMax = 3;
00025 
00026 
00027 //MMA845x(I2C &i2c, InterruptIn &int1, InterruptIn &int2, MMA845x_SA0 const i2c_addr);
00028 MMA845x accel_0(accel, p4, p23, MMA845x::SA0_VSS );
00029 //MMA845x accel_0(accel, int1, int2, MMA845x::SA0_VSS);
00030 
00031 #ifdef USE_EEPROM
00032 SPI spi1(SPI_PSELMOSI1, SPI_PSELMISO1, SPI_PSELSCK1);
00033 DigitalOut spi_cs(SPI_PSELSS1);
00034 #endif
00035 
00036 void toggleLED(PwmOut *led)
00037 {
00038     if (led->read() < 0.001)
00039     {
00040         printf("led on");
00041         led->write(.2);
00042     }
00043     else
00044     {
00045         printf("led off, %f",led->read());
00046         led->write(0);
00047     }
00048 }
00049 
00050 void btn_1_press(void)
00051 {
00052     if (++opMode == opModeMax) {opMode = 0;}
00053     printf("OpMode = %d\n\r",opMode);
00054     switch ( opMode )
00055     {
00056         case 0:
00057             accel_0.disable();
00058             ledR = 0.2;
00059             ledG = 0;
00060             ledB = 0;
00061             
00062             break;
00063         case 1:
00064             ledR = 0;
00065             ledG = 0.2;
00066             ledB = 0;
00067             accel_0.enablePulseMode();
00068             break;
00069         default:
00070             ledR = 0;
00071             ledG = 0;
00072             ledB = 0.2;
00073             accel_0.enableDataReadyMode();
00074             break;
00075     }
00076 }
00077 
00078 void btn_2_press(void)
00079 {
00080     //ledR = !ledR;
00081     //printf("Button 2 Pressed!\n\r");
00082     switch ( opMode )
00083     {
00084         case 0:
00085             break;
00086         case 2:
00087             if (accel_int_mode == 0)
00088             {
00089                 accel_int_mode = 1;
00090             }
00091             else
00092             {
00093                 accel_int_mode = 0;
00094             }
00095             accel_0.setIntMode(accel_int_mode);
00096             break;
00097         default:
00098             break;
00099             //do nothing
00100     }
00101 }
00102 
00103 void zTap(void)
00104 {       
00105     switch ( opMode )
00106     {
00107         case 0:
00108             break;
00109         case 1:
00110             toggleLED(&ledB);  
00111             break;
00112         default:
00113             toggleLED(&ledG);  
00114             break;
00115     }
00116       
00117 }
00118 void SysTick_Handler (void)
00119 {
00120     toggleLED(&ledB); 
00121 }
00122 
00123 int main()
00124 {
00125     pc.baud(115200);
00126     //int readings[3] = {0, 0, 0};
00127     ledR.period_ms(10);
00128     ledG.period_ms(10);
00129     ledB.period_ms(10);
00130     
00131     ledR = .1;
00132     ledG = .1;
00133     ledB = .1;
00134     
00135     
00136     //SysTick_Config(1000);
00137     //SysTick_Enable();
00138     //systick.attach_us(&systimer, 2500);
00139     
00140     user_btn_1.setAssertValue( 0 );
00141     user_btn_2.setAssertValue( 0 );
00142     user_btn_1.attach_asserted( &btn_1_press );
00143     //user_btn_1.mode( PullUp );
00144     //user_btn_1.rise( &btn_1_press );
00145     user_btn_2.attach_asserted( &btn_2_press );
00146     user_btn_1.setSampleFrequency( 20000 ); 
00147     user_btn_2.setSampleFrequency( 20000 ); // Defaults to 20ms.
00148     
00149     accel_0.attachZAxisPulse( &zTap );
00150     
00151     //int adr = 0x3A;
00152     char data[2];
00153     char cmd = 0x0D;
00154     accel.write(0x3A, &cmd, 1, true);
00155     accel.read(0x3A, &data[0], 1);
00156     //printf("\n\r\n\rWho am I?: 0x%.2X\n\r",data[0]);
00157     
00158     //accel_0.enableMotionMode();
00159     //accel_0.registerDump();
00160     accel_0.enableDataReadyMode();
00161     
00162     
00163     //--------------------
00164     double x = accel_0.getX();
00165     double y = accel_0.getY();
00166     double z = accel_0.getZ();
00167     printf("X: %d, Y: %d, Z: %d\n\r", x , y, z);
00168     
00169 
00170     while (50) {
00171         sleep();
00172     }
00173 
00174 }