Temp Library from C.Evans.

Committer:
louismarr
Date:
Sat Dec 04 13:19:13 2021 +0000
Revision:
2:1a4fbc01a494
Parent:
0:8818842a3573
Child:
3:0cb40fee2959
Rev1.0

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
louismarr 2:1a4fbc01a494 9 TMP102::TMP102(PinName SDA, PinName SCL)
eencae 0:8818842a3573 10 {
louismarr 2:1a4fbc01a494 11 //New mbed API objects are created in the contructor using new
louismarr 2:1a4fbc01a494 12 i2c_ = new I2C(SDA,SCL);
louismarr 2:1a4fbc01a494 13 led_ = new DigitalOut(LED_BLUE);
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 }