Slightly revised version of the TMP102 library created by Craig A. Evans
Fork of TMP102 by
TMP102.cpp@2:3df27241f9b3, 2016-05-08 (annotated)
- Committer:
- andreykotov91
- Date:
- Sun May 08 17:36:52 2016 +0000
- Revision:
- 2:3df27241f9b3
- Parent:
- 0:8818842a3573
Library edited for use with project
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
andreykotov91 | 2:3df27241f9b3 | 1 | /** |
andreykotov91 | 2:3df27241f9b3 | 2 | @file TMP102.cpp |
andreykotov91 | 2:3df27241f9b3 | 3 | |
andreykotov91 | 2:3df27241f9b3 | 4 | @brief Member functions implementations |
andreykotov91 | 2:3df27241f9b3 | 5 | |
andreykotov91 | 2:3df27241f9b3 | 6 | */ |
eencae | 0:8818842a3573 | 7 | |
eencae | 0:8818842a3573 | 8 | // obviously need to include the header |
eencae | 0:8818842a3573 | 9 | #include "TMP102.h" |
eencae | 0:8818842a3573 | 10 | |
eencae | 0:8818842a3573 | 11 | // we now implement each of the methods listed in the header |
eencae | 0:8818842a3573 | 12 | |
eencae | 0:8818842a3573 | 13 | // note the TMP102:: at the beginning of the method name |
eencae | 0:8818842a3573 | 14 | TMP102::TMP102(PinName sda, PinName scl) |
eencae | 0:8818842a3573 | 15 | { |
eencae | 0:8818842a3573 | 16 | // in the constructor, we create the mbed API objects using 'new' |
eencae | 0:8818842a3573 | 17 | i2c_ = new I2C(sda,scl); |
eencae | 0:8818842a3573 | 18 | led_ = new DigitalOut(LED_RED); |
eencae | 0:8818842a3573 | 19 | } |
eencae | 0:8818842a3573 | 20 | |
eencae | 0:8818842a3573 | 21 | void TMP102::init() |
eencae | 0:8818842a3573 | 22 | { |
eencae | 0:8818842a3573 | 23 | i2c_->frequency(400000); // set bus speed to 400 kHz |
eencae | 0:8818842a3573 | 24 | |
eencae | 0:8818842a3573 | 25 | int ack; // used to store acknowledgement bit |
eencae | 0:8818842a3573 | 26 | char config_data[2]; // array for data |
eencae | 0:8818842a3573 | 27 | char reg = CONFIG_REG; // register address |
eencae | 0:8818842a3573 | 28 | |
eencae | 0:8818842a3573 | 29 | //////// Read current status of configuration register /////// |
eencae | 0:8818842a3573 | 30 | |
eencae | 0:8818842a3573 | 31 | ack = i2c_->write(TMP102_W_ADD,®,1); // send the slave write address and the configuration register address |
eencae | 0:8818842a3573 | 32 | if (ack) |
eencae | 0:8818842a3573 | 33 | error(); // if we don't receive acknowledgement, flash error message |
eencae | 0:8818842a3573 | 34 | |
eencae | 0:8818842a3573 | 35 | ack = i2c_->read(TMP102_R_ADD,config_data,2); // read default 2 bytes from configuration register and store in array |
eencae | 0:8818842a3573 | 36 | if (ack) |
eencae | 0:8818842a3573 | 37 | error(); // if we don't receive acknowledgement, flash error message |
eencae | 0:8818842a3573 | 38 | |
eencae | 0:8818842a3573 | 39 | ///////// Configure the register ////////// |
eencae | 0:8818842a3573 | 40 | |
eencae | 0:8818842a3573 | 41 | // set conversion rate to 1 Hz - CR1 and CR2 are in the second data byte |
eencae | 0:8818842a3573 | 42 | config_data[1] |= (1 << 6); // set bit 6 |
eencae | 0:8818842a3573 | 43 | config_data[1] &= ~(1 << 7); // clear bit 7 |
eencae | 0:8818842a3573 | 44 | |
eencae | 0:8818842a3573 | 45 | //////// Send the configured register value to the slave config register //////////// |
eencae | 0:8818842a3573 | 46 | |
eencae | 0:8818842a3573 | 47 | // create data packet |
eencae | 0:8818842a3573 | 48 | char data_packet[3] = {reg,config_data[0],config_data[1]}; |
eencae | 0:8818842a3573 | 49 | |
eencae | 0:8818842a3573 | 50 | ack = i2c_->write(TMP102_W_ADD,data_packet,3); // send the data packet to the slave write address |
eencae | 0:8818842a3573 | 51 | if (ack) |
eencae | 0:8818842a3573 | 52 | error(); // if we don't receive acknowledgement, flash error message |
eencae | 0:8818842a3573 | 53 | |
eencae | 0:8818842a3573 | 54 | } |
eencae | 0:8818842a3573 | 55 | |
eencae | 0:8818842a3573 | 56 | void TMP102::read_temperature() |
eencae | 0:8818842a3573 | 57 | { |
eencae | 0:8818842a3573 | 58 | int ack; // used to store acknowledgement bit |
eencae | 0:8818842a3573 | 59 | char data[2]; // array for data |
eencae | 0:8818842a3573 | 60 | char reg = TEMP_REG; // temperature register address |
eencae | 0:8818842a3573 | 61 | |
eencae | 0:8818842a3573 | 62 | ack = i2c_->write(TMP102_W_ADD,®,1); // send temperature register address |
eencae | 0:8818842a3573 | 63 | if (ack) |
eencae | 0:8818842a3573 | 64 | error(); // if we don't receive acknowledgement, flash error message |
eencae | 0:8818842a3573 | 65 | |
eencae | 0:8818842a3573 | 66 | ack = i2c_->read(TMP102_R_ADD,data,2); // read 2 bytes from temperature register and store in array |
eencae | 0:8818842a3573 | 67 | if (ack) |
eencae | 0:8818842a3573 | 68 | error(); // if we don't receive acknowledgement, flash error message |
eencae | 0:8818842a3573 | 69 | |
eencae | 0:8818842a3573 | 70 | int temperature = (data[0] << 4) | (data[1] >> 4); |
eencae | 0:8818842a3573 | 71 | |
eencae | 0:8818842a3573 | 72 | temperature_ = temperature*0.0625F; |
eencae | 0:8818842a3573 | 73 | } |
eencae | 0:8818842a3573 | 74 | |
eencae | 0:8818842a3573 | 75 | // temperature accessor method |
eencae | 0:8818842a3573 | 76 | float TMP102::get_temperature() |
eencae | 0:8818842a3573 | 77 | { |
eencae | 0:8818842a3573 | 78 | read_temperature(); |
eencae | 0:8818842a3573 | 79 | return temperature_; |
eencae | 0:8818842a3573 | 80 | } |
eencae | 0:8818842a3573 | 81 | |
eencae | 0:8818842a3573 | 82 | void TMP102::error() |
eencae | 0:8818842a3573 | 83 | { |
eencae | 0:8818842a3573 | 84 | while(1) { // if error, hang while flashing error message |
eencae | 0:8818842a3573 | 85 | led_->write(0); |
eencae | 0:8818842a3573 | 86 | wait(0.2); |
eencae | 0:8818842a3573 | 87 | led_->write(1); |
eencae | 0:8818842a3573 | 88 | wait(0.2); |
eencae | 0:8818842a3573 | 89 | } |
eencae | 0:8818842a3573 | 90 | } |