(DA) Internet of Things and Smart Electronics- ELE3006M2122 / Mbed 2 deprecated Final_Project_V19_DLeaming_25574043

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
eencae
Date:
Fri Feb 05 16:23:38 2016 +0000
Child:
1:dd5fb735acf1
Commit message:
Initial commit.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Feb 05 16:23:38 2016 +0000
@@ -0,0 +1,150 @@
+/* 
+
+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,&reg,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,&reg,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;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Fri Feb 05 16:23:38 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/f141b2784e32
\ No newline at end of file