Fixed algorithm to read 3 bytes of accelerometer data registers
Fork of COG4050_adxl355_adxl357 by
main.cpp
- Committer:
- APS_Lab
- Date:
- 2018-06-05
- Revision:
- 0:74a0756399ff
- Child:
- 1:d3aeaa02781d
File content as of revision 0:74a0756399ff:
#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; }