Stanley Cohen / Mbed 2 deprecated KL46z_s_t_160301

Dependencies:   MMA8451Q8b SLCD mbed

Committer:
scohennm
Date:
Wed Feb 18 15:08:07 2015 +0000
Revision:
10:c7ac4fd52536
Parent:
9:08acb96591a8
Include time window and logic modifications. Note that accelerometer sometimes needs to be powered off to clear settings.

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 10:c7ac4fd52536 5 #define BLINKTIME 0.2
scohennm 3:53d47a5dbb2c 6 #define RELAYON 0
scohennm 3:53d47a5dbb2c 7 #define RELAYOFF 1
scohennm 10:c7ac4fd52536 8 #define LEDDELAY 0.4
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
scohennm 10:c7ac4fd52536 21 #define REH_PULSE_TMLT 0x25
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
scohennm 10:c7ac4fd52536 30 #define SET_THZ 0x20 // See Table 49 in data sheet
scohennm 10:c7ac4fd52536 31 #define SET_TMLT 0x18 // See Talbe 51 in data sheet
scohennm 3:53d47a5dbb2c 32
scohennm 3:53d47a5dbb2c 33 //#define PRINTDBUG
scohennm 3:53d47a5dbb2c 34 // Accelerometer SPI pins
scohennm 3:53d47a5dbb2c 35 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
scohennm 3:53d47a5dbb2c 36 PinName const SDA = PTE25;
scohennm 3:53d47a5dbb2c 37 PinName const SCL = PTE24;
scohennm 3:53d47a5dbb2c 38 #elif defined (TARGET_KL05Z)
scohennm 3:53d47a5dbb2c 39 PinName const SDA = PTB4;
scohennm 3:53d47a5dbb2c 40 PinName const SCL = PTB3;
scohennm 3:53d47a5dbb2c 41 #else
scohennm 3:53d47a5dbb2c 42 #error TARGET NOT DEFINED
scohennm 3:53d47a5dbb2c 43 #endif
scohennm 3:53d47a5dbb2c 44
scohennm 3:53d47a5dbb2c 45 #define MMA8451_I2C_ADDRESS (0x1d<<1)
bcostm 0:912303e63cbd 46
scohennm 1:65b0e488f02a 47 Ticker ledBlink; // timinginterrupt for RED led
vbharam 5:1fe35a74799a 48 //InterruptIn mybutton(PTC3); //push botton with internal pullup
vbharam 5:1fe35a74799a 49 InterruptIn MMA8451QInt1(PTC5); //push botton with internal pullup
scohennm 1:65b0e488f02a 50 DigitalOut myled(LED_RED); // red led
scohennm 1:65b0e488f02a 51 DigitalOut relay(LED_GREEN); // green led
scohennm 1:65b0e488f02a 52
scohennm 3:53d47a5dbb2c 53 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
bcostm 0:912303e63cbd 54
scohennm 1:65b0e488f02a 55 float delay = WAITDELAY;
scohennm 1:65b0e488f02a 56 int relayState = RELAYOFF;
scohennm 1:65b0e488f02a 57 int outState = false;
scohennm 1:65b0e488f02a 58 SLCD slcd; //define LCD display
scohennm 3:53d47a5dbb2c 59 char LCDMessages[2][LCDLEN] = {"TRUE", "FALS"};
scohennm 1:65b0e488f02a 60
scohennm 1:65b0e488f02a 61
scohennm 3:53d47a5dbb2c 62 void LCDMess(char *lMess, float dWait){
scohennm 3:53d47a5dbb2c 63 slcd.Home();
scohennm 1:65b0e488f02a 64 slcd.clear();
scohennm 1:65b0e488f02a 65 slcd.printf(lMess);
scohennm 3:53d47a5dbb2c 66 wait(dWait);
scohennm 3:53d47a5dbb2c 67 }
scohennm 3:53d47a5dbb2c 68 void LCDMessNoDwell(char *lMess){
scohennm 3:53d47a5dbb2c 69 slcd.Home();
scohennm 3:53d47a5dbb2c 70 slcd.clear();
scohennm 3:53d47a5dbb2c 71 slcd.printf(lMess);
scohennm 3:53d47a5dbb2c 72 }
scohennm 3:53d47a5dbb2c 73
scohennm 10:c7ac4fd52536 74 // Interrupt routines
scohennm 1:65b0e488f02a 75 void LEDBlinker(){ // RED LED interrupt
scohennm 1:65b0e488f02a 76 outState = !outState;
scohennm 1:65b0e488f02a 77 myled.write(outState);
scohennm 1:65b0e488f02a 78 }
vbharam 5:1fe35a74799a 79
vbharam 5:1fe35a74799a 80 void GreenLEDBlinker(){ // Green LED interrupt
scohennm 10:c7ac4fd52536 81 //uint8_t i_regData;
vbharam 5:1fe35a74799a 82 relayState = !relayState;
scohennm 1:65b0e488f02a 83 relay.write(relayState);
scohennm 10:c7ac4fd52536 84 //acc.readRegs(REG_PULSE_SRC, &i_regData, 1); // Clear the tap event
scohennm 10:c7ac4fd52536 85 }
scohennm 10:c7ac4fd52536 86
scohennm 10:c7ac4fd52536 87 // end interrupt routines
scohennm 1:65b0e488f02a 88
bcostm 0:912303e63cbd 89 int main()
bcostm 0:912303e63cbd 90 {
scohennm 10:c7ac4fd52536 91 uint8_t regData;
scohennm 3:53d47a5dbb2c 92 uint8_t latchData = 0x40; //0b01000000; //for pulse config register
scohennm 3:53d47a5dbb2c 93 uint8_t axisData = 0x10; //0b00010000;
vbharam 9:08acb96591a8 94
scohennm 3:53d47a5dbb2c 95 char lcdData[LCDLEN];
scohennm 3:53d47a5dbb2c 96
scohennm 1:65b0e488f02a 97 myled.write(outState);
scohennm 1:65b0e488f02a 98 relay.write(relayState);
scohennm 3:53d47a5dbb2c 99
scohennm 3:53d47a5dbb2c 100 // set up interrrupts to be used later for taps
vbharam 5:1fe35a74799a 101 MMA8451QInt1.rise(&GreenLEDBlinker);
vbharam 9:08acb96591a8 102 MMA8451QInt1.mode(PullNone);
vbharam 5:1fe35a74799a 103
scohennm 3:53d47a5dbb2c 104 // set up interrrupts to be used later for taps
scohennm 1:65b0e488f02a 105 ledBlink.attach(&LEDBlinker, LEDDELAY);
scohennm 10:c7ac4fd52536 106
scohennm 10:c7ac4fd52536 107 // Read Pulse Source Data and check to see if things have been set
scohennm 10:c7ac4fd52536 108 acc.readRegs(REG_PULSE_CFG, &regData, 1); // check it
scohennm 10:c7ac4fd52536 109 sprintf (lcdData,"%x",regData);
scohennm 10:c7ac4fd52536 110 LCDMess(lcdData,BLINKTIME);
scohennm 10:c7ac4fd52536 111
scohennm 10:c7ac4fd52536 112 // *********** Initialize for tap tecognition ***********
scohennm 10:c7ac4fd52536 113 regData = latchData | axisData;
scohennm 10:c7ac4fd52536 114 acc.setRegisterInStandby(REG_PULSE_CFG, regData); // write the data
scohennm 10:c7ac4fd52536 115 acc.readRegs(REG_PULSE_CFG, &regData, 1); // check it
scohennm 10:c7ac4fd52536 116 sprintf (lcdData,"%x",regData);
scohennm 10:c7ac4fd52536 117 LCDMess(lcdData,BLINKTIME);
scohennm 10:c7ac4fd52536 118
scohennm 3:53d47a5dbb2c 119 // Check to see if accerlometer is alive and well
scohennm 10:c7ac4fd52536 120 acc.setGLimit(MAX_4G); // For now set to 2g
scohennm 3:53d47a5dbb2c 121 acc.readRegs(XYZ_DATA_CFG, &regData, 1);
scohennm 3:53d47a5dbb2c 122 sprintf (lcdData,"%x",regData); // Note displaying in hexidecimal
scohennm 3:53d47a5dbb2c 123 LCDMess(lcdData,BLINKTIME);
vbharam 9:08acb96591a8 124
scohennm 10:c7ac4fd52536 125 // Setup single-tap pulse prarameters.
scohennm 10:c7ac4fd52536 126 acc.setRegisterInStandby(REG_PULSE_THSZ, SET_THZ); // write the data
scohennm 10:c7ac4fd52536 127 acc.setRegisterInStandby(REH_PULSE_TMLT, SET_TMLT); // write the data
scohennm 10:c7ac4fd52536 128
vbharam 9:08acb96591a8 129 // Set up (pulse) interrupt to INT1 pin
vbharam 9:08acb96591a8 130 acc.setRegisterInStandby(REG_CTRL_4, SET_INTERRUPT); // write the data
vbharam 9:08acb96591a8 131 acc.setRegisterInStandby(REG_CTRL_5, SET_INT_LINE); // write the data
scohennm 10:c7ac4fd52536 132 // End or seetup
scohennm 10:c7ac4fd52536 133
scohennm 3:53d47a5dbb2c 134 acc.readRegs(REG_WHO_AM_I, &regData, 1);
scohennm 3:53d47a5dbb2c 135 sprintf (lcdData,"%x",regData);
scohennm 3:53d47a5dbb2c 136 LCDMess(lcdData,BLINKTIME);
scohennm 10:c7ac4fd52536 137
vbharam 5:1fe35a74799a 138
scohennm 1:65b0e488f02a 139 while (true) {
scohennm 3:53d47a5dbb2c 140 acc.readRegs(REG_PULSE_SRC, &regData, 1);
scohennm 3:53d47a5dbb2c 141 sprintf (lcdData,"%x",regData);
scohennm 10:c7ac4fd52536 142 LCDMess(lcdData,BLINKTIME);
scohennm 3:53d47a5dbb2c 143 LCDMessNoDwell(LCDMessages[relayState]);
bcostm 0:912303e63cbd 144 wait(delay);
bcostm 0:912303e63cbd 145 }
vbharam 5:1fe35a74799a 146 }