legionella detector

Dependencies:   mbed

Committer:
lewiscameron
Date:
Wed Aug 24 19:43:57 2022 +0000
Revision:
6:4e8b0d2bbe85
Parent:
2:9d6daa8a091c
end

Who changed what in which revision?

UserRevisionLine numberNew 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,&reg,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,&reg,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 //}