Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@3:0a85cca4faa3, 2021-12-16 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |