A library for STMicroelectronics STTS751 I2C temperature sensor

Dependents:   STTS751_Demo

Revision:
2:3116fe4a0079
Parent:
1:b0a3645a3dba
Child:
3:f9d3008f7e8f
--- a/STTS751.cpp	Sat Jan 18 02:31:12 2014 +0000
+++ b/STTS751.cpp	Sun Jan 19 03:13:38 2014 +0000
@@ -16,6 +16,8 @@
 
 #include "STTS751.h"
 
+#define SET_BITS(x,m,b) (((x) & !(m)) | (b))
+
 STTS751::STTS751(PinName sda, PinName scl, Address addr, Model model): _i2c(sda, scl), _addr(addr | model)
 {
     init();
@@ -28,7 +30,23 @@
 
 void STTS751::init()
 {
-    // TODO: proper initialization of the device
+    write8(REG_CONFIGURATION, 0x00);
+    write8(REG_CONV_RATE, 0x04);
+}
+
+int STTS751::addr() {
+    return _addr;
+}
+
+STTS751::Resolution STTS751::resolution() {
+    char conf = read8(REG_CONFIGURATION);
+    return (STTS751::Resolution)(conf & RES_MASK);
+}
+
+void STTS751::setResolution(STTS751::Resolution res) {
+    char conf = read8(REG_CONFIGURATION);
+    conf = SET_BITS(conf, RES_MASK, res);
+    write8(REG_CONFIGURATION, conf);
 }
 
 float STTS751::temp()
@@ -38,13 +56,20 @@
     return ((h << 8) | l) / 256.0;
 }
 
+#ifdef MBED_OPERATORS
 STTS751::operator float()
 {
     return temp();
 }
+#endif
 
 char STTS751::read8(char reg) {
     _i2c.write(_addr, &reg, 1, true);
     _i2c.read(_addr, &reg, 1);
     return reg;
 }
+
+void STTS751::write8(char reg, char data) {
+    char buff[2] = { reg, data };
+    _i2c.write(_addr, buff, 2);
+}