Vishal Bharam / Mbed 2 deprecated VISHAL_KL46z_single_tap_generic

Dependencies:   MMA8451Q8b SLCD mbed

Fork of KL46z_single_tap_generic by Vishal Bharam

Committer:
vbharam
Date:
Wed Feb 18 20:03:34 2015 +0000
Revision:
12:025808f5dc44
Parent:
11:adb9adf636cf
WORKING;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bcostm 0:912303e63cbd 1 #include "mbed.h"
scohennm 4:ba9ca0a0f87e 2 #include "MMA8451Q8g.h"
scohennm 1:65b0e488f02a 3 #include "SLCD.h"
scohennm 3:53d47a5dbb2c 4
scohennm 3:53d47a5dbb2c 5 #define BLINKTIME 0.7
scohennm 3:53d47a5dbb2c 6 #define RELAYON 0
scohennm 3:53d47a5dbb2c 7 #define RELAYOFF 1
scohennm 3:53d47a5dbb2c 8 #define LEDDELAY 0.75
scohennm 4:ba9ca0a0f87e 9 #define WAITDELAY 0.7
scohennm 3:53d47a5dbb2c 10 #define LCDLEN 10
scohennm 3:53d47a5dbb2c 11
scohennm 3:53d47a5dbb2c 12 #define REG_WHO_AM_I 0x0D
scohennm 3:53d47a5dbb2c 13 #define XYZ_DATA_CFG 0x0E
scohennm 3:53d47a5dbb2c 14
scohennm 3:53d47a5dbb2c 15 #define REG_OUT_X_MSB 0x01
scohennm 3:53d47a5dbb2c 16 #define REG_OUT_Y_MSB 0x03
scohennm 3:53d47a5dbb2c 17 #define REG_OUT_Z_MSB 0x05
vbharam 5:1fe35a74799a 18 #define REG_PULSE_CFG 0x21
scohennm 3:53d47a5dbb2c 19 #define REG_PULSE_SRC 0x22
vbharam 5:1fe35a74799a 20 #define REG_PULSE_THSZ 0x25
vbharam 12:025808f5dc44 21 #define REG_PULSE_TMLT 0x26
vbharam 5:1fe35a74799a 22 #define REG_CTRL_4 0x2D
vbharam 5:1fe35a74799a 23 #define REG_CTRL_5 0x2E
scohennm 3:53d47a5dbb2c 24
scohennm 3:53d47a5dbb2c 25 #define MAX_2G 0x00
scohennm 3:53d47a5dbb2c 26 #define MAX_4G 0x01
scohennm 3:53d47a5dbb2c 27 #define MAX_8G 0x02
vbharam 5:1fe35a74799a 28 #define SET_INTERRUPT 0x08
vbharam 5:1fe35a74799a 29 #define SET_INT_LINE 0x08
vbharam 12:025808f5dc44 30 #define SET_THZ 0x20
vbharam 12:025808f5dc44 31 #define SET_TMLT 0x18
vbharam 5:1fe35a74799a 32
scohennm 3:53d47a5dbb2c 33
scohennm 3:53d47a5dbb2c 34 //#define PRINTDBUG
scohennm 3:53d47a5dbb2c 35 // Accelerometer SPI pins
scohennm 3:53d47a5dbb2c 36 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
scohennm 3:53d47a5dbb2c 37 PinName const SDA = PTE25;
scohennm 3:53d47a5dbb2c 38 PinName const SCL = PTE24;
scohennm 3:53d47a5dbb2c 39 #elif defined (TARGET_KL05Z)
scohennm 3:53d47a5dbb2c 40 PinName const SDA = PTB4;
scohennm 3:53d47a5dbb2c 41 PinName const SCL = PTB3;
scohennm 3:53d47a5dbb2c 42 #else
scohennm 3:53d47a5dbb2c 43 #error TARGET NOT DEFINED
scohennm 3:53d47a5dbb2c 44 #endif
scohennm 3:53d47a5dbb2c 45
scohennm 3:53d47a5dbb2c 46 #define MMA8451_I2C_ADDRESS (0x1d<<1)
bcostm 0:912303e63cbd 47
scohennm 1:65b0e488f02a 48 Ticker ledBlink; // timinginterrupt for RED led
vbharam 5:1fe35a74799a 49 //InterruptIn mybutton(PTC3); //push botton with internal pullup
vbharam 5:1fe35a74799a 50 InterruptIn MMA8451QInt1(PTC5); //push botton with internal pullup
scohennm 1:65b0e488f02a 51 DigitalOut myled(LED_RED); // red led
scohennm 1:65b0e488f02a 52 DigitalOut relay(LED_GREEN); // green led
scohennm 1:65b0e488f02a 53
scohennm 3:53d47a5dbb2c 54 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
bcostm 0:912303e63cbd 55
scohennm 1:65b0e488f02a 56 float delay = WAITDELAY;
scohennm 1:65b0e488f02a 57 int relayState = RELAYOFF;
scohennm 1:65b0e488f02a 58 int outState = false;
scohennm 1:65b0e488f02a 59 SLCD slcd; //define LCD display
scohennm 3:53d47a5dbb2c 60 char LCDMessages[2][LCDLEN] = {"TRUE", "FALS"};
scohennm 1:65b0e488f02a 61
scohennm 1:65b0e488f02a 62
scohennm 3:53d47a5dbb2c 63 void LCDMess(char *lMess, float dWait){
scohennm 3:53d47a5dbb2c 64 slcd.Home();
scohennm 1:65b0e488f02a 65 slcd.clear();
scohennm 1:65b0e488f02a 66 slcd.printf(lMess);
scohennm 3:53d47a5dbb2c 67 wait(dWait);
scohennm 3:53d47a5dbb2c 68 }
scohennm 3:53d47a5dbb2c 69 void LCDMessNoDwell(char *lMess){
scohennm 3:53d47a5dbb2c 70 slcd.Home();
scohennm 3:53d47a5dbb2c 71 slcd.clear();
scohennm 3:53d47a5dbb2c 72 slcd.printf(lMess);
scohennm 3:53d47a5dbb2c 73 }
scohennm 3:53d47a5dbb2c 74
scohennm 1:65b0e488f02a 75
scohennm 1:65b0e488f02a 76 void LEDBlinker(){ // RED LED interrupt
scohennm 1:65b0e488f02a 77 outState = !outState;
scohennm 1:65b0e488f02a 78 myled.write(outState);
scohennm 1:65b0e488f02a 79 }
vbharam 5:1fe35a74799a 80
vbharam 5:1fe35a74799a 81 void GreenLEDBlinker(){ // Green LED interrupt
vbharam 5:1fe35a74799a 82 relayState = !relayState;
scohennm 1:65b0e488f02a 83 relay.write(relayState);
bcostm 0:912303e63cbd 84 }
vbharam 5:1fe35a74799a 85
scohennm 1:65b0e488f02a 86
bcostm 0:912303e63cbd 87 int main()
bcostm 0:912303e63cbd 88 {
scohennm 3:53d47a5dbb2c 89 uint8_t regData = MAX_4G;
scohennm 3:53d47a5dbb2c 90 uint8_t latchData = 0x40; //0b01000000; //for pulse config register
scohennm 3:53d47a5dbb2c 91 uint8_t axisData = 0x10; //0b00010000;
vbharam 9:08acb96591a8 92
scohennm 3:53d47a5dbb2c 93 char lcdData[LCDLEN];
scohennm 3:53d47a5dbb2c 94
scohennm 1:65b0e488f02a 95 myled.write(outState);
scohennm 1:65b0e488f02a 96 relay.write(relayState);
scohennm 3:53d47a5dbb2c 97
scohennm 3:53d47a5dbb2c 98 // set up interrrupts to be used later for taps
vbharam 5:1fe35a74799a 99 MMA8451QInt1.rise(&GreenLEDBlinker);
vbharam 9:08acb96591a8 100 MMA8451QInt1.mode(PullNone);
vbharam 5:1fe35a74799a 101
scohennm 3:53d47a5dbb2c 102 // set up interrrupts to be used later for taps
vbharam 5:1fe35a74799a 103 // mybutton.fall(&pressed);
scohennm 1:65b0e488f02a 104 ledBlink.attach(&LEDBlinker, LEDDELAY);
vbharam 5:1fe35a74799a 105
scohennm 3:53d47a5dbb2c 106 // Check to see if accerlometer is alive and well
scohennm 3:53d47a5dbb2c 107 acc.setGLimit(MAX_2G); // For now set to 2g
scohennm 3:53d47a5dbb2c 108 acc.readRegs(XYZ_DATA_CFG, &regData, 1);
scohennm 3:53d47a5dbb2c 109 sprintf (lcdData,"%x",regData); // Note displaying in hexidecimal
scohennm 3:53d47a5dbb2c 110 LCDMess(lcdData,BLINKTIME);
vbharam 9:08acb96591a8 111
vbharam 12:025808f5dc44 112 // Set up (pulse) PARAMETERS
vbharam 12:025808f5dc44 113 acc.setRegisterInStandby(REG_PULSE_THSZ, SET_THZ); // write the data
vbharam 12:025808f5dc44 114 acc.setRegisterInStandby(REG_PULSE_TMLT, SET_TMLT); // write the data
vbharam 12:025808f5dc44 115
vbharam 9:08acb96591a8 116 // Set up (pulse) interrupt to INT1 pin
vbharam 9:08acb96591a8 117 acc.setRegisterInStandby(REG_CTRL_4, SET_INTERRUPT); // write the data
vbharam 9:08acb96591a8 118 acc.setRegisterInStandby(REG_CTRL_5, SET_INT_LINE); // write the data
vbharam 9:08acb96591a8 119
scohennm 3:53d47a5dbb2c 120 acc.readRegs(REG_WHO_AM_I, &regData, 1);
scohennm 3:53d47a5dbb2c 121 sprintf (lcdData,"%x",regData);
scohennm 3:53d47a5dbb2c 122 LCDMess(lcdData,BLINKTIME);
scohennm 3:53d47a5dbb2c 123
vbharam 10:92c7ff5198ee 124 // Read Pulse Source Data and check to see if things have been set
scohennm 3:53d47a5dbb2c 125 acc.readRegs(REG_PULSE_CFG, &regData, 1); // check it
scohennm 3:53d47a5dbb2c 126 sprintf (lcdData,"%x",regData);
scohennm 3:53d47a5dbb2c 127 LCDMess(lcdData,BLINKTIME);
scohennm 3:53d47a5dbb2c 128
scohennm 4:ba9ca0a0f87e 129 regData = latchData | axisData;
scohennm 4:ba9ca0a0f87e 130 acc.setRegisterInStandby(REG_PULSE_CFG, regData); // write the data
scohennm 3:53d47a5dbb2c 131 acc.readRegs(REG_PULSE_CFG, &regData, 1); // check it
scohennm 3:53d47a5dbb2c 132 sprintf (lcdData,"%x",regData);
scohennm 3:53d47a5dbb2c 133 LCDMess(lcdData,BLINKTIME);
vbharam 10:92c7ff5198ee 134
vbharam 10:92c7ff5198ee 135 while (true) {
scohennm 3:53d47a5dbb2c 136 acc.readRegs(REG_PULSE_SRC, &regData, 1);
scohennm 3:53d47a5dbb2c 137 sprintf (lcdData,"%x",regData);
vbharam 5:1fe35a74799a 138 LCDMess(lcdData,BLINKTIME);
scohennm 3:53d47a5dbb2c 139
scohennm 3:53d47a5dbb2c 140 LCDMessNoDwell(LCDMessages[relayState]);
bcostm 0:912303e63cbd 141 wait(delay);
bcostm 0:912303e63cbd 142 }
vbharam 5:1fe35a74799a 143 }