report
Dependencies: ADXL362 Lab7 mbed
main.cpp
- Committer:
- dprowe
- Date:
- 2018-03-09
- Revision:
- 9:1f9c70fde134
- Parent:
- 7:ff64fb98ac1b
File content as of revision 9:1f9c70fde134:
#include "mbed.h"
#include "ADXL362.h"
#include "MPL3115A2.h"
#include <stdio.h>
#include <stdlib.h>
Serial pc(SERIAL_TX, SERIAL_RX);
DigitalOut myled(LED1);
ADXL362 adxl362(PA_0,PA_7,PA_6,PA_1);
MPL3115A2 pressure_sensor(PB_7,PB_6,0x60);
InterruptIn event(PA_4);
char *arr[] = {
"MPL_STATUS","MPL_OUT_P_MSB", "MPL_OUT_P_CSB","MPL_OUT_P_LSB","MPL_OUT_P_LSB",
"MPL_OUT_T_LSB","MPL_DR_STATUS","MPL_OUT_P_DELTA_MSB","MPL_OUT_P_DELTA_MSB",
"MPL_OUT_P_DELTA_LSB","MPL_OUT_T_DELTA_MSB","MPL_OUT_T_DELTA_LSB",
"MPL_WHO_AM_I","MPL_F_STATUS","MPL_F_DATA","MPL_F_SETUP","MPL_TIME_DLY",
"MPL_SYSMOD","MPL_INT_SOURCE","MPL_PT_DATA_CFG","MPL_BAR_IN_MSB",
"MPL_BAR_IN_LSB","MPL_P_TGT_MSB","MPL_P_TGT_LSB","MPL_T_TGT","MPL_P_WND_MSB",
"MPL_P_WND_LSB","MPL_T_WND","MPL_P_MIN_MSB","MPL_P_MIN_CSB","MPL_P_MIN_LSB",
"MPL_T_MIN_MSB", "MPL_T_MIN_LSB", "MPL_P_MAX_MSB", "MPL_P_MAX_CSB",
"MPL_P_MAX_LSB","MPL_T_MAX_MSB","MPL_T_MAX_LSB","MPL_CTRL_REG1",
"MPL_CTRL_REG2","MPL_CTRL_REG3","MPL_CTRL_REG4","MPL_CTRL_REG5",
"MPL_OFF_P","MPL_OFF_T","MPL_OFF_H"
};
int adxl362_reg_print(int start, int length) {
int rvalue = 0;
rvalue = adxl362.read_reg(ADXL362::DEVID_AD);
if(rvalue!=0xAD){
printf("value is %X\n\r",rvalue);
printf("error\n\r");
return -1;
}
else if(!(0 <= start && start < 46)){
printf("error\n\r");
return -1;
}
else if (!(length >= 0)){
printf("error\n\r");
return -1;
}
int i = 0;
if (length!=0){
for (i = start; i < start+length; i++){
switch(i){
case 0 :
rvalue = adxl362.read_reg(ADXL362::DEVID_AD);
printf("0x00: DEVID_AD = %X \n\r", rvalue);
break;
case 1 :
rvalue = adxl362.read_reg(ADXL362::DEVID_MST);
printf("0x01: DEVID_MST = %X \n\r", rvalue);
break;
case 2 :
rvalue = adxl362.read_reg(ADXL362::PARTID);
printf("0x02: PARTID = %X \n\r", rvalue);
break;
case 3 :
rvalue = adxl362.read_reg(ADXL362::REVID);
printf("0x03: REVID = %X \n\r", rvalue);
case 4 :
rvalue = adxl362.read_reg(ADXL362::XDATA);
printf("0x08: XDATA = %X \n\r", rvalue);
break;
case 5 :
rvalue = adxl362.read_reg(ADXL362::YDATA);
printf("0x09: YDATA = %X \n\r", rvalue);
break;
case 6 :
rvalue = adxl362.read_reg(ADXL362::ZDATA);
printf("0x0A: ZDATA = %X \n\r", rvalue);
break;
case 7 :
rvalue = adxl362.read_reg(ADXL362::STATUS);
printf("0x0B: STATUS = %X \n\r", rvalue);
break;
case 8 :
rvalue = adxl362.read_reg(ADXL362::FIFO_ENTRIES_L);
printf("0x0C: FIFO_ENTRIES_L = %X \n\r", rvalue);
break;
case 9 :
rvalue = adxl362.read_reg(ADXL362::FIFO_ENTRIES_H);
printf("0x0D: FIFO_ENTRIES_H = %X \n\r", rvalue);
break;
case 10 :
rvalue = adxl362.read_reg(ADXL362::XDATA_L);
printf("0x0E: XDATA_L = %X \n\r", rvalue);
break;
case 11 :
rvalue = adxl362.read_reg(ADXL362::XDATA_H);
printf("0x0F: XDATA_H = %X \n\r", rvalue);
break;
case 12 :
rvalue = adxl362.read_reg(ADXL362::YDATA_L);
printf("0x10: YDATA_L = %X \n\r", rvalue);
break;
case 13 :
rvalue = adxl362.read_reg(ADXL362::YDATA_H);
printf("0x11: YDATA_H = %X \n\r", rvalue);
break;
case 14 :
rvalue = adxl362.read_reg(ADXL362::ZDATA_L);
printf("0x12: ZDATA_L = %X \n\r", rvalue);
break;
case 15 :
rvalue = adxl362.read_reg(ADXL362::ZDATA_H);
printf("0x13: ZDATA_H = %X \n\r", rvalue);
break;
case 16 :
rvalue = adxl362.read_reg(ADXL362::TEMP_L);
printf("0x14: TEMP_L = %X \n\r", rvalue);
break;
case 17 :
rvalue = adxl362.read_reg(ADXL362::TEMP_H);
printf("0x15: TEMP_H = %X \n\r", rvalue);
break;
case 18 :
rvalue = adxl362.read_reg(ADXL362::SOFT_RESET);
printf("0x1F: SOFT_RESET = %X \n\r", rvalue);
break;
case 19 :
rvalue = adxl362.read_reg(ADXL362::THRESH_ACT_L);
printf("0x20: THRESH_ACT_L = %X \n\r", rvalue);
break;
case 20 :
rvalue = adxl362.read_reg(ADXL362::THRESH_ACT_H);
printf("0x21: THRESH_ACT_H = %X \n\r", rvalue);
break;
case 21 :
rvalue = adxl362.read_reg(ADXL362::TIME_ACT);
printf("0x22: TIME_ACT = %X \n\r", rvalue);
break;
case 22 :
rvalue = adxl362.read_reg(ADXL362::THRESH_INACT_L);
printf("0x23: THRESH_INACT_L = %X \n\r", rvalue);
break;
case 23 :
rvalue = adxl362.read_reg(ADXL362::THRESH_INACT_H);
printf("0x24: THRESH_INACT_H = %X \n\r", rvalue);
break;
case 24 :
rvalue = adxl362.read_reg(ADXL362::TIME_INACT_L);
printf("0x25: TIME_INACT_L = %X \n\r", rvalue);
break;
case 25 :
rvalue = adxl362.read_reg(ADXL362::TIME_INACT_H);
printf("0x26: TIME_INACT_H = %X \n\r", rvalue);
break;
case 26 :
rvalue = adxl362.read_reg(ADXL362::ACT_INACT_CTL);
printf("0x27: ACT_INACT_CTL = %X \n\r", rvalue);
break;
case 27 :
rvalue = adxl362.read_reg(ADXL362::FIFO_CONTROL);
printf("0x28: FIFO_CONTROL = %X \n\r", rvalue);
break;
case 28 :
rvalue = adxl362.read_reg(ADXL362::FIFO_SAMPLES);
printf("0x29: FIFO_SAMPLES = %X \n\r", rvalue);
break;
case 29 :
rvalue = adxl362.read_reg(ADXL362::INTMAP1);
printf("0x2A: INTMAP1 = %X \n\r", rvalue);
break;
case 30 :
rvalue = adxl362.read_reg(ADXL362::INTMAP2);
printf("0x2B: INTMAP2 = %X \n\r", rvalue);
break;
case 31 :
rvalue = adxl362.read_reg(ADXL362::FILTER_CTL);
printf("0x2C: FILTER_CTL = %X \n\r", rvalue);
break;
case 32 :
rvalue = adxl362.read_reg(ADXL362::POWER_CTL);
printf("0x2D: POWER_CTL = %X \n\r", rvalue);
break;
case 33 :
rvalue = adxl362.read_reg(ADXL362::SELF_TEST);
printf("0x2E: SELF_TEST = %X \n\r", rvalue);
break;
default :
printf("ERROR: NO REGISTER HERE\n\r");
break;
}
}
}
else {
for (i = 0; i < 34; i++){
switch(i){
case 0 :
rvalue = adxl362.read_reg(ADXL362::DEVID_AD);
printf("0x00: DEVID_AD = %X \n\r", rvalue);
break;
case 1 :
rvalue = adxl362.read_reg(ADXL362::DEVID_MST);
printf("0x01: DEVID_MST = %X \n\r", rvalue);
break;
case 2 :
rvalue = adxl362.read_reg(ADXL362::PARTID);
printf("0x02: PARTID = %X \n\r", rvalue);
break;
case 3 :
rvalue = adxl362.read_reg(ADXL362::REVID);
printf("0x03: REVID = %X \n\r", rvalue);
break;
case 4 :
rvalue = adxl362.read_reg(ADXL362::XDATA);
printf("0x08: XDATA = %X \n\r", rvalue);
break;
case 5 :
rvalue = adxl362.read_reg(ADXL362::YDATA);
printf("0x09: YDATA = %X \n\r", rvalue);
break;
case 6 :
rvalue = adxl362.read_reg(ADXL362::ZDATA);
printf("0x0A: ZDATA = %X \n\r", rvalue);
break;
case 7 :
rvalue = adxl362.read_reg(ADXL362::STATUS);
printf("0x0B: STATUS = %X \n\r", rvalue);
break;
case 8 :
rvalue = adxl362.read_reg(ADXL362::FIFO_ENTRIES_L);
printf("0x0C: FIFO_ENTRIES_L = %X \n\r", rvalue);
break;
case 9 :
rvalue = adxl362.read_reg(ADXL362::FIFO_ENTRIES_H);
printf("0x0D: FIFO_ENTRIES_H = %X \n\r", rvalue);
break;
case 10 :
rvalue = adxl362.read_reg(ADXL362::XDATA_L);
printf("0x0E: XDATA_L = %X \n\r", rvalue);
break;
case 11 :
rvalue = adxl362.read_reg(ADXL362::XDATA_H);
printf("0x0F: XDATA_H = %X \n\r", rvalue);
break;
case 12 :
rvalue = adxl362.read_reg(ADXL362::YDATA_L);
printf("0x10: YDATA_L = %X \n\r", rvalue);
break;
case 13 :
rvalue = adxl362.read_reg(ADXL362::YDATA_H);
printf("0x11: YDATA_H = %X \n\r", rvalue);
break;
case 14 :
rvalue = adxl362.read_reg(ADXL362::ZDATA_L);
printf("0x12: ZDATA_L = %X \n\r", rvalue);
break;
case 15 :
rvalue = adxl362.read_reg(ADXL362::ZDATA_H);
printf("0x13: ZDATA_H = %X \n\r", rvalue);
break;
case 16 :
rvalue = adxl362.read_reg(ADXL362::TEMP_L);
printf("0x14: TEMP_L = %X \n\r", rvalue);
break;
case 17 :
rvalue = adxl362.read_reg(ADXL362::TEMP_H);
printf("0x15: TEMP_H = %X \n\r", rvalue);
break;
case 18 :
rvalue = adxl362.read_reg(ADXL362::SOFT_RESET);
printf("0x1F: SOFT_RESET = %X \n\r", rvalue);
break;
case 19 :
rvalue = adxl362.read_reg(ADXL362::THRESH_ACT_L);
printf("0x20: THRESH_ACT_L = %X \n\r", rvalue);
break;
case 20 :
rvalue = adxl362.read_reg(ADXL362::THRESH_ACT_H);
printf("0x21: THRESH_ACT_H = %X \n\r", rvalue);
break;
case 21 :
rvalue = adxl362.read_reg(ADXL362::TIME_ACT);
printf("0x22: TIME_ACT = %X \n\r", rvalue);
break;
case 22 :
rvalue = adxl362.read_reg(ADXL362::THRESH_INACT_L);
printf("0x23: THRESH_INACT_L = %X \n\r", rvalue);
break;
case 23 :
rvalue = adxl362.read_reg(ADXL362::THRESH_INACT_H);
printf("0x24: THRESH_INACT_H = %X \n\r", rvalue);
break;
case 24 :
rvalue = adxl362.read_reg(ADXL362::TIME_INACT_L);
printf("0x25: TIME_INACT_L = %X \n\r", rvalue);
break;
case 25 :
rvalue = adxl362.read_reg(ADXL362::TIME_INACT_H);
printf("0x26: TIME_INACT_H = %X \n\r", rvalue);
break;
case 26 :
rvalue = adxl362.read_reg(ADXL362::ACT_INACT_CTL);
printf("0x27: ACT_INACT_CTL = %X \n\r", rvalue);
break;
case 27 :
rvalue = adxl362.read_reg(ADXL362::FIFO_CONTROL);
printf("0x28: FIFO_CONTROL = %X \n\r", rvalue);
break;
case 28 :
rvalue = adxl362.read_reg(ADXL362::FIFO_SAMPLES);
printf("0x29: FIFO_SAMPLES = %X \n\r", rvalue);
break;
case 29 :
rvalue = adxl362.read_reg(ADXL362::INTMAP1);
printf("0x2A: INTMAP1 = %X \n\r", rvalue);
break;
case 30 :
rvalue = adxl362.read_reg(ADXL362::INTMAP2);
printf("0x2B: INTMAP2 = %X \n\r", rvalue);
break;
case 31 :
rvalue = adxl362.read_reg(ADXL362::FILTER_CTL);
printf("0x2C: FILTER_CTL = %X \n\r", rvalue);
break;
case 32 :
rvalue = adxl362.read_reg(ADXL362::POWER_CTL);
printf("0x2D: POWER_CTL = %X \n\r", rvalue);
break;
case 33 :
rvalue = adxl362.read_reg(ADXL362::SELF_TEST);
printf("0x2E: SELF_TEST = %X \n\r", rvalue);
break;
default :
printf("ERROR: NO REGISTER HERE\n\r");
break;
}
}
}
return 0;
}
int blink() {
myled = 1; // LED is ON
wait(2); // 2 sec
myled = 0; // LED is OFF
return 0;
}
int mpl3115_reg_print(int start, int length){
uint8_t id;
if ((start < 0) || (start > 45)) {
pc.printf("break 1 \n\r");
return -1;
}
if (length < 0) {
pc.printf("break 2 \n\r");
return -1;
}
id = pressure_sensor.getID();
if (id!=0xC4) {
pc.printf("break 3 \n\r");
return -1;
}
uint8_t a[45];
pressure_sensor.readRegs(start, a, length);
int i = 0;
for (i=0;i<length;i++){
pc.printf("0x%X: %s is 0x%X \n\r",i, arr[i], a[i]);
}
return 0;
}
int printA(double* ar1, double* ar2, int start, int end){
int i = 0;
for (i = start; i < end; i++){
pc.printf("value at %d : temp: %f pressure: %f \n\r",i,ar1[i], ar2[i]);
}
return 0;
}
int main() {
int arraySize = 250; //approximately the time it takes to ride one elevator floors 1-6
double altitudeReading[arraySize];
double tempReading[arraySize];
int i = 0, j = 0;
j = mpl3115_reg_print(0, 45);
for (i = 0; i < arraySize; i++) {
altitudeReading[i] = -1;
}
for(j = 0; j < arraySize; j++) {
tempReading[j] = -1;
}
i = 0;
pc.printf("reading an altitude at this point at 10hz\r\n");
pc.printf("Enter p to print, enter s to stop: ");
while (1) {
wait_us(100);
altitudeReading[i] = pressure_sensor.getAltitude();
i++;
tempReading[j] = pressure_sensor.getTemperature();
j++;
if (i > arraySize) {
i = 0;
}
if( j > arraySize) {
j = 0;
}
if (pc.readable()) {
char c = pc.getc();
pc.printf("we read a char, it was %c\r\n",c);
if (c == 'p') { //press p to show what is currently in the array
pc.printf("read a p\r\n");
int h = 0;
for (h = 0; h < arraySize; h++) {
pc.printf("temperature = %f, altitude = %f\r\n", tempReading[h], altitudeReading[h]);
}
}
if( c == 's') { //press s to get it to stop reading
break;
}
}
}
/* Lab 6 work
wait_ms(600); // we need to wait at least 500ms after ADXL362 reset
adxl362.set_mode(ADXL362::MEASUREMENT);
int8_t x,y,z;
int8_t nx, ny, nz;
adxl362_reg_print(0, 0); // call register printing here
adxl362_reg_print(0, 5);
adxl362_reg_print(4, 6);
//while (1) {adxl362_reg_print(0, 0);} to print forever
int blink_c = 0;
x=adxl362.scanx_u8();
y=adxl362.scany_u8();
z=adxl362.scanz_u8();
while(1) { //detects knocks
x=adxl362.scanx_u8();
y=adxl362.scany_u8();
z=adxl362.scanz_u8();
wait_us(100);
nx=adxl362.scanx_u8();
ny=adxl362.scany_u8();
nz=adxl362.scanz_u8();
if ((abs(x-nx)>=4) || (abs(y-ny)>=4) || (abs(z-nz)>=4)){
blink_c += 1;
printf("number of knocks detected: %d\n\r",blink_c);
blink();
}
} */
}