Driver to read and control a serial (i2c) temperature sensor, The Microchip MCP9808 is the digital sensor to control, can be read it, set its resolution, shutdown and also set alarms.
Dependents: Hotboards_temp_alarms Hotboards_temp_fahrenheit Hotboards_temp_reading_temperature LCD_Temperatura
Diff: Hotboards_temp.cpp
- Revision:
- 1:f850ee1083ba
- Parent:
- 0:83da47b7ed26
--- a/Hotboards_temp.cpp Thu Mar 17 04:57:00 2016 +0000 +++ b/Hotboards_temp.cpp Tue Mar 22 20:39:49 2016 +0000 @@ -21,7 +21,7 @@ Hotboards_temp::Hotboards_temp( I2C &i2c, uint8_t address, uint8_t resolution ) : _i2c(i2c) { - _address = address | 0x18; + _address = (address<<1)|0x30; _resolution = resolution; } @@ -32,7 +32,7 @@ if( val == 0x0054 ) { // device is presence, default set resolution - writeReg( REG_RESOLUTION, _resolution ); + writeReg( REG_RESOLUTION, _resolution); // clear configuration register (alarms included) writeReg( REG_CONFIG, 0x00 ); flag = 1; @@ -40,6 +40,7 @@ return flag; } + float Hotboards_temp::read( void ) { uint16_t val; @@ -51,8 +52,9 @@ // small algorithm to calculate tmeperature in Celcius // borrowed from https://github.com/adafruit/Adafruit_MCP9808_Library/blob/master/Adafruit_MCP9808.cpp temp = val & 0x0FFF; + temp /= (float)16.0; - // check if a negative temperature + //check if a negative temperature if( val & 0x1000 ) temp -= 256; return temp; @@ -109,11 +111,13 @@ uint16_t Hotboards_temp::readReg( uint8_t reg ) { - int val; - char buffer[3]; - + uint16_t val; + char buffer[2]; + + _address &= 0x3E; buffer[0] = reg; _i2c.write( _address, buffer, 1, true ); + _address |= 0x01; _i2c.read( _address, buffer, 2, false ); val = buffer[0] << 8; @@ -125,7 +129,7 @@ void Hotboards_temp::writeReg( uint8_t reg, uint16_t val ) { char buffer[3] = { reg, val >> 8, val & 0x00FF }; - + _address &= 0x3E; _i2c.write( _address, buffer, 3 ); }