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:
legstar85
Date:
Fri Dec 17 08:26:48 2021 +0000
Revision:
2:d95a4e13f6cf
Parent:
0:8818842a3573
Used & amended by D.Leaming, University of Lincoln, December 2021

Who changed what in which revision?

UserRevisionLine numberNew contents of line
legstar85 2:d95a4e13f6cf 1 /* * Print String
legstar85 2:d95a4e13f6cf 2 *
legstar85 2:d95a4e13f6cf 3 * Prints a string of characters to the screen buffer, string is cut off after the 83rd pixel.
legstar85 2:d95a4e13f6cf 4 * @param x - the column number (0 to 83)
legstar85 2:d95a4e13f6cf 5 * @param y - the row number (0-5) - the display is split into 6 banks - each bank can be considered a row
legstar85 2:d95a4e13f6cf 6 * @author - David Leaming - 25574043
legstar85 2:d95a4e13f6cf 7 * @ Date - December 2021
legstar85 2:d95a4e13f6cf 8 *
legstar85 2:d95a4e13f6cf 9 * Acknowledgements
legstar85 2:d95a4e13f6cf 10 * Craig A. Evans, University of Leeds, TMP102 Library ,Feb 2016
legstar85 2:d95a4e13f6cf 11 * Dr Edmond Nurellari, University of Lincoln, Joystick & N5110 Libraries
legstar85 2:d95a4e13f6cf 12 *
legstar85 2:d95a4e13f6cf 13 */
legstar85 2:d95a4e13f6cf 14
eencae 0:8818842a3573 15 // library implemtation file
eencae 0:8818842a3573 16
eencae 0:8818842a3573 17 // obviously need to include the header
eencae 0:8818842a3573 18 #include "TMP102.h"
eencae 0:8818842a3573 19
eencae 0:8818842a3573 20 // we now implement each of the methods listed in the header
eencae 0:8818842a3573 21
eencae 0:8818842a3573 22 // note the TMP102:: at the beginning of the method name
eencae 0:8818842a3573 23 TMP102::TMP102(PinName sda, PinName scl)
eencae 0:8818842a3573 24 {
eencae 0:8818842a3573 25 // in the constructor, we create the mbed API objects using 'new'
eencae 0:8818842a3573 26 i2c_ = new I2C(sda,scl);
eencae 0:8818842a3573 27 led_ = new DigitalOut(LED_RED);
eencae 0:8818842a3573 28 }
eencae 0:8818842a3573 29
eencae 0:8818842a3573 30 void TMP102::init()
eencae 0:8818842a3573 31 {
eencae 0:8818842a3573 32 i2c_->frequency(400000); // set bus speed to 400 kHz
eencae 0:8818842a3573 33
eencae 0:8818842a3573 34 int ack; // used to store acknowledgement bit
eencae 0:8818842a3573 35 char config_data[2]; // array for data
eencae 0:8818842a3573 36 char reg = CONFIG_REG; // register address
eencae 0:8818842a3573 37
eencae 0:8818842a3573 38 //////// Read current status of configuration register ///////
eencae 0:8818842a3573 39
eencae 0:8818842a3573 40 ack = i2c_->write(TMP102_W_ADD,&reg,1); // send the slave write address and the configuration register address
eencae 0:8818842a3573 41 if (ack)
eencae 0:8818842a3573 42 error(); // if we don't receive acknowledgement, flash error message
eencae 0:8818842a3573 43
eencae 0:8818842a3573 44 ack = i2c_->read(TMP102_R_ADD,config_data,2); // read default 2 bytes from configuration register and store in array
eencae 0:8818842a3573 45 if (ack)
eencae 0:8818842a3573 46 error(); // if we don't receive acknowledgement, flash error message
eencae 0:8818842a3573 47
eencae 0:8818842a3573 48 ///////// Configure the register //////////
eencae 0:8818842a3573 49
eencae 0:8818842a3573 50 // set conversion rate to 1 Hz - CR1 and CR2 are in the second data byte
eencae 0:8818842a3573 51 config_data[1] |= (1 << 6); // set bit 6
eencae 0:8818842a3573 52 config_data[1] &= ~(1 << 7); // clear bit 7
eencae 0:8818842a3573 53
eencae 0:8818842a3573 54 //////// Send the configured register value to the slave config register ////////////
eencae 0:8818842a3573 55
eencae 0:8818842a3573 56 // create data packet
eencae 0:8818842a3573 57 char data_packet[3] = {reg,config_data[0],config_data[1]};
eencae 0:8818842a3573 58
eencae 0:8818842a3573 59 ack = i2c_->write(TMP102_W_ADD,data_packet,3); // send the data packet to the slave write address
eencae 0:8818842a3573 60 if (ack)
eencae 0:8818842a3573 61 error(); // if we don't receive acknowledgement, flash error message
eencae 0:8818842a3573 62
eencae 0:8818842a3573 63 }
eencae 0:8818842a3573 64
eencae 0:8818842a3573 65 void TMP102::read_temperature()
eencae 0:8818842a3573 66 {
eencae 0:8818842a3573 67 int ack; // used to store acknowledgement bit
eencae 0:8818842a3573 68 char data[2]; // array for data
eencae 0:8818842a3573 69 char reg = TEMP_REG; // temperature register address
eencae 0:8818842a3573 70
eencae 0:8818842a3573 71 ack = i2c_->write(TMP102_W_ADD,&reg,1); // send temperature register address
eencae 0:8818842a3573 72 if (ack)
eencae 0:8818842a3573 73 error(); // if we don't receive acknowledgement, flash error message
eencae 0:8818842a3573 74
eencae 0:8818842a3573 75 ack = i2c_->read(TMP102_R_ADD,data,2); // read 2 bytes from temperature register and store in array
eencae 0:8818842a3573 76 if (ack)
eencae 0:8818842a3573 77 error(); // if we don't receive acknowledgement, flash error message
eencae 0:8818842a3573 78
eencae 0:8818842a3573 79 int temperature = (data[0] << 4) | (data[1] >> 4);
eencae 0:8818842a3573 80
eencae 0:8818842a3573 81 temperature_ = temperature*0.0625F;
eencae 0:8818842a3573 82 }
eencae 0:8818842a3573 83
eencae 0:8818842a3573 84 // temperature accessor method
eencae 0:8818842a3573 85 float TMP102::get_temperature()
eencae 0:8818842a3573 86 {
eencae 0:8818842a3573 87 read_temperature();
eencae 0:8818842a3573 88 return temperature_;
eencae 0:8818842a3573 89 }
eencae 0:8818842a3573 90
eencae 0:8818842a3573 91 void TMP102::error()
eencae 0:8818842a3573 92 {
eencae 0:8818842a3573 93 while(1) { // if error, hang while flashing error message
eencae 0:8818842a3573 94 led_->write(0);
eencae 0:8818842a3573 95 wait(0.2);
eencae 0:8818842a3573 96 led_->write(1);
eencae 0:8818842a3573 97 wait(0.2);
eencae 0:8818842a3573 98 }
eencae 0:8818842a3573 99 }