Craig A. Evans Feb 2016 Published to publish other code

Committer:
ejh23
Date:
Mon Jan 31 12:05:52 2022 +0000
Revision:
3:a41d68a94106
Parent:
2:2e125e654e42
Not allowed in ISR context - error debug

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);
ejh23 3:a41d68a94106 81 //Wait(0.1);
eencae 0:8818842a3573 82 led_->write(1);
ejh23 3:a41d68a94106 83 //wait(0.1);//small delay seems to prevent spurious pixels during mbed reset
ejh23 2:2e125e654e42 84 printf("An error has occured");
eencae 0:8818842a3573 85 }
eencae 0:8818842a3573 86 }