Used & amended by D.Leaming, University of Lincoln, December 2021

Dependents:   Final_Project_V05_DLeaming_25574043_copy Final_Project_V06_DLeaming_25574043 Final_Project_V07_DLeaming_25574043 Final_Project_V08_DLeaming_25574043 ... more

Committer:
eencae
Date:
Fri Feb 05 17:24:06 2016 +0000
Revision:
0:8818842a3573
Child:
2:d95a4e13f6cf
Initial commit

Who changed what in which revision?

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