Pulse Detection in z-axis

Dependencies:   MMA8451Q8b SLCD mbed

Revision:
3:53d47a5dbb2c
Parent:
2:17a0550771c4
Child:
4:ba9ca0a0f87e
--- a/main.cpp	Sun Feb 01 19:26:52 2015 +0000
+++ b/main.cpp	Tue Feb 03 18:05:52 2015 +0000
@@ -1,29 +1,67 @@
 #include "mbed.h"
 #include "MMA8451Q8.h"
 #include "SLCD.h"
-#define RELAYON 0
-#define RELAYOFF 1
-#define LEDDELAY 0.75
-#define WAITDELAY 3.0
+
+#define BLINKTIME   0.7
+#define RELAYON     0
+#define RELAYOFF    1
+#define LEDDELAY    0.75
+#define WAITDELAY   3.0
+#define LCDLEN      10
+
+#define REG_WHO_AM_I      0x0D
+#define XYZ_DATA_CFG      0x0E
+
+#define REG_OUT_X_MSB     0x01
+#define REG_OUT_Y_MSB     0x03
+#define REG_OUT_Z_MSB     0x05
+#define REG_PULSE_SRC     0x22
+#define REG_PULSE_CFG     0x21
+
+#define MAX_2G            0x00
+#define MAX_4G            0x01
+#define MAX_8G            0x02
+
+//#define PRINTDBUG
+// Accelerometer SPI pins
+#if   defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
+  PinName const SDA = PTE25;
+  PinName const SCL = PTE24;
+#elif defined (TARGET_KL05Z)
+  PinName const SDA = PTB4;
+  PinName const SCL = PTB3;
+#else
+  #error TARGET NOT DEFINED
+#endif
+
+#define MMA8451_I2C_ADDRESS (0x1d<<1)
  
 Ticker ledBlink; // timinginterrupt for RED led
 InterruptIn mybutton(PTC3);  //push botton with internal pullup
 DigitalOut myled(LED_RED); // red led
 DigitalOut relay(LED_GREEN); // green led
 
+ MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
  
 float delay = WAITDELAY;
 int relayState = RELAYOFF;
 int outState = false;
 SLCD slcd; //define LCD display
-char LCDMessages[2][10] = {"TRUE", "FALS"};
+char LCDMessages[2][LCDLEN] = {"TRUE", "FALS"};
 
 
-void LCDMess(char *lMess){
-        slcd.Home();// message stays till next update
+void LCDMess(char *lMess, float dWait){
+        slcd.Home();
         slcd.clear();
         slcd.printf(lMess);
-}
+        wait(dWait);
+} 
+void LCDMessNoDwell(char *lMess){
+        slcd.Home();
+        slcd.clear();
+        slcd.printf(lMess);
+} 
+
 
 void LEDBlinker(){  // RED LED interrupt
     outState = !outState; 
@@ -39,13 +77,45 @@
 
 int main()
 {
+    uint8_t regData = MAX_4G; 
+    uint8_t latchData = 0x40; //0b01000000; //for pulse config register
+    uint8_t axisData = 0x10; //0b00010000;
+    char lcdData[LCDLEN];
+    
     myled.write(outState);
     relay.write(relayState);
+    
+// set up interrrupts to be used later for taps
     mybutton.fall(&pressed);
+// set up interrrupts to be used later for taps
     ledBlink.attach(&LEDBlinker, LEDDELAY);
+    
+// Check to see if accerlometer is alive and well
+    acc.setGLimit(MAX_2G); // For now set to 2g
+    acc.readRegs(XYZ_DATA_CFG, &regData, 1);
+    sprintf (lcdData,"%x",regData); // Note displaying in hexidecimal
+    LCDMess(lcdData,BLINKTIME);
+    acc.readRegs(REG_WHO_AM_I, &regData, 1);
+    sprintf (lcdData,"%x",regData);
+    LCDMess(lcdData,BLINKTIME); 
+    
     while (true) { 
-    // other things can be put here.  
-        LCDMess(LCDMessages[relayState]);  
+
+    // Read Pulse Source Data and check to see if things have been set
+        acc.readRegs(REG_PULSE_CFG, &regData, 1);  // check it
+        sprintf (lcdData,"%x",regData);
+        LCDMess(lcdData,BLINKTIME); 
+        
+        acc.setPulseConfiguration(latchData, axisData); // write the data
+        acc.readRegs(REG_PULSE_CFG, &regData, 1);  // check it
+        sprintf (lcdData,"%x",regData);
+        LCDMess(lcdData,BLINKTIME); 
+        
+        acc.readRegs(REG_PULSE_SRC, &regData, 1);
+        sprintf (lcdData,"%x",regData);
+        LCDMess(lcdData,BLINKTIME); 
+        
+        LCDMessNoDwell(LCDMessages[relayState]);  
         wait(delay);
     }
 }