Nathan Yonkee / Mbed OS Nucleo_i2c_master

Files at this revision

API Documentation at this revision

Comitter:
tulanthoar
Date:
Fri Apr 21 19:49:23 2017 +0000
Child:
1:9cdd4df37645
Commit message:
copy of i2c master example

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Apr 21 19:49:23 2017 +0000
@@ -0,0 +1,71 @@
+#include "mbed.h"
+ 
+#define LM75_REG_TEMP (0x00) // Temperature Register
+#define LM75_REG_CONF (0x01) // Configuration Register
+#define LM75_ADDR     (0x90) // LM75 address
+ 
+I2C i2c(I2C_SDA, I2C_SCL);
+ 
+DigitalOut myled(LED1);
+ 
+Serial pc(SERIAL_TX, SERIAL_RX);
+ 
+volatile char TempCelsiusDisplay[] = "+abc.d C";
+ 
+int main()
+{
+ 
+    char data_write[2];
+    char data_read[2];
+ 
+    /* Configure the Temperature sensor device STLM75:
+    - Thermostat mode Interrupt
+    - Fault tolerance: 0
+    */
+    data_write[0] = LM75_REG_CONF;
+    data_write[1] = 0x02;
+    int status = i2c.write(LM75_ADDR, data_write, 2, 0);
+    if (status != 0) { // Error
+        while (1) {
+            myled = !myled;
+            wait(0.2);
+        }
+    }
+ 
+    while (1) {
+        // Read temperature register
+        data_write[0] = LM75_REG_TEMP;
+        i2c.write(LM75_ADDR, data_write, 1, 1); // no stop
+        i2c.read(LM75_ADDR, data_read, 2, 0);
+ 
+        // Calculate temperature value in Celcius
+        int tempval = (int)((int)data_read[0] << 8) | data_read[1];
+        tempval >>= 7;
+        if (tempval <= 256) {
+            TempCelsiusDisplay[0] = '+';
+        } else {
+            TempCelsiusDisplay[0] = '-';
+            tempval = 512 - tempval;
+        }
+ 
+        // Decimal part (0.5°C precision)
+        if (tempval & 0x01) {
+            TempCelsiusDisplay[5] = 0x05 + 0x30;
+        } else {
+            TempCelsiusDisplay[5] = 0x00 + 0x30;
+        }
+ 
+        // Integer part
+        tempval >>= 1;
+        TempCelsiusDisplay[1] = (tempval / 100) + 0x30;
+        TempCelsiusDisplay[2] = ((tempval % 100) / 10) + 0x30;
+        TempCelsiusDisplay[3] = ((tempval % 100) % 10) + 0x30;
+ 
+        // Display result
+        pc.printf("temp = %s\n", TempCelsiusDisplay);
+        myled = !myled;
+        wait(1.0);
+    }
+ 
+}
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Fri Apr 21 19:49:23 2017 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/mbed_official/code/mbed/builds/97feb9bacc10
\ No newline at end of file