diff --git a/I2C/.cproject b/I2C/.cproject
new file mode 100644
index 0000000..44e7a32
--- /dev/null
+++ b/I2C/.cproject
@@ -0,0 +1,242 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?xml version="1.0" encoding="UTF-8"?>
+<TargetConfig>
+<Properties property_2="LPC15xx_256K.cfx" property_3="NXP" property_4="LPC1549" property_count="5" version="100300"/>
+<infoList vendor="NXP">
+<info chip="LPC1549" connectscript="LPC15RunBootRomConnect.scp" flash_driver="LPC15xx_256K.cfx" match_id="0x0" name="LPC1549" resetscript="LPC15RunBootRomReset.scp" stub="crt_emu_cm3_gen">
+<chip>
+<name>LPC1549</name>
+<family>LPC15xx</family>
+<vendor>NXP (formerly Philips)</vendor>
+<reset board="None" core="Real" sys="Real"/>
+<clock changeable="TRUE" freq="12MHz" is_accurate="TRUE"/>
+<memory can_program="true" id="Flash" is_ro="true" type="Flash"/>
+<memory id="RAM" type="RAM"/>
+<memory id="Periph" is_volatile="true" type="Peripheral"/>
+<memoryInstance derived_from="Flash" id="MFlash256" location="0x0" size="0x40000"/>
+<memoryInstance derived_from="RAM" id="Ram0_16" location="0x2000000" size="0x4000"/>
+<memoryInstance derived_from="RAM" id="Ram1_16" location="0x2004000" size="0x4000"/>
+<memoryInstance derived_from="RAM" id="Ram2_4" location="0x2008000" size="0x1000"/>
+</chip>
+<processor>
+<name gcc_name="cortex-m3">Cortex-M3</name>
+<family>Cortex-M</family>
+</processor>
+</info>
+</infoList>
+</TargetConfig>
+
+
+ LPCXpresso1549
+
+
\ No newline at end of file
diff --git a/I2C/inc/I2C.h b/I2C/inc/I2C.h
new file mode 100644
index 0000000..2ac6c2f
--- /dev/null
+++ b/I2C/inc/I2C.h
@@ -0,0 +1,33 @@
+/*
+ * I2C.h
+ *
+ * Created on: 21.2.2016
+ * Author: krl
+ */
+
+#ifndef I2C_H_
+#define I2C_H_
+
+#include "chip.h"
+
+struct I2C_config {
+ unsigned int device_number;
+ unsigned int speed;
+ unsigned int clock_divider;
+ unsigned int i2c_mode;
+ I2C_config(): device_number(0), speed(100000), clock_divider(40), i2c_mode(IOCON_SFI2C_EN) {};
+};
+
+class I2C {
+public:
+ I2C(const I2C_config &cfg);
+ virtual ~I2C();
+ bool transaction(uint8_t devAddr, uint8_t *txBuffPtr, uint16_t txSize, uint8_t *rxBuffPtr, uint16_t rxSize);
+ bool write(uint8_t devAddr, uint8_t *txBuffPtr, uint16_t txSize);
+ bool read(uint8_t devAddr, uint8_t *rxBuffPtr, uint16_t rxSize);
+private:
+ LPC_I2C_T *device;
+ static uint32_t I2CM_XferBlocking(LPC_I2C_T *pI2C, I2CM_XFER_T *xfer);
+};
+
+#endif /* I2C_H_ */
diff --git a/I2C/liblinks.xml b/I2C/liblinks.xml
new file mode 100644
index 0000000..1dc1803
--- /dev/null
+++ b/I2C/liblinks.xml
@@ -0,0 +1,32 @@
+
+
+
+
+ ${MacroStart}workspace_loc:/${ProjName}/inc${MacroEnd}
+
+
+ ${MacroStart}workspace_loc:/${ProjName}/inc${MacroEnd}
+
+
+ ${ProjName}
+
+
+ ${MacroStart}workspace_loc:/${ProjName}/Debug${MacroEnd}
+
+
+ ${MacroStart}workspace_loc:/${ProjName}/Release${MacroEnd}
+
+
+ ${ProjName}
+
+
+
diff --git a/I2C/src/I2C.cpp b/I2C/src/I2C.cpp
new file mode 100644
index 0000000..7b11a09
--- /dev/null
+++ b/I2C/src/I2C.cpp
@@ -0,0 +1,143 @@
+/*
+ * I2C.cpp
+ *
+ * Created on: 21.2.2016
+ * Author: krl
+ * Based on example provided by NXP Semiconductors. See copyright notice below.
+ */
+
+/*
+ * @brief I2CM bus master example using polling mode
+ *
+ * @note
+ * Copyright(C) NXP Semiconductors, 2014
+ * All rights reserved.
+ *
+ * @par
+ * Software that is described herein is for illustrative purposes only
+ * which provides customers with programming information regarding the
+ * LPC products. This software is supplied "AS IS" without any warranties of
+ * any kind, and NXP Semiconductors and its licensor disclaim any and
+ * all warranties, express or implied, including all implied warranties of
+ * merchantability, fitness for a particular purpose and non-infringement of
+ * intellectual property rights. NXP Semiconductors assumes no responsibility
+ * or liability for the use of the software, conveys no license or rights under any
+ * patent, copyright, mask work right, or any other intellectual property rights in
+ * or to any products. NXP Semiconductors reserves the right to make changes
+ * in the software without notification. NXP Semiconductors also makes no
+ * representation or warranty that such application will be suitable for the
+ * specified use without further testing or modification.
+ *
+ * @par
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation is hereby granted, under NXP Semiconductors' and its
+ * licensor's relevant copyrights in the software, without fee, provided that it
+ * is used in conjunction with NXP Semiconductors microcontrollers. This
+ * copyright, permission, and disclaimer notice must appear in all copies of
+ * this code.
+ */
+
+#include "I2C.h"
+
+
+I2C::I2C(const I2C_config &cfg): device(nullptr) {
+ if(cfg.device_number == 0) {
+ device = LPC_I2C0;
+ // board init must have been called before the pins can be configured
+ Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 22, IOCON_DIGMODE_EN | cfg.i2c_mode);
+ Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 23, IOCON_DIGMODE_EN | cfg.i2c_mode);
+ Chip_SWM_EnableFixedPin(SWM_FIXED_I2C0_SCL);
+ Chip_SWM_EnableFixedPin(SWM_FIXED_I2C0_SDA);
+ }
+ else {
+ // currently we support only I2C number 0
+ }
+
+ if(device) {
+ /* Enable I2C clock and reset I2C peripheral - the boot ROM does not
+ do this */
+ Chip_I2C_Init(device);
+
+ /* Setup clock rate for I2C */
+ Chip_I2C_SetClockDiv(device, cfg.clock_divider);
+
+ /* Setup I2CM transfer rate */
+ Chip_I2CM_SetBusSpeed(device, cfg.speed);
+
+ /* Enable Master Mode */
+ Chip_I2CM_Enable(device);
+ }
+}
+
+I2C::~I2C() {
+ // TODO Auto-generated destructor stub
+}
+
+bool I2C::write(uint8_t devAddr, uint8_t *txBuffPtr, uint16_t txSize)
+{
+ return transaction(devAddr, txBuffPtr, txSize, nullptr, 0);
+}
+
+bool I2C::read(uint8_t devAddr, uint8_t *rxBuffPtr, uint16_t rxSize)
+{
+ return transaction(devAddr, nullptr, 0, rxBuffPtr, rxSize);
+}
+
+
+bool I2C::transaction(uint8_t devAddr, uint8_t *txBuffPtr, uint16_t txSize, uint8_t *rxBuffPtr, uint16_t rxSize) {
+ I2CM_XFER_T i2cmXferRec;
+
+ // make sure that master is idle
+ while(!Chip_I2CM_IsMasterPending(device));
+
+ /* Setup I2C transfer record */
+ i2cmXferRec.slaveAddr = devAddr;
+ i2cmXferRec.status = 0;
+ i2cmXferRec.txSz = txSize;
+ i2cmXferRec.rxSz = rxSize;
+ i2cmXferRec.txBuff = txBuffPtr;
+ i2cmXferRec.rxBuff = rxBuffPtr;
+
+ I2CM_XferBlocking(device, &i2cmXferRec);
+ // Chip_I2CM_XferBlocking returns before stop condition is fully completed
+ // therefore we need to wait for master to be idle when doing back-to-back transactions (see beginning of the function)
+
+ /* Test for valid operation */
+ if (i2cmXferRec.status == I2CM_STATUS_OK) {
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+
+/* Transmit and Receive data in master mode */
+/* This duplicates (and combines) the functionality of Chip_I2CM_Xfer and Chip_I2CM_XferBlocking with a modification
+ * that allows us to do a zero length write (needed to use honeywell humidity/temp sensor)
+ */
+uint32_t I2C::I2CM_XferBlocking(LPC_I2C_T *pI2C, I2CM_XFER_T *xfer)
+{
+ uint32_t ret = 0;
+ /* start transfer */
+
+ /* set the transfer status as busy */
+ xfer->status = I2CM_STATUS_BUSY;
+ /* Clear controller state. */
+ Chip_I2CM_ClearStatus(pI2C, I2C_STAT_MSTRARBLOSS | I2C_STAT_MSTSTSTPERR);
+ /* Write Address and RW bit to data register */
+ //Chip_I2CM_WriteByte(pI2C, (xfer->slaveAddr << 1) | (xfer->txSz == 0)); // original NXP version
+ // krl : both read and write lenght is 0 --> write (for honeywell temp sensor)
+ Chip_I2CM_WriteByte(pI2C, (xfer->slaveAddr << 1) | (xfer->txSz == 0 && xfer->rxSz != 0));
+ /* Enter to Master Transmitter mode */
+ Chip_I2CM_SendStart(pI2C);
+
+ while (ret == 0) {
+ /* wait for status change interrupt */
+ while (!Chip_I2CM_IsMasterPending(pI2C)) {}
+ /* call state change handler */
+ ret = Chip_I2CM_XferHandler(pI2C, xfer);
+ }
+ return ret;
+}
+
+
diff --git a/esp-vent-main/.cproject b/esp-vent-main/.cproject
index cbc0616..56d571c 100644
--- a/esp-vent-main/.cproject
+++ b/esp-vent-main/.cproject
@@ -43,6 +43,7 @@
+
@@ -69,6 +70,7 @@
+
@@ -85,6 +87,7 @@
+
@@ -114,12 +117,14 @@
+
@@ -182,6 +187,7 @@
+
@@ -208,6 +214,7 @@
+
@@ -224,6 +231,7 @@
+
@@ -253,12 +261,14 @@
+
diff --git a/esp-vent-main/.project b/esp-vent-main/.project
index 57d3871..54e112e 100644
--- a/esp-vent-main/.project
+++ b/esp-vent-main/.project
@@ -7,6 +7,7 @@
lpc_chip_15xx
DigitalIoPin
LiquidCrystal
+ I2C