Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: MMA8451Q8b SLCD mbed
Fork of KL46z_single_tap_2017 by
Revision 14:850874a17619, committed 2017-03-15
- Comitter:
- mturner5
- Date:
- Wed Mar 15 11:05:56 2017 +0000
- Parent:
- 13:254e382efeab
- Commit message:
- midterm;
Changed in this revision
| KL46z_double_tap_2016..cpp | Show annotated file Show diff for this revision Revisions of this file |
| KL46z_single_tap_2016..cpp | Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/KL46z_double_tap_2016..cpp Wed Mar 15 11:05:56 2017 +0000
@@ -0,0 +1,170 @@
+#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 NOPE "nope"
+#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
+#define REG_CTRL_4 0x2D
+#define REG_CTRL_5 0x2E
+
+#define MAX_2G 0x00
+#define MAX_4G 0x01
+#define MAX_8G 0x02
+#define SET_INTERRUPT 0x08 //using interrupt INT1 PTC5
+#define SET_INT_LINE 0x00
+#define SET_THZ 0x28 // See Table 49 in data sheet
+/***********
+0b0010 0000
+2g/0.063g/count = 32 counts
+************/
+#define SET_TMLT 0x1C // See Talbe 51 in data sheet
+/******
+0b0001 1000
+24 = 0x18
+time step at 800Hz ODR = 0.625ms
+24x0.625 = 15 ms
+******/
+Serial pc(USBTX, USBRX);
+//#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(PTD1); //push botton with internal pullup
+//InterruptIn MMA8451QInt1(PTC5);
+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][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()
+{
+
+ //This works on coolterm but the values after the comma
+ //don't work, for some reason it won't print out the variables
+ //of the defines, but I know this is how you would do it.
+ pc.printf("CTRL4", REG_CTRL_4);
+ pc.printf("CTRL5", REG_CTRL_5);
+ pc.printf( "Pulse Source", REG_PULSE_SRC);
+ pc.printf("Pulse Thres", REG_PULSE_THSZ);
+ pc.printf("Set Interrupt", SET_INTERRUPT);
+ pc.printf("Set Int Line", SET_INT_LINE);
+ pc.printf("Set Thres", SET_THZ);
+ pc.printf("Hello World!\n");
+
+ uint8_t regData;
+ uint8_t latchData = 0x20; //0b01000000; //for pulse config register
+ uint8_t axisData = 0x08; //0b00010000;
+
+ 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, ®Data, 1); // check it
+ sprintf (lcdData,"%x",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, ®Data, 1); // check it
+ sprintf (lcdData,"%x",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, ®Data, 1);
+ sprintf (lcdData,"%x",regData); // Note displaying in hexidecimal
+ LCDMess(lcdData,BLINKTIME);
+
+// 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, ®Data, 1);
+ sprintf (lcdData,"%x",regData);
+ LCDMess(lcdData,BLINKTIME);
+
+
+ while (true) {
+ acc.readRegs(REG_PULSE_SRC, ®Data, 1);
+ sprintf (lcdData,"%x",regData);
+ LCDMess(lcdData,BLINKTIME);
+ LCDMessNoDwell(LCDMessages[relayState]);
+ wait(delay);
+ }
+}
\ No newline at end of file
--- a/KL46z_single_tap_2016..cpp Wed Mar 15 07:04:12 2017 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,157 +0,0 @@
-#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
-#define REG_CTRL_4 0x2D
-#define REG_CTRL_5 0x2E
-
-#define MAX_2G 0x00
-#define MAX_4G 0x01
-#define MAX_8G 0x02
-#define SET_INTERRUPT 0x00 //using interrupt INT1 PTC5
-#define SET_INT_LINE 0x00
-#define SET_THZ 0x28 // See Table 49 in data sheet
-/***********
-0b0010 0000
-2g/0.063g/count = 32 counts
-************/
-#define SET_TMLT 0x38 // 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(PTD1); //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][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;
-
- 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, ®Data, 1); // check it
- sprintf (lcdData,"%x",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, ®Data, 1); // check it
- sprintf (lcdData,"%x",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, ®Data, 1);
- sprintf (lcdData,"%x",regData); // Note displaying in hexidecimal
- LCDMess(lcdData,BLINKTIME);
-
-// 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, ®Data, 1);
- sprintf (lcdData,"%x",regData);
- LCDMess(lcdData,BLINKTIME);
-
-
- while (true) {
- acc.readRegs(REG_PULSE_SRC, ®Data, 1);
- sprintf (lcdData,"%x",regData);
- LCDMess(lcdData,BLINKTIME);
- LCDMessNoDwell(LCDMessages[relayState]);
- wait(delay);
- }
-}
\ No newline at end of file
