Fixed algorithm to read 3 bytes of accelerometer data registers
Fork of COG4050_adxl355_adxl357 by
Diff: main.cpp
- Revision:
- 0:74a0756399ff
- Child:
- 1:d3aeaa02781d
diff -r 000000000000 -r 74a0756399ff main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Jun 05 13:03:07 2018 +0000 @@ -0,0 +1,97 @@ +#include "mbed.h" + +#define ADT7420 0x48 + +#define RESET_REG 0x2F +#define TEMP_REG 0x00 +#define ID_REG 0x0B + + +DigitalOut led1(LED1); +DigitalOut sensor(D8); + +I2C Myi2c(I2C_SDA, I2C_SCL); + +Serial pc(USBTX, USBRX); + +void ADT7420_reset(void); +int ADT7420_GetID(void); +int ADT7420_GetTemp(void); + +// main() runs in its own thread in the OS +int main() { + float status; + int res; + sensor=1; + //configure for UART + pc.baud(115200); + pc.printf("I2C ADT7420 Demo\n"); + + //configure for I2C @400KHz + Myi2c.frequency(100000); + + //configure for ADT7420 + + pc.printf("[RESET ] ADT7420\n"); + ADT7420_reset(); + wait(0.5); + + pc.printf("[CHECK ID] ADT7420\n"); + ADT7420_GetID(); + + + while (true) { + led1 = 0; + + pc.printf("[Get Temp] ADT7420\n"); + res = ADT7420_GetTemp(); + + if(res & 0x1000) + { + status = (float)((res - 8192) / 16); + } + else + { + status = (float)(res / 16); + } + + pc.printf("Current Temp %.0f \n", status); + + wait(0.5); + led1 = 1; + wait(0.5); + } + +} + +void ADT7420_reset(void) +{ + char cmd_reset[1]; + cmd_reset[0] = RESET_REG; + Myi2c.write(ADT7420, cmd_reset, 1); +} + +int ADT7420_GetID(void) +{ + char cmd_id[1], read_val; + cmd_id[0]=ID_REG; + Myi2c.write(ADT7420, cmd_id, 1, 1); + Myi2c.read(ADT7420, &read_val, 1); + pc.printf("ID %02x\n", read_val); + return read_val; +} + +int ADT7420_GetTemp(void) +{ + char cmd_temp[1], read_val[2]; + int temp=0; + cmd_temp[0]=TEMP_REG; + Myi2c.write(ADT7420, cmd_temp, 1, 1); + Myi2c.read(ADT7420, read_val, 2); + pc.printf("Temp Upper %02x\n", read_val[0]); + pc.printf("Temp Lower %02x\n", read_val[1]); + + temp = (int)((read_val[0] << 8) | read_val[1]); + temp >>= 3; + return temp; +}