Current temperature express as coloured theme.
Dependencies: N5110 TMP102 mbed
Fork of 2645_I2C_TMP102 by
main.cpp
- Committer:
- eencae
- Date:
- 2016-02-05
- Revision:
- 0:21a200b880d7
- Child:
- 1:dd5fb735acf1
File content as of revision 0:21a200b880d7:
/* 2645_I2C_TMP102 Sample code from ELEC2645 Week 17 Lab Demonstrates how to read the temperature from an I2C sensor (c) Craig A. Evans, University of Leeds, Feb 2016 */ #include "mbed.h" // addresses for ADD0 connected to GND #define TMP102_ADD 0x48 #define TMP102_R_ADD 0x91 #define TMP102_W_ADD 0x90 // register addresses #define TEMP_REG 0x00 #define CONFIG_REG 0x01 #define THIGH_REG 0x02 #define TLOW_REG 0x03 // I2C peripheral for temperature sensor I2C tmp102(I2C_SDA,I2C_SCL); // UART connection for PC Serial pc(USBTX,USBRX); // K64F on-board LEDs DigitalOut r_led(LED_RED); DigitalOut g_led(LED_GREEN); DigitalOut b_led(LED_BLUE); // K64F on-board switches InterruptIn sw2(SW2); InterruptIn sw3(SW3); // error function hangs flashing an LED void error(); // setup serial port void init_serial(); // set-up the on-board LEDs and switches void init_K64F(); // initialisation function for temperature sensor void init_TMP102(); // function to read temperature from sensor (in degrees C) float get_temperature(); int main() { // initialise the board, serial port and sensor init_K64F(); init_serial(); init_TMP102(); while (1) { // read temperature and print over serial port float T = get_temperature(); pc.printf("T = %f K\n",T); // small delay - 1s to match the update rate of the sensor (1 Hz) wait(1.0); } } void init_serial() { // set to highest baud - ensure terminal software matches pc.baud(115200); } void init_K64F() { // on-board LEDs are active-low, so set pin high to turn them off. r_led = 1; g_led = 1; b_led = 1; // since the on-board switches have external pull-ups, we should disable the internal pull-down // resistors that are enabled by default using InterruptIn sw2.mode(PullNone); sw3.mode(PullNone); } void error() { while(1) { // if error, hang while flashing error message r_led = 0; wait(0.2); r_led = 1; wait(0.2); } } void init_TMP102() { tmp102.frequency(400000); // set bus speed to 400 kHz int ack; // used to store acknowledgement bit char config_data[2]; // array for data char reg = CONFIG_REG; // register address //////// Read current status of configuration register /////// ack = tmp102.write(TMP102_W_ADD,®,1); // send the slave write address and the configuration register address if (ack) error(); // if we don't receive acknowledgement, flash error message ack = tmp102.read(TMP102_R_ADD,config_data,2); // read default 2 bytes from configuration register and store in array if (ack) error(); // if we don't receive acknowledgement, flash error message ///////// Configure the register ////////// // set conversion rate to 1 Hz - CR1 and CR2 are in the second data byte config_data[1] |= (1 << 6); // set bit 6 config_data[1] &= ~(1 << 7); // clear bit 7 //////// Send the configured register value to the slave config register //////////// // create data packet char data_packet[3] = {reg,config_data[0],config_data[1]}; ack = tmp102.write(TMP102_W_ADD,data_packet,3); // send the data packet to the slave write address if (ack) error(); // if we don't receive acknowledgement, flash error message } float get_temperature() { int ack; // used to store acknowledgement bit char data[2]; // array for data char reg = TEMP_REG; // temperature register address ack = tmp102.write(TMP102_W_ADD,®,1); // send temperature register address if (ack) error(); // if we don't receive acknowledgement, flash error message ack = tmp102.read(TMP102_R_ADD,data,2); // read 2 bytes from temperature register and store in array if (ack) error(); // if we don't receive acknowledgement, flash error message int temperature = (data[0] << 4) | (data[1] >> 4); return temperature*0.0625; }