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_generic by
main.cpp@12:025808f5dc44, 2015-02-18 (annotated)
- Committer:
- vbharam
- Date:
- Wed Feb 18 20:03:34 2015 +0000
- Revision:
- 12:025808f5dc44
- Parent:
- 11:adb9adf636cf
WORKING;
Who changed what in which revision?
| User | Revision | Line number | New 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, ®Data, 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, ®Data, 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, ®Data, 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, ®Data, 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, ®Data, 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 | } | 
