(DA) Internet of Things and Smart Electronics- ELE3006M2122 / Mbed OS AnimalTempChecker
Committer:
ejh23
Date:
Thu Dec 16 11:33:20 2021 +0000
Revision:
3:0a85cca4faa3
Parent:
2:33af3e378563
Child:
4:14ea6bb0dbad
added some code for the LCD screen - yet to be related to temperature readings

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eencae 0:21a200b880d7 1 /*
eencae 0:21a200b880d7 2
eencae 1:dd5fb735acf1 3 2645_I2C_TMP102_Library
eencae 0:21a200b880d7 4
eencae 0:21a200b880d7 5 Sample code from ELEC2645 Week 17 Lab
eencae 0:21a200b880d7 6
eencae 1:dd5fb735acf1 7 Demonstrates how to re-factor the TMP102 code into a library
eencae 0:21a200b880d7 8
eencae 0:21a200b880d7 9 (c) Craig A. Evans, University of Leeds, Feb 2016
eencae 0:21a200b880d7 10
eencae 0:21a200b880d7 11 */
eencae 0:21a200b880d7 12
eencae 0:21a200b880d7 13 #include "mbed.h"
eencae 1:dd5fb735acf1 14 #include "TMP102.h"
ejh23 3:0a85cca4faa3 15 #include "Bitmap.h"
ejh23 3:0a85cca4faa3 16 #include "N5110.h"
ejh23 3:0a85cca4faa3 17 // include the library header folders, ensure the library has been imported into the project file
ejh23 3:0a85cca4faa3 18
eencae 0:21a200b880d7 19
eencae 1:dd5fb735acf1 20 // Create TMP102 object
ejh23 3:0a85cca4faa3 21 TMP102 tmp102(I2C_SDA,I2C_SCL);
ejh23 3:0a85cca4faa3 22 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
eencae 0:21a200b880d7 23 // UART connection for PC
eencae 0:21a200b880d7 24 Serial pc(USBTX,USBRX);
eencae 0:21a200b880d7 25
eencae 0:21a200b880d7 26 // K64F on-board LEDs
eencae 0:21a200b880d7 27 DigitalOut r_led(LED_RED);
eencae 0:21a200b880d7 28 DigitalOut g_led(LED_GREEN);
eencae 0:21a200b880d7 29 DigitalOut b_led(LED_BLUE);
eencae 0:21a200b880d7 30 // K64F on-board switches
eencae 0:21a200b880d7 31 InterruptIn sw2(SW2);
eencae 0:21a200b880d7 32 InterruptIn sw3(SW3);
eencae 0:21a200b880d7 33
eencae 0:21a200b880d7 34 // error function hangs flashing an LED
eencae 0:21a200b880d7 35 void error();
eencae 0:21a200b880d7 36 // setup serial port
eencae 0:21a200b880d7 37 void init_serial();
eencae 0:21a200b880d7 38 // set-up the on-board LEDs and switches
eencae 0:21a200b880d7 39 void init_K64F();
eencae 0:21a200b880d7 40
eencae 0:21a200b880d7 41 int main()
eencae 0:21a200b880d7 42 {
eencae 1:dd5fb735acf1 43 // initialise the board and serial port
eencae 0:21a200b880d7 44 init_K64F();
eencae 0:21a200b880d7 45 init_serial();
eencae 1:dd5fb735acf1 46 // call the sensor init method using dot syntax
eencae 1:dd5fb735acf1 47 tmp102.init();
ejh23 3:0a85cca4faa3 48 lcd.init();
ejh23 3:0a85cca4faa3 49
ejh23 3:0a85cca4faa3 50 lcd.setContrast(0.4);
eencae 0:21a200b880d7 51
eencae 0:21a200b880d7 52 while (1) {
eencae 0:21a200b880d7 53
eencae 0:21a200b880d7 54 // read temperature and print over serial port
eencae 1:dd5fb735acf1 55 float T = tmp102.get_temperature();
eencae 0:21a200b880d7 56 pc.printf("T = %f K\n",T);
eencae 0:21a200b880d7 57 // small delay - 1s to match the update rate of the sensor (1 Hz)
eencae 0:21a200b880d7 58 wait(1.0);
ejh23 3:0a85cca4faa3 59
ejh23 3:0a85cca4faa3 60 lcd.clear(); // clear buffer at start of every loop
ejh23 3:0a85cca4faa3 61 // can directly print strings at specified co-ordinates (must be less than 84 pixels to fit on display)
ejh23 3:0a85cca4faa3 62 lcd.printString("Hello, World!",0,0);
ejh23 3:0a85cca4faa3 63
ejh23 3:0a85cca4faa3 64 char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
ejh23 3:0a85cca4faa3 65 // so can display a string of a maximum 14 characters in length
ejh23 3:0a85cca4faa3 66 // or create formatted strings - ensure they aren't more than 14 characters long
ejh23 3:0a85cca4faa3 67 int temperature = 27;
ejh23 3:0a85cca4faa3 68 int length = sprintf(buffer,"T = %2d C",temperature); // print formatted data to buffer
ejh23 3:0a85cca4faa3 69 // it is important the format specifier ensures the length will fit in the buffer
ejh23 3:0a85cca4faa3 70 if (length <= 14) // if string will fit on display (assuming printing at x=0)
ejh23 3:0a85cca4faa3 71 lcd.printString(buffer,0,1); // display on screen
ejh23 3:0a85cca4faa3 72
ejh23 3:0a85cca4faa3 73 float pressure = 1012.3; // same idea with floats
ejh23 3:0a85cca4faa3 74 length = sprintf(buffer,"P = %.2f mb",pressure);
ejh23 3:0a85cca4faa3 75 if (length <= 14)
ejh23 3:0a85cca4faa3 76 lcd.printString(buffer,0,2);
ejh23 3:0a85cca4faa3 77
ejh23 3:0a85cca4faa3 78 // can also print individual characters at specified place
ejh23 3:0a85cca4faa3 79 lcd.printChar('X',5,3);
ejh23 3:0a85cca4faa3 80
ejh23 3:0a85cca4faa3 81 // draw a line across the display at y = 40 pixels (origin top-left)
ejh23 3:0a85cca4faa3 82 for (int i = 0; i < WIDTH; i++) {
ejh23 3:0a85cca4faa3 83 lcd.setPixel(i,40,true);
ejh23 3:0a85cca4faa3 84 }
ejh23 3:0a85cca4faa3 85 // need to refresh display after setting pixels or writing strings
ejh23 3:0a85cca4faa3 86 lcd.refresh();
ejh23 3:0a85cca4faa3 87 wait(5.0);
eencae 0:21a200b880d7 88
eencae 0:21a200b880d7 89 }
eencae 0:21a200b880d7 90
eencae 0:21a200b880d7 91 }
eencae 0:21a200b880d7 92
eencae 0:21a200b880d7 93 void init_serial() {
eencae 0:21a200b880d7 94 // set to highest baud - ensure terminal software matches
ejh23 2:33af3e378563 95 pc.baud(9600);
eencae 0:21a200b880d7 96 }
eencae 0:21a200b880d7 97
eencae 0:21a200b880d7 98 void init_K64F()
eencae 0:21a200b880d7 99 {
eencae 0:21a200b880d7 100 // on-board LEDs are active-low, so set pin high to turn them off.
eencae 0:21a200b880d7 101 r_led = 1;
eencae 0:21a200b880d7 102 g_led = 1;
eencae 0:21a200b880d7 103 b_led = 1;
eencae 0:21a200b880d7 104
eencae 0:21a200b880d7 105 // since the on-board switches have external pull-ups, we should disable the internal pull-down
eencae 0:21a200b880d7 106 // resistors that are enabled by default using InterruptIn
eencae 0:21a200b880d7 107 sw2.mode(PullNone);
eencae 0:21a200b880d7 108 sw3.mode(PullNone);
eencae 0:21a200b880d7 109
eencae 0:21a200b880d7 110 }