TMP102 Snesor

Fork of TMP102 by Craig Evans

Committer:
Ihsianmulla
Date:
Mon May 02 19:25:50 2016 +0000
Revision:
2:aae68f8782a6
Parent:
0:8818842a3573
1st DRAFT

Who changed what in which revision?

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