![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Rev 1.6 - Sample Period Work in progress
Dependencies: mbed Bitmap N5110 TMP102 Joystick
main.cpp@6:117edd5dc0a0, 2021-12-16 (annotated)
- Committer:
- louismarr
- Date:
- Thu Dec 16 15:48:12 2021 +0000
- Revision:
- 6:117edd5dc0a0
- Parent:
- 5:138a91e25e1c
- Child:
- 7:ef1dab708752
Rev 1.4
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
louismarr | 5:138a91e25e1c | 1 | /* |
louismarr | 5:138a91e25e1c | 2 | |
louismarr | 5:138a91e25e1c | 3 | 2645_I2C_TMP102_Library |
louismarr | 5:138a91e25e1c | 4 | |
louismarr | 5:138a91e25e1c | 5 | Sample code from ELEC2645 Week 17 Lab |
louismarr | 5:138a91e25e1c | 6 | |
louismarr | 5:138a91e25e1c | 7 | Demonstrates how to re-factor the TMP102 code into a library |
louismarr | 5:138a91e25e1c | 8 | |
louismarr | 5:138a91e25e1c | 9 | (c) Craig A. Evans, University of Leeds, Feb 2016 |
louismarr | 5:138a91e25e1c | 10 | |
louismarr | 0:f8a8c6a8a5c3 | 11 | */ |
louismarr | 0:f8a8c6a8a5c3 | 12 | |
louismarr | 5:138a91e25e1c | 13 | #include "mbed.h" |
louismarr | 5:138a91e25e1c | 14 | // include the library header, ensure the library has been imported into the project |
louismarr | 5:138a91e25e1c | 15 | #include "TMP102.h" |
louismarr | 6:117edd5dc0a0 | 16 | #include "N5110.h" |
louismarr | 6:117edd5dc0a0 | 17 | #include "Bitmap.h" |
louismarr | 0:f8a8c6a8a5c3 | 18 | |
louismarr | 5:138a91e25e1c | 19 | // Create TMP102 object |
louismarr | 5:138a91e25e1c | 20 | TMP102 tmp102(I2C_SDA,I2C_SCL); |
louismarr | 6:117edd5dc0a0 | 21 | N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); |
louismarr | 5:138a91e25e1c | 22 | // UART connection for PC |
louismarr | 5:138a91e25e1c | 23 | Serial serial(USBTX,USBRX); |
louismarr | 6:117edd5dc0a0 | 24 | AnalogIn SP(PTB2); |
louismarr | 0:f8a8c6a8a5c3 | 25 | |
louismarr | 5:138a91e25e1c | 26 | // K64F on-board LEDs |
louismarr | 5:138a91e25e1c | 27 | DigitalOut r_led(LED_RED); |
louismarr | 5:138a91e25e1c | 28 | DigitalOut g_led(LED_GREEN); |
louismarr | 5:138a91e25e1c | 29 | DigitalOut b_led(LED_BLUE); |
louismarr | 5:138a91e25e1c | 30 | // K64F on-board switches |
louismarr | 5:138a91e25e1c | 31 | InterruptIn sw2(SW2); |
louismarr | 5:138a91e25e1c | 32 | InterruptIn sw3(SW3); |
louismarr | 0:f8a8c6a8a5c3 | 33 | |
louismarr | 5:138a91e25e1c | 34 | // error function hangs flashing an LED |
louismarr | 5:138a91e25e1c | 35 | void error(); |
louismarr | 5:138a91e25e1c | 36 | // setup serial port |
louismarr | 5:138a91e25e1c | 37 | void init_serial(); |
louismarr | 5:138a91e25e1c | 38 | // set-up the on-board LEDs and switches |
louismarr | 5:138a91e25e1c | 39 | void init_K64F(); |
louismarr | 1:5cdfc8d78097 | 40 | |
louismarr | 6:117edd5dc0a0 | 41 | |
louismarr | 0:f8a8c6a8a5c3 | 42 | int main() |
louismarr | 0:f8a8c6a8a5c3 | 43 | { |
louismarr | 5:138a91e25e1c | 44 | // initialise the board and serial port |
louismarr | 5:138a91e25e1c | 45 | init_K64F(); |
louismarr | 0:f8a8c6a8a5c3 | 46 | init_serial(); |
louismarr | 5:138a91e25e1c | 47 | // call the sensor init method using dot syntax |
louismarr | 5:138a91e25e1c | 48 | tmp102.init(); |
louismarr | 6:117edd5dc0a0 | 49 | lcd.init(); |
louismarr | 6:117edd5dc0a0 | 50 | |
louismarr | 6:117edd5dc0a0 | 51 | |
louismarr | 6:117edd5dc0a0 | 52 | |
louismarr | 6:117edd5dc0a0 | 53 | lcd.setContrast(0.4); |
louismarr | 0:f8a8c6a8a5c3 | 54 | |
louismarr | 0:f8a8c6a8a5c3 | 55 | while (1) { |
louismarr | 0:f8a8c6a8a5c3 | 56 | |
louismarr | 5:138a91e25e1c | 57 | // read temperature and print over serial port |
louismarr | 5:138a91e25e1c | 58 | float T = tmp102.get_temperature(); |
louismarr | 5:138a91e25e1c | 59 | serial.printf("T = %f C\n",T); |
louismarr | 6:117edd5dc0a0 | 60 | |
louismarr | 5:138a91e25e1c | 61 | // small delay - 1s to match the update rate of the sensor (1 Hz) |
louismarr | 6:117edd5dc0a0 | 62 | lcd.clear(); // clear buffer at start of every loop |
louismarr | 6:117edd5dc0a0 | 63 | // can directly print strings at specified co-ordinates (must be less than 84 pixels to fit on display) |
louismarr | 6:117edd5dc0a0 | 64 | lcd.printString("Lets Gan!",0,0); |
louismarr | 6:117edd5dc0a0 | 65 | |
louismarr | 6:117edd5dc0a0 | 66 | char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) |
louismarr | 6:117edd5dc0a0 | 67 | // so can display a string of a maximum 14 characters in length |
louismarr | 6:117edd5dc0a0 | 68 | // or create formatted strings - ensure they aren't more than 14 characters long |
louismarr | 6:117edd5dc0a0 | 69 | // int temperature = 27; |
louismarr | 6:117edd5dc0a0 | 70 | |
louismarr | 6:117edd5dc0a0 | 71 | int length = sprintf(buffer,"T=%.2F 'C",T); // print formatted data to buffer |
louismarr | 6:117edd5dc0a0 | 72 | // it is important the format specifier ensures the length will fit in the buffer |
louismarr | 6:117edd5dc0a0 | 73 | if (length <= 14) // if string will fit on display (assuming printing at x=0) |
louismarr | 6:117edd5dc0a0 | 74 | lcd.printString(buffer,0,2); // display on screen |
louismarr | 6:117edd5dc0a0 | 75 | |
louismarr | 6:117edd5dc0a0 | 76 | float Set = 33 * SP; |
louismarr | 6:117edd5dc0a0 | 77 | length = sprintf(buffer,"SP=%.2F 'C",Set); |
louismarr | 6:117edd5dc0a0 | 78 | if (length <= 14) // if string will fit on display (assuming printing at x=0) |
louismarr | 6:117edd5dc0a0 | 79 | lcd.printString(buffer,0,4); // display on screen |
louismarr | 6:117edd5dc0a0 | 80 | serial.printf(" SP = %f", Set); |
louismarr | 6:117edd5dc0a0 | 81 | /* |
louismarr | 6:117edd5dc0a0 | 82 | float pressure = 1012.3; // same idea with floats |
louismarr | 6:117edd5dc0a0 | 83 | length = sprintf(buffer,"P = %.2f mb",pressure); |
louismarr | 6:117edd5dc0a0 | 84 | if (length <= 14) |
louismarr | 6:117edd5dc0a0 | 85 | lcd.printString(buffer,0,3); |
louismarr | 6:117edd5dc0a0 | 86 | */ |
louismarr | 6:117edd5dc0a0 | 87 | |
louismarr | 6:117edd5dc0a0 | 88 | lcd.refresh(); |
louismarr | 6:117edd5dc0a0 | 89 | |
louismarr | 5:138a91e25e1c | 90 | wait(1.0); |
louismarr | 0:f8a8c6a8a5c3 | 91 | |
louismarr | 0:f8a8c6a8a5c3 | 92 | } |
louismarr | 5:138a91e25e1c | 93 | |
louismarr | 1:5cdfc8d78097 | 94 | } |
louismarr | 0:f8a8c6a8a5c3 | 95 | |
louismarr | 0:f8a8c6a8a5c3 | 96 | void init_serial() { |
louismarr | 0:f8a8c6a8a5c3 | 97 | // set to highest baud - ensure terminal software matches |
louismarr | 1:5cdfc8d78097 | 98 | serial.baud(9600); |
louismarr | 0:f8a8c6a8a5c3 | 99 | } |
louismarr | 0:f8a8c6a8a5c3 | 100 | |
louismarr | 5:138a91e25e1c | 101 | void init_K64F() |
louismarr | 0:f8a8c6a8a5c3 | 102 | { |
louismarr | 5:138a91e25e1c | 103 | // on-board LEDs are active-low, so set pin high to turn them off. |
louismarr | 5:138a91e25e1c | 104 | r_led = 1; |
louismarr | 5:138a91e25e1c | 105 | g_led = 1; |
louismarr | 5:138a91e25e1c | 106 | b_led = 1; |
louismarr | 5:138a91e25e1c | 107 | |
louismarr | 5:138a91e25e1c | 108 | // since the on-board switches have external pull-ups, we should disable the internal pull-down |
louismarr | 5:138a91e25e1c | 109 | // resistors that are enabled by default using InterruptIn |
louismarr | 5:138a91e25e1c | 110 | sw2.mode(PullNone); |
louismarr | 5:138a91e25e1c | 111 | sw3.mode(PullNone); |
louismarr | 0:f8a8c6a8a5c3 | 112 | |
louismarr | 0:f8a8c6a8a5c3 | 113 | } |