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: ADXL362 mbed MPL3115A2
main.cpp
- Committer:
- htdoughe
- Date:
- 2018-02-22
- Revision:
- 12:c6b056ad171e
- Parent:
- 10:8dcc46dd53bf
- Child:
- 13:1cae1960370c
File content as of revision 12:c6b056ad171e:
#include "mbed.h"
#include "ADXL362.h"
#include "string.h"
DigitalOut led1(LED3);
//map of register values and names
int regids[34];
char* regnames[34];
//populating the map
void initmap() {
regids[0] = 0x00;
regids[1] = 0x01;
regids[2] = 0x02;
regids[3] = 0x03;
regids[4] = 0x08;
regids[5] = 0x09;
regids[6] = 0x0A;
regids[7] = 0x0B;
regids[8] = 0x0c;
regids[9] = 0x0D;
regids[10] = 0x0E;
regids[11] = 0x0F;
regids[12] = 0x10;
regids[13] = 0x11;
regids[14] = 0x12;
regids[15] = 0x13;
regids[16] = 0x14;
regids[17] = 0x15;
regids[18] = 0x1F;
regids[19] = 0x20;
regids[20] = 0x21;
regids[21] = 0x22;
regids[22] = 0x23;
regids[23] = 0x24;
regids[24] = 0x25;
regids[25] = 0x26;
regids[26] = 0x27;
regids[27] = 0x28;
regids[28] = 0x29;
regids[29] = 0x2A;
regids[30] = 0x2B;
regids[31] = 0x2C;
regids[32] = 0x2D;
regids[33] = 0x2E;
regnames[0] = "DEVID_AD";
regnames[1] = "DEVID_MST";
regnames[2] = "PARTID";
regnames[3] = "REVID";
regnames[4] = "XDATA";
regnames[5] = "YDATA";
regnames[6] = "ZDATA";
regnames[7] = "STATUS";
regnames[8] = "FIFO_ENTRIES_L";
regnames[9] = "FIFO_ENTRIES_H";
regnames[10] = "XDATA_L";
regnames[11] = "XDATA_H";
regnames[12] = "YDATA_L";
regnames[13] = "YDATA_H";
regnames[14] = "ZDATA_L";
regnames[15] = "ZDATA_H";
regnames[16] = "TEMP_L";
regnames[17] = "TEMP_H";
regnames[18] = "SOFT_RESET";
regnames[19] = "THRESH_ACT_L";
regnames[20] = "THRESH_ACT_H";
regnames[21] = "TIME_ACT";
regnames[22] = "THRESH_INACT_L";
regnames[23] = "THRESH_INACT_H";
regnames[24] = "TIME_INACT_L";
regnames[25] = "TIME_INACT_H";
regnames[26] = "ACT_INACT_CTL";
regnames[27] = "FIFO_CONTROL";
regnames[28] = "FIFO_SAMPLES";
regnames[29] = "INTMAP1";
regnames[30] = "INTMAP2";
regnames[31] = "FILTER_CTL";
regnames[32] = "POWER_CTL";
regnames[33] = "SELF_TEST";
}
// Interface pulled from ADXL362.cpp
// ADXL362::ADXL362(PinName CS, PinName MOSI, PinName MISO, PinName SCK) :
ADXL362 adxl362(PA_0,PA_7,PA_6,PA_1);
int adxl362_reg_print(int s, int l){
//check s is between 0x00 and 0x2E
if(s > 0x2E || s < 0x00){
printf("adx: requires start between 0x00 and 0x2E; given %d (0x%01x)\n", s,s);
return -1;
}else if(l < 0){
//check length > 0
printf("adx: requires length >= 0, given %d\n", l);
return -1;
}else{
// start sending stuff
//first check DEVID_AD == 0xAD
uint8_t devid = adxl362.read_reg(ADXL362::DEVID_AD);
printf("devid = %d\n", devid);
if(devid != 0xAD){
printf("error: DEVID_AD is not 0xAD; exiting\n");
return -1;
}else{
//now do stuff
//if length == 0, send everything from s to end of registers
//else print from s to l
// formula : range = end - start - length
// area = start + range
int stop = 0;
if(l == 0){
stop = 34;
}else{
stop = s + l;
}
int in = s;
while(in < stop){
//get register name
char * name = regnames[in]; //GET NAME
ADXL362::ADXL362_register_t reg = (ADXL362::ADXL362_register_t) regids[in];
uint8_t val = adxl362.read_reg(reg); //GET REG VAL
//print val
printf("0x%01x: %s=0x%01x\r\n", regids[in], name, val);
in++;
}
}
}
return 0;
}
int main() {
initmap();
adxl362.reset();
wait_ms(600); // we need to wait at least 500ms after ADXL362 reset
adxl362.set_mode(ADXL362::MEASUREMENT);
int8_t x,y,z, initx, inity, initz;
int start, length;
start = 0;
length = 5;
adxl362_reg_print(start, length);
//initial values of x, y, and z.
//These values are the baseline for the accelerometer; knocks are detected
// in relation to these initial values
initx=adxl362.scanx_u8();
inity=adxl362.scany_u8();
initz=adxl362.scanz_u8();
while(1) {
//get the values of x, y, and z to test for a knock
x=adxl362.scanx_u8();
y=adxl362.scany_u8();
z=adxl362.scanz_u8();
if(x > initx+2 || y > inity+2 || z > initz+2 || x > initx-2 || y > inity-2 || z > initz-2){
led1 = 1;
wait_ms(2000);
led1 = 0;
}
printf("x = %d y = %d z = %d\r\n",x,y,z);
wait_ms(100);
}
}