Levi Mariën
/
STC3100ppp
Custom project for driving a STC3100 sensor
Fork of STC3100 by
STC3100Sensor.cpp
- Committer:
- tommienator
- Date:
- 2017-11-04
- Revision:
- 1:dbc1e56be2cc
- Parent:
- 0:014d4be7a437
File content as of revision 1:dbc1e56be2cc:
/** * Driver for the STC3100 */ #include "mbed.h" #include "STC3100Sensor.h" I2C i2c(D14, D15); /** * Configuring the STC3100 * ------------------------ * This is done for the user automatically. See datasheet STC3100 page 15 for the * configuration that is applied. */ void stc3100Configure(void) { //The user need to provide the first address of the register, an increment //will be done automatically. char writeData[3]; //REG_MODE address writeData[0] = 0x00; //Configuration REG_MODE writeData[1] = 0x1c; //Configuration REG_CTRL writeData[2] = 0x03; i2c.write(STC3100_ADRESS_WRITE, writeData, 3); } /** * Reading the whole memory block (that is been declared) and save it to the byteArray * of the ustc3100Data union. */ void stc3100ReadChip(void) { i2c.read(STC3100_ADDRESS_READ, &(byteArray[0]), 10); } /** * Calculating of the data, they will be stored in the stc3100ActualData struct. */ void updateData(void) { unsigned int high_byte = 0; int value = 0; stc3100ReadChip(); // Converting to voltage high_byte = (unsigned int) VoltageHigh; high_byte <<= 8; value = (high_byte & 0xFF00) | VoltageLow; voltage = (float) value * 2.44; // Converting to current high_byte = (unsigned int) CurrentHigh; high_byte <<= 8; value = (high_byte & 0xFF00) | CurrentLow; value <<= 2; current = ((((float) value * 11.77) / 10.0) / 4.0) > 0.0 ? ((((float) value * 11.77) / 10.0) / 4.0) : -((((float) value * 11.77) / 10.0) / 4.0); current -= 54.0; // Converting to charge high_byte = (unsigned int) ChargeHigh; high_byte <<= 8; value = (high_byte & 0xFF00) | ChargeLow; charge = ((float) value * 6.70) / 10.0; // // Converting to temperature // high_byte = (unsigned int) stc3100Data.TemperatureHigh; // high_byte <<= 8; // value = (high_byte & 0xFF00) | stc3100Data.TemperatureLow; // value <<= 4; // stc3100ActualData.temperature = ((float) value * 0.125) / 16.0; } /** * Method for returning the voltage */ float getVoltage(void) { return voltage; } /** * Method for returning the current */ float getCurrent(void) { return current; } /** * Method for returning the charge */ float getCharge(void) { return charge; }