APS Lab
/
mbed-os-example-blinky_4050_2
Test
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 /* mbed Microcontroller Library 00002 * Copyright (c) 2018 ARM Limited 00003 * SPDX-License-Identifier: Apache-2.0 00004 */ 00005 00006 #include "mbed.h" 00007 #include "stats_report.h" 00008 00009 #define ADT7420 0x48 00010 00011 #define RESET_REG 0x2F 00012 #define TEMP_REG 0x00 00013 #define ID_REG 0x0B 00014 00015 00016 DigitalOut led1(LED1); 00017 DigitalOut sensor(D8); 00018 00019 I2C Myi2c(I2C_SDA, I2C_SCL); 00020 00021 Serial pc(USBTX, USBRX); 00022 00023 void ADT7420_reset(void); 00024 char ADT7420_GetID(void); 00025 int ADT7420_GetTemp(void); 00026 00027 int main() { 00028 float status; 00029 int res; 00030 sensor=1; 00031 //configure for UART 00032 pc.baud(115200); 00033 pc.printf("I2C ADT7420 Demo\n"); 00034 00035 //configure for I2C @100KHz 00036 //Myi2c.init(); 00037 Myi2c.frequency(10000); 00038 00039 //configure for ADT7420 00040 Myi2c.lock(); 00041 pc.printf("[RESET ] ADT7420\n"); 00042 ADT7420_reset(); 00043 wait(0.5); 00044 00045 pc.printf("[CHECK ID] ADT7420\n"); 00046 ADT7420_GetID(); 00047 00048 00049 while (true) { 00050 led1 = 0; 00051 00052 pc.printf("[Get Temp] ADT7420\n"); 00053 res = ADT7420_GetTemp(); 00054 00055 if(res & 0x1000) 00056 { 00057 status = (float)(res * 0.0625 * -1.0); 00058 00059 } 00060 else 00061 { 00062 status = (float)(res * 0.0625); 00063 } 00064 00065 pc.printf("Current Temp %.4f C\n", status); 00066 00067 wait(0.5); 00068 led1 = 1; 00069 wait(0.5); 00070 } 00071 00072 } 00073 00074 void ADT7420_reset(void) 00075 { 00076 char cmd_reset; 00077 cmd_reset = RESET_REG; 00078 Myi2c.write(ADT7420); 00079 if(Myi2c.write(0xFF)) 00080 { 00081 pc.printf("Ack \n"); 00082 } 00083 else 00084 { 00085 pc.printf("Nack \n"); 00086 } 00087 00088 Myi2c.write(ADT7420); 00089 if(Myi2c.write(cmd_reset)) 00090 { 00091 pc.printf("Reset Done\n"); 00092 } 00093 else 00094 { 00095 pc.printf("Reset Failure\n"); 00096 } 00097 } 00098 00099 char ADT7420_GetID(void) 00100 { 00101 char cmd_id, read_val; 00102 int sts; 00103 cmd_id=ID_REG; 00104 //Myi2c.write(ADT7420, &cmd_id, 1, 0); 00105 sts = Myi2c.read(ADT7420, &cmd_id, 1, 0); 00106 if(sts==0) 00107 { 00108 pc.printf("ID ACK\n"); 00109 } 00110 else 00111 { 00112 pc.printf("ID NACK\n"); 00113 pc.printf("Return Value STS %d \n", sts); 00114 } 00115 Myi2c.stop(); 00116 pc.printf("ID REG %02x\n", cmd_id); 00117 return cmd_id; 00118 } 00119 00120 int ADT7420_GetTemp(void) 00121 { 00122 char cmd_temp[1], read_val[2]; 00123 int temp=0; 00124 cmd_temp[0]=TEMP_REG; 00125 Myi2c.start(); 00126 Myi2c.write(ADT7420, cmd_temp, 2); 00127 wait(0.2); 00128 Myi2c.read(ADT7420, read_val, 3); 00129 pc.printf("Temp Upper %02x\n", read_val[0]); 00130 pc.printf("Temp Lower %02x\n", read_val[1]); 00131 00132 temp = (int)((read_val[0] << 8) | read_val[1]); 00133 temp >>= 3; 00134 return temp; 00135 }
Generated on Fri Jul 15 2022 10:39:46 by 1.7.2