attempt at pt 2 of the midterm

Dependencies:   MMA8451Q8b SLCD mbed

Files at this revision

API Documentation at this revision

Comitter:
CKMonroe
Date:
Wed Mar 15 05:34:55 2017 +0000
Commit message:
1

Changed in this revision

KL46z_single_tap_2016..cpp Show annotated file Show diff for this revision Revisions of this file
MMA8451Q8g.lib Show annotated file Show diff for this revision Revisions of this file
SLCD.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/KL46z_single_tap_2016..cpp	Wed Mar 15 05:34:55 2017 +0000
@@ -0,0 +1,203 @@
+#include "mbed.h"
+#include "MMA8451Q8g.h"
+#include "SLCD.h"
+
+#define BLINKTIME   1.5
+#define RELAYON     0
+#define RELAYOFF    1
+#define LEDDELAY    0.4
+#define WAITDELAY   0.7
+#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_CFG     0x21
+#define REG_PULSE_SRC     0x22
+#define REG_PULSE_THSZ    0x25
+
+//#define REH_PULSE_TMLT    0x26
+//CKM- changed this to 0x38 to try to set
+//transient tap detection limit to 35ms
+#define REH_PULSE_TMLT  0x38
+
+#define REG_CTRL_4        0x2D
+#define REG_CTRL_5        0x2E
+
+#define MAX_2G            0x00
+#define MAX_4G            0x01
+#define MAX_8G            0x02
+
+//CKM- leaving set_interrupt to change the pin to enable interrupts,
+//but changing the interrupt line to INT2
+#define SET_INTERRUPT     0x08 
+//#define SET_INT_LINE      0x08
+#define SET_INT_LINE      0x2E&0xF7
+
+//#define SET_THZ           0x20 //  See Table 49 in data sheet
+//CKM- changed this to 40 counts,
+//which is 0x28 in hex
+#define SET_THZ           0x28
+
+//CKM- adding another define for the 400Hz mask
+#define     HZ_MASK       0x08
+#define REG_CTRL_REG_1    0x2A
+
+/***********
+0b0010 0000
+2g/0.063g/count = 32 counts
+************/
+#define SET_TMLT          0x18 // See Talbe 51 in data sheet
+/******
+0b0001 1000
+24 = 0x18
+time step at 800Hz ODR = 0.625ms
+24x0.625 = 15 ms
+******/
+
+//#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 MMA8451QInt1(PTC5);  //push botton with internal pullup
+DigitalOut myled(LED_RED); // red led
+DigitalOut relay(LED_GREEN); // green led
+
+//CKM- added serial pc object to print to terminal
+Serial pc(USBTX, USBRX);
+
+ MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
+ 
+float delay = WAITDELAY;
+int relayState = RELAYOFF;
+int outState = false;
+SLCD slcd; //define LCD display
+char LCDMessages[2][LCDLEN] = {"TRUE", "FALS"};
+
+
+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);
+} 
+
+// Interrupt routines
+void LEDBlinker(){  // RED LED interrupt
+    outState = !outState; 
+    myled.write(outState);
+}
+
+void GreenLEDBlinker(){  // Green LED interrupt
+    //uint8_t i_regData; 
+    relayState = !relayState; 
+    relay.write(relayState);
+    //acc.readRegs(REG_PULSE_SRC, &i_regData, 1); // Clear the tap event
+}        
+
+// end interrupt routines
+
+int main()
+{
+    uint8_t regData; 
+    uint8_t latchData = 0x40; //0b01000000; //for pulse config register
+    //uint8_t axisData = 0x10; //0b00010000;
+    
+    //CKM- changed this to 0x20- 0b00100000,
+    //to register the axis as a double Z tap only
+    uint8_t axisData = 0x20;//
+
+    char lcdData[LCDLEN];
+    
+    myled.write(outState);
+    relay.write(relayState);
+    
+// set up interrrupts to be used later for taps
+    MMA8451QInt1.rise(&GreenLEDBlinker);
+    MMA8451QInt1.mode(PullNone); 
+   
+// set up interrrupts to be used later for taps
+    ledBlink.attach(&LEDBlinker, LEDDELAY);
+  
+// 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);
+    
+    //CKM: print to terminal////////////////////////
+    pc.printf("reg Data: ",regData);
+    
+    LCDMess(lcdData,BLINKTIME); 
+    
+// *********** Initialize for tap tecognition ***********      
+    regData = latchData | axisData;
+    acc.setRegisterInStandby(REG_PULSE_CFG, regData); // write the data
+    acc.readRegs(REG_PULSE_CFG, &regData, 1);  // check it
+    sprintf (lcdData,"%x",regData);
+    
+    //CKM: print to terminal//////////////////////
+    pc.printf("reg Data: ",regData);
+    
+    LCDMess(lcdData,BLINKTIME);     
+    
+// Check to see if accerlometer is alive and well
+    acc.setGLimit(MAX_4G); // For now set to 2g
+    acc.readRegs(XYZ_DATA_CFG, &regData, 1);
+    sprintf (lcdData,"%x",regData); // Note displaying in hexidecimal
+    
+    //CKM: print to terminal/////////////////
+    pc.printf("reg Data: ",regData);
+    
+    LCDMess(lcdData,BLINKTIME);
+    
+    //CKM: added this line of code to set the KL into 400Hz mode
+    acc.setRegisterInStandby(REG_CTRL_REG_1, (REG_CTRL_REG_1 | HZ_MASK) );
+    
+// Setup single-tap pulse prarameters.
+   acc.setRegisterInStandby(REG_PULSE_THSZ, SET_THZ); // write the data
+   acc.setRegisterInStandby(REH_PULSE_TMLT, SET_TMLT); // write the data 
+      
+// Set up (pulse) interrupt to INT1 pin
+    acc.setRegisterInStandby(REG_CTRL_4, SET_INTERRUPT); // write the data
+    acc.setRegisterInStandby(REG_CTRL_5, SET_INT_LINE); // write the data
+// End or seetup    
+
+    acc.readRegs(REG_WHO_AM_I, &regData, 1);
+    sprintf (lcdData,"%x",regData);
+    
+    //CKM: print to terminal///////////////////
+    pc.printf("reg Data: ",regData);
+    
+    LCDMess(lcdData,BLINKTIME); 
+  
+    
+    while (true) { 
+        acc.readRegs(REG_PULSE_SRC, &regData, 1);
+        sprintf (lcdData,"%x",regData);
+        
+        //CKM: print to terminal////////////////////
+        pc.printf("reg Data: ",regData);
+        
+        LCDMess(lcdData,BLINKTIME);           
+        LCDMessNoDwell(LCDMessages[relayState]);  
+        wait(delay);
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MMA8451Q8g.lib	Wed Mar 15 05:34:55 2017 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/scohennm/code/MMA8451Q8b/#12b18fdb72f7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SLCD.lib	Wed Mar 15 05:34:55 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/Sissors/code/SLCD/#ef2b3b7f1b01
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Mar 15 05:34:55 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/04dd9b1680ae
\ No newline at end of file