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