summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <daniel.friesel@uos.de>2020-03-11 18:01:07 +0100
committerDaniel Friesel <daniel.friesel@uos.de>2020-03-11 18:01:07 +0100
commita929c3cf4d98ee5e17def528ab99e27335dfa539 (patch)
tree8e186a5227bb7d62e3b547b60c1cda489cd82b3f
parentd90a84032348f63f8b45b718939a0e957169b8a8 (diff)
Add S5851A temperature sensor driver
-rw-r--r--Makefile5
-rw-r--r--include/driver/s5851a.h19
-rw-r--r--src/app/i2cdetect/main.cc13
-rw-r--r--src/driver/s5851a.cc18
4 files changed, 55 insertions, 0 deletions
diff --git a/Makefile b/Makefile
index f3dea51..d008049 100644
--- a/Makefile
+++ b/Makefile
@@ -33,6 +33,11 @@ ifneq ($(findstring lm75,${drivers}), )
COMMON_FLAGS += -DDRIVER_LM75
endif
+ifneq ($(findstring s5851a,${drivers}), )
+ CXX_TARGETS += src/driver/s5851a.cc
+ COMMON_FLAGS += -DDRIVER_S5851A
+endif
+
ifneq ($(findstring am2320,${drivers}), )
CXX_TARGETS += src/driver/am2320.cc
COMMON_FLAGS += -DDRIVER_AM2320
diff --git a/include/driver/s5851a.h b/include/driver/s5851a.h
new file mode 100644
index 0000000..8acdeea
--- /dev/null
+++ b/include/driver/s5851a.h
@@ -0,0 +1,19 @@
+#ifndef S5851A_H
+#define S5851A_H
+
+class S5851A {
+ private:
+ S5851A(const S5851A &copy);
+ unsigned char const address;
+ unsigned char txbuf[1];
+ unsigned char rxbuf[2];
+
+ public:
+ S5851A(unsigned char const addr) : address(addr) {}
+
+ float getTemp();
+};
+
+extern S5851A s5851a;
+
+#endif
diff --git a/src/app/i2cdetect/main.cc b/src/app/i2cdetect/main.cc
index 68c3677..4f82dc5 100644
--- a/src/app/i2cdetect/main.cc
+++ b/src/app/i2cdetect/main.cc
@@ -9,6 +9,9 @@
#ifdef DRIVER_LM75
#include "driver/lm75.h"
#endif
+#ifdef DRIVER_S5851A
+#include "driver/s5851a.h"
+#endif
#ifdef DRIVER_AM2320
#include "driver/am2320.h"
#endif
@@ -45,6 +48,10 @@ void loop(void)
kout.printf_float(lm75.getTemp());
kout << endl;
#endif
+#ifdef DRIVER_S5851A
+ kout.printf_float(s5851a.getTemp());
+ kout << endl;
+#endif
#ifdef DRIVER_AM2320
am2320.read();
if (am2320.getStatus() == 0) {
@@ -116,6 +123,12 @@ void loop(void)
kout << "CCS811 status is " << ccs811.check() << endl;
#endif
#ifdef DRIVER_HDC1080
+ /*
+ hdc1080.heater(1);
+ for (unsigned char i = 0; i < 50; i++) {
+ hdc1080.getTemp();
+ }
+ */
kout << "HDC1080 temperature " << hdc1080.getTemp() << " degC" << endl;
kout << "HDC1080 humidity " << hdc1080.getRH() << " %H" << endl;
#endif
diff --git a/src/driver/s5851a.cc b/src/driver/s5851a.cc
new file mode 100644
index 0000000..be46181
--- /dev/null
+++ b/src/driver/s5851a.cc
@@ -0,0 +1,18 @@
+#include "driver/s5851a.h"
+#if defined(MULTIPASS_ARCH_HAS_I2C) && !defined(DRIVER_SOFTI2C)
+#include "driver/i2c.h"
+#else
+#include "driver/soft_i2c.h"
+#endif
+
+float S5851A::getTemp()
+{
+ txbuf[0] = 0;
+ rxbuf[0] = 0;
+ rxbuf[1] = 0;
+ i2c.xmit(address, 1, txbuf, 2, rxbuf);
+
+ return rxbuf[0] + (rxbuf[1] / 256.0);
+}
+
+S5851A s5851a(0x4b);