Generic Si7021 Temp/Hum sensor library

Dependents:   Turtle_RadioShuttle

Revision:
0:19633f4a946b
Child:
1:5ea2d9a2ef8c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HELIOS_Si7021.h	Fri Mar 29 13:24:58 2019 +0000
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2019 Helmut Tschemernjak
+ * 30826 Garbsen (Hannover) Germany
+ * Licensed under the Apache License, Version 2.0);
+ */
+
+#ifndef __HELIOS_Si7021_H__
+#define __HELIOS_Si7021_H__
+
+class HELIOS_Si7021 {
+public:
+	HELIOS_Si7021(PinName sda, PinName scl);
+	~HELIOS_Si7021();
+
+	void reset(void);
+	void readSerialNumber(void);
+	uint8_t getRevision(void) { return _revision; };
+	bool hasSensor(void) { return _foundDevice; };
+	
+	float readTemperature(void);
+	float readHumidity(void);
+	
+	enum sensorType {
+		SI_Engineering_Samples,
+		SI_7013,
+		SI_7020,
+		SI_7021,
+		SI_unkown,
+	};
+	const char *getModelName(void);
+	sensorType getModel(void);
+	
+private:
+    I2C *_i2c;
+	char _data[8];
+
+	bool _foundDevice;
+	void _readRevision(void);
+	uint32_t sernum_a, sernum_b;
+	sensorType _model;
+	uint8_t _revision;
+	uint8_t _readRegister8(uint8_t reg);
+	uint16_t _readRegister16(uint8_t reg);
+	void _writeRegister8(uint8_t reg, uint8_t value);
+	const static u_int8_t _i2caddr = 0x40 << 1; // convert from 7 to 8 bit.
+	const static int _TRANSACTION_TIMEOUT = 100; // Wire NAK/Busy timeout in ms
+};
+
+/**************************************************************************/
+
+#endif // __HELIOS_Si7021_H__
+