Working Menu, additions to be made

Dependencies:   mbed

Committer:
jackmcgarley
Date:
Wed Aug 24 18:48:25 2022 +0000
Revision:
15:61d9a4e63b99
Working menu, additions to be made;

Who changed what in which revision?

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