AnnaLouise Martinez Midterm project

Dependencies:   MMA8451Q8b SLCD mbed

Fork of KL46z_single_tap_2017_blank by Stanley Cohen

Committer:
annalou
Date:
Sun Mar 12 23:59:05 2017 +0000
Revision:
13:684b0c5c94fa
Parent:
12:10e6d0d12833
Midterm Single tap filling parameters for z - axis

Who changed what in which revision?

UserRevisionLine numberNew contents of line
scohennm 12:10e6d0d12833 1 #include "mbed.h"
scohennm 12:10e6d0d12833 2 #include "MMA8451Q8g.h"
scohennm 12:10e6d0d12833 3 #include "SLCD.h"
scohennm 12:10e6d0d12833 4
annalou 13:684b0c5c94fa 5 #define PROGNAME "ParameterFill_AnnaLouise Martinez\n\r"
scohennm 12:10e6d0d12833 6 #define BLINKTIME 1.5
scohennm 12:10e6d0d12833 7 #define RELAYON 0
scohennm 12:10e6d0d12833 8 #define RELAYOFF 1
scohennm 12:10e6d0d12833 9 #define LEDDELAY 0.4
scohennm 12:10e6d0d12833 10 #define WAITDELAY 0.7
scohennm 12:10e6d0d12833 11 #define LCDLEN 10
scohennm 12:10e6d0d12833 12
scohennm 12:10e6d0d12833 13 #define REG_WHO_AM_I 0x0D
scohennm 12:10e6d0d12833 14 #define XYZ_DATA_CFG 0x0E
scohennm 12:10e6d0d12833 15
scohennm 12:10e6d0d12833 16 #define REG_OUT_X_MSB 0x01
scohennm 12:10e6d0d12833 17 #define REG_OUT_Y_MSB 0x03
scohennm 12:10e6d0d12833 18 #define REG_OUT_Z_MSB 0x05
scohennm 12:10e6d0d12833 19 #define REG_PULSE_CFG 0x21
scohennm 12:10e6d0d12833 20 #define REG_PULSE_SRC 0x22
scohennm 12:10e6d0d12833 21 #define REG_PULSE_THSZ 0x25
scohennm 12:10e6d0d12833 22 #define REH_PULSE_TMLT 0x26
scohennm 12:10e6d0d12833 23 #define REG_CTRL_4 0x2D
scohennm 12:10e6d0d12833 24 #define REG_CTRL_5 0x2E
scohennm 12:10e6d0d12833 25
scohennm 12:10e6d0d12833 26 #define MAX_2G 0x00
scohennm 12:10e6d0d12833 27 #define MAX_4G 0x01
scohennm 12:10e6d0d12833 28 #define MAX_8G 0x02
scohennm 12:10e6d0d12833 29 /**************************************
scohennm 12:10e6d0d12833 30 You need to fill nn the missing numbers below for this to work
scohennm 12:10e6d0d12833 31 0x00 is just a place holder
scohennm 12:10e6d0d12833 32 *************************************/
annalou 13:684b0c5c94fa 33 #define LATCH_DATA 0x21 // for use in REG_PULSE_CFG
annalou 13:684b0c5c94fa 34 #define AXIS_DATA 0x05
annalou 13:684b0c5c94fa 35 #define SET_INTERRUPT 0x2F //using interrupt INT1 PTC5
annalou 13:684b0c5c94fa 36 #define SET_INT_LINE 0x2F
scohennm 12:10e6d0d12833 37
annalou 13:684b0c5c94fa 38 #define SET_THZ 800 // See Table 49 in data sheet
scohennm 12:10e6d0d12833 39
annalou 13:684b0c5c94fa 40 #define SET_TMLT 0X9F //0000_0159 // See Table 51 in data sheet
scohennm 12:10e6d0d12833 41 /*********************************************************/
scohennm 12:10e6d0d12833 42
scohennm 12:10e6d0d12833 43 //#define PRINTDBUG
scohennm 12:10e6d0d12833 44 // Accelerometer I2C pins
scohennm 12:10e6d0d12833 45 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
scohennm 12:10e6d0d12833 46 PinName const SDA = PTE25;
scohennm 12:10e6d0d12833 47 PinName const SCL = PTE24;
scohennm 12:10e6d0d12833 48 #elif defined (TARGET_KL05Z)
scohennm 12:10e6d0d12833 49 PinName const SDA = PTB4;
scohennm 12:10e6d0d12833 50 PinName const SCL = PTB3;
scohennm 12:10e6d0d12833 51 #else
scohennm 12:10e6d0d12833 52 #error TARGET NOT DEFINED
scohennm 12:10e6d0d12833 53 #endif
scohennm 12:10e6d0d12833 54
scohennm 12:10e6d0d12833 55 #define MMA8451_I2C_ADDRESS (0x1d<<1)
scohennm 12:10e6d0d12833 56
scohennm 12:10e6d0d12833 57 Ticker ledBlink; // timinginterrupt for RED led
scohennm 12:10e6d0d12833 58 InterruptIn MMA8451QInt1(PTC5); //push botton with internal pullup
scohennm 12:10e6d0d12833 59 //InterruptIn MMA8451QInt1(PTD1);
scohennm 12:10e6d0d12833 60 DigitalOut myled(LED_RED); // red led
scohennm 12:10e6d0d12833 61 DigitalOut relay(LED_GREEN); // green led
scohennm 12:10e6d0d12833 62
scohennm 12:10e6d0d12833 63 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
scohennm 12:10e6d0d12833 64
scohennm 12:10e6d0d12833 65 float delay = WAITDELAY;
scohennm 12:10e6d0d12833 66 int relayState = RELAYOFF;
scohennm 12:10e6d0d12833 67 int outState = false;
scohennm 12:10e6d0d12833 68 SLCD slcd; //define LCD display
annalou 13:684b0c5c94fa 69 Serial pc(USBTX, USBRX);
scohennm 12:10e6d0d12833 70 char LCDMessages[2][LCDLEN] = {"TRUE", "FALS"};
scohennm 12:10e6d0d12833 71
scohennm 12:10e6d0d12833 72
scohennm 12:10e6d0d12833 73 void LCDMess(char *lMess, float dWait){
scohennm 12:10e6d0d12833 74 slcd.Home();
scohennm 12:10e6d0d12833 75 slcd.clear();
scohennm 12:10e6d0d12833 76 slcd.printf(lMess);
scohennm 12:10e6d0d12833 77 wait(dWait);
scohennm 12:10e6d0d12833 78 }
scohennm 12:10e6d0d12833 79 void LCDMessNoDwell(char *lMess){
scohennm 12:10e6d0d12833 80 slcd.Home();
scohennm 12:10e6d0d12833 81 slcd.clear();
scohennm 12:10e6d0d12833 82 slcd.printf(lMess);
scohennm 12:10e6d0d12833 83 }
scohennm 12:10e6d0d12833 84
scohennm 12:10e6d0d12833 85 // Interrupt routines
scohennm 12:10e6d0d12833 86 void LEDBlinker(){ // RED LED interrupt
scohennm 12:10e6d0d12833 87 outState = !outState;
scohennm 12:10e6d0d12833 88 myled.write(outState);
scohennm 12:10e6d0d12833 89 }
scohennm 12:10e6d0d12833 90
scohennm 12:10e6d0d12833 91 void GreenLEDBlinker(){ // Green LED interrupt
scohennm 12:10e6d0d12833 92 //uint8_t i_regData;
scohennm 12:10e6d0d12833 93 relayState = !relayState;
scohennm 12:10e6d0d12833 94 relay.write(relayState);
scohennm 12:10e6d0d12833 95 //acc.readRegs(REG_PULSE_SRC, &i_regData, 1); // Clear the tap event
scohennm 12:10e6d0d12833 96 }
scohennm 12:10e6d0d12833 97
scohennm 12:10e6d0d12833 98 // end interrupt routines
scohennm 12:10e6d0d12833 99
scohennm 12:10e6d0d12833 100 int main()
scohennm 12:10e6d0d12833 101 {
annalou 13:684b0c5c94fa 102 pc.printf(PROGNAME);
scohennm 12:10e6d0d12833 103 uint8_t regData;
scohennm 12:10e6d0d12833 104
scohennm 12:10e6d0d12833 105
scohennm 12:10e6d0d12833 106 char lcdData[LCDLEN];
scohennm 12:10e6d0d12833 107
scohennm 12:10e6d0d12833 108 myled.write(outState);
scohennm 12:10e6d0d12833 109 relay.write(relayState);
scohennm 12:10e6d0d12833 110
scohennm 12:10e6d0d12833 111 // set up interrrupts to be used later for taps
scohennm 12:10e6d0d12833 112 MMA8451QInt1.rise(&GreenLEDBlinker);
scohennm 12:10e6d0d12833 113 MMA8451QInt1.mode(PullNone);
scohennm 12:10e6d0d12833 114
scohennm 12:10e6d0d12833 115 // set up interrrupts to be used later for taps
scohennm 12:10e6d0d12833 116 ledBlink.attach(&LEDBlinker, LEDDELAY);
scohennm 12:10e6d0d12833 117
scohennm 12:10e6d0d12833 118 // Read Pulse Source Data and check to see if things have been set
scohennm 12:10e6d0d12833 119 acc.readRegs(REG_PULSE_CFG, &regData, 1); // check it
scohennm 12:10e6d0d12833 120 sprintf (lcdData,"%x",regData);
scohennm 12:10e6d0d12833 121 LCDMess(lcdData,BLINKTIME);
scohennm 12:10e6d0d12833 122
scohennm 12:10e6d0d12833 123 // *********** Initialize for tap tecognition ***********
scohennm 12:10e6d0d12833 124 regData = LATCH_DATA | AXIS_DATA;
scohennm 12:10e6d0d12833 125 acc.setRegisterInStandby(REG_PULSE_CFG, regData); // write the data
scohennm 12:10e6d0d12833 126 acc.readRegs(REG_PULSE_CFG, &regData, 1); // check it
scohennm 12:10e6d0d12833 127 sprintf (lcdData,"%x",regData);
scohennm 12:10e6d0d12833 128 LCDMess(lcdData,BLINKTIME);
scohennm 12:10e6d0d12833 129
scohennm 12:10e6d0d12833 130 // Check to see if accerlometer is alive and well
annalou 13:684b0c5c94fa 131 acc.setGLimit(MAX_2G); // For now set to 2g
scohennm 12:10e6d0d12833 132 acc.readRegs(XYZ_DATA_CFG, &regData, 1);
scohennm 12:10e6d0d12833 133 sprintf (lcdData,"%x",regData); // Note displaying in hexidecimal
scohennm 12:10e6d0d12833 134 LCDMess(lcdData,BLINKTIME);
scohennm 12:10e6d0d12833 135
scohennm 12:10e6d0d12833 136 // Setup single-tap pulse prarameters.
annalou 13:684b0c5c94fa 137 acc.setRegisterInStandby(REG_PULSE_THSZ,SET_THZ); // write the data
annalou 13:684b0c5c94fa 138 acc.setRegisterInStandby(REH_PULSE_TMLT,SET_TMLT); // write the data
scohennm 12:10e6d0d12833 139
scohennm 12:10e6d0d12833 140 // Set up (pulse) interrupt to INT1 pin
scohennm 12:10e6d0d12833 141 acc.setRegisterInStandby(REG_CTRL_4, SET_INTERRUPT); // write the data
scohennm 12:10e6d0d12833 142 acc.setRegisterInStandby(REG_CTRL_5, SET_INT_LINE); // write the data
scohennm 12:10e6d0d12833 143 // End or seetup
scohennm 12:10e6d0d12833 144
scohennm 12:10e6d0d12833 145 acc.readRegs(REG_WHO_AM_I, &regData, 1);
scohennm 12:10e6d0d12833 146 sprintf (lcdData,"%x",regData);
scohennm 12:10e6d0d12833 147 LCDMess(lcdData,BLINKTIME);
scohennm 12:10e6d0d12833 148
scohennm 12:10e6d0d12833 149
scohennm 12:10e6d0d12833 150 while (true) {
scohennm 12:10e6d0d12833 151 acc.readRegs(REG_PULSE_SRC, &regData, 1);
scohennm 12:10e6d0d12833 152 sprintf (lcdData,"%x",regData);
annalou 13:684b0c5c94fa 153 pc.printf(lcdData,"%x",regData);
scohennm 12:10e6d0d12833 154 LCDMess(lcdData,BLINKTIME);
scohennm 12:10e6d0d12833 155 LCDMessNoDwell(LCDMessages[relayState]);
scohennm 12:10e6d0d12833 156 wait(delay);
scohennm 12:10e6d0d12833 157 }
scohennm 12:10e6d0d12833 158 }