Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 1:b7f576b50a32, committed 2019-05-14
- Comitter:
- APS_Lab
- Date:
- Tue May 14 03:20:59 2019 +0000
- Parent:
- 0:00acc05bf822
- Commit message:
- First Version
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Tue May 14 03:08:44 2019 +0000
+++ b/main.cpp Tue May 14 03:20:59 2019 +0000
@@ -6,27 +6,130 @@
#include "mbed.h"
#include "stats_report.h"
-DigitalOut led1(LED1);
+#define ADT7420 0x48
+
+#define RESET_REG 0x2F
+#define TEMP_REG 0x00
+#define ID_REG 0x0B
+
-#define SLEEP_TIME 500 // (msec)
-#define PRINT_AFTER_N_LOOPS 20
+DigitalOut led1(LED1);
+DigitalOut sensor(D8);
+
+I2C Myi2c(I2C_SDA, I2C_SCL);
+
+Serial pc(USBTX, USBRX);
+
+void ADT7420_reset(void);
+char ADT7420_GetID(void);
+int ADT7420_GetTemp(void);
-// main() runs in its own thread in the OS
-int main()
-{
- SystemReport sys_state( SLEEP_TIME * PRINT_AFTER_N_LOOPS /* Loop delay time in ms */);
+int main() {
+ float status;
+ int res;
+ sensor=1;
+ //configure for UART
+ pc.baud(115200);
+ pc.printf("I2C ADT7420 Demo\n");
+
+ //configure for I2C @100KHz
+ //Myi2c.init();
+ Myi2c.frequency(10000);
+
+ //configure for ADT7420
+ Myi2c.lock();
+ pc.printf("[RESET ] ADT7420\n");
+ ADT7420_reset();
+ wait(0.5);
+
+ pc.printf("[CHECK ID] ADT7420\n");
+ ADT7420_GetID();
- int count = 0;
+
while (true) {
- // Blink LED and wait 0.5 seconds
- led1 = !led1;
- wait_ms(SLEEP_TIME);
+ led1 = 0;
+
+ pc.printf("[Get Temp] ADT7420\n");
+ res = ADT7420_GetTemp();
+
+ if(res & 0x1000)
+ {
+ status = (float)(res * 0.0625 * -1.0);
+
+ }
+ else
+ {
+ status = (float)(res * 0.0625);
+ }
+
+ pc.printf("Current Temp %.4f C\n", status);
+
+ wait(0.5);
+ led1 = 1;
+ wait(0.5);
+ }
+
+}
- if ((0 == count) || (PRINT_AFTER_N_LOOPS == count)) {
- // Following the main thread wait, report on the current system status
- sys_state.report_state();
- count = 0;
- }
- ++count;
+void ADT7420_reset(void)
+{
+ char cmd_reset;
+ cmd_reset = RESET_REG;
+ Myi2c.write(ADT7420);
+ if(Myi2c.write(0xFF))
+ {
+ pc.printf("Ack \n");
+ }
+ else
+ {
+ pc.printf("Nack \n");
+ }
+
+ Myi2c.write(ADT7420);
+ if(Myi2c.write(cmd_reset))
+ {
+ pc.printf("Reset Done\n");
+ }
+ else
+ {
+ pc.printf("Reset Failure\n");
}
}
+
+char ADT7420_GetID(void)
+{
+ char cmd_id, read_val;
+ int sts;
+ cmd_id=ID_REG;
+ //Myi2c.write(ADT7420, &cmd_id, 1, 0);
+ sts = Myi2c.read(ADT7420, &cmd_id, 1, 0);
+ if(sts==0)
+ {
+ pc.printf("ID ACK\n");
+ }
+ else
+ {
+ pc.printf("ID NACK\n");
+ pc.printf("Return Value STS %d \n", sts);
+ }
+ Myi2c.stop();
+ pc.printf("ID REG %02x\n", cmd_id);
+ return cmd_id;
+}
+
+int ADT7420_GetTemp(void)
+{
+ char cmd_temp[1], read_val[2];
+ int temp=0;
+ cmd_temp[0]=TEMP_REG;
+ Myi2c.start();
+ Myi2c.write(ADT7420, cmd_temp, 2);
+ wait(0.2);
+ Myi2c.read(ADT7420, read_val, 3);
+ 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;
+}