lab 6
Dependencies: ADXL362 mbed MPL3115A2
main.cpp
- Committer:
- htdoughe
- Date:
- 2018-02-22
- Revision:
- 5:02aa71487c01
- Parent:
- 4:8065ca897f8b
- Child:
- 6:f05c72e636aa
File content as of revision 5:02aa71487c01:
#include "mbed.h" #include "ADXL362.h" #include "string.h" #include <map> #include <string> //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 int devid = (int) adxl362.read_reg_u16(ADXL362::DEVID_AD); 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]; int val = (int) adxl362.read_reg_u16(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; int start, length; start = 0; length = 3; adxl362_reg_print(start, length); while(1) { x=adxl362.scanx_u8(); y=adxl362.scany_u8(); z=adxl362.scanz_u8(); printf("x = %d y = %d z = %d\r\n",x,y,z); wait_ms(100); } }