Current temperature express as coloured theme.
Dependencies: N5110 TMP102 mbed
Fork of 2645_I2C_TMP102 by
main.cpp@2:3789998dde80, 2016-05-09 (annotated)
- Committer:
- bonnyngangu
- Date:
- Mon May 09 12:17:15 2016 +0000
- Revision:
- 2:3789998dde80
- Parent:
- 1:dd5fb735acf1
Temperature reader with blinking LEDs.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
eencae | 0:21a200b880d7 | 1 | /* |
bonnyngangu | 2:3789998dde80 | 2 | Joystick_Project |
bonnyngangu | 2:3789998dde80 | 3 | Bonny Ngangu |
bonnyngangu | 2:3789998dde80 | 4 | 6 March 2016 |
bonnyngangu | 2:3789998dde80 | 5 | (c) Bonny Ngangu, University of Leeds, Feb 2016 |
eencae | 0:21a200b880d7 | 6 | |
eencae | 0:21a200b880d7 | 7 | */ |
eencae | 0:21a200b880d7 | 8 | |
eencae | 0:21a200b880d7 | 9 | #include "mbed.h" |
eencae | 1:dd5fb735acf1 | 10 | // include the library header, ensure the library has been imported into the project |
eencae | 1:dd5fb735acf1 | 11 | #include "TMP102.h" |
bonnyngangu | 2:3789998dde80 | 12 | #include "N5110.h" |
bonnyngangu | 2:3789998dde80 | 13 | |
bonnyngangu | 2:3789998dde80 | 14 | |
bonnyngangu | 2:3789998dde80 | 15 | //Joystick direction tolerance altering |
bonnyngangu | 2:3789998dde80 | 16 | #define DIRECTION_TOLERANCE 0.1 |
bonnyngangu | 2:3789998dde80 | 17 | |
eencae | 0:21a200b880d7 | 18 | |
eencae | 1:dd5fb735acf1 | 19 | // Create TMP102 object |
eencae | 1:dd5fb735acf1 | 20 | TMP102 tmp102(I2C_SDA,I2C_SCL); |
eencae | 0:21a200b880d7 | 21 | // UART connection for PC |
eencae | 0:21a200b880d7 | 22 | Serial pc(USBTX,USBRX); |
eencae | 0:21a200b880d7 | 23 | |
eencae | 0:21a200b880d7 | 24 | // K64F on-board LEDs |
eencae | 0:21a200b880d7 | 25 | DigitalOut r_led(LED_RED); |
eencae | 0:21a200b880d7 | 26 | DigitalOut g_led(LED_GREEN); |
eencae | 0:21a200b880d7 | 27 | DigitalOut b_led(LED_BLUE); |
bonnyngangu | 2:3789998dde80 | 28 | |
bonnyngangu | 2:3789998dde80 | 29 | // VCC, SCE, RST, D/C, MOSI, SCLK, LED |
bonnyngangu | 2:3789998dde80 | 30 | N5110 lcd (PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3); |
bonnyngangu | 2:3789998dde80 | 31 | |
bonnyngangu | 2:3789998dde80 | 32 | |
bonnyngangu | 2:3789998dde80 | 33 | |
eencae | 0:21a200b880d7 | 34 | // K64F on-board switches |
eencae | 0:21a200b880d7 | 35 | InterruptIn sw2(SW2); |
eencae | 0:21a200b880d7 | 36 | InterruptIn sw3(SW3); |
eencae | 0:21a200b880d7 | 37 | |
eencae | 0:21a200b880d7 | 38 | // error function hangs flashing an LED |
eencae | 0:21a200b880d7 | 39 | void error(); |
eencae | 0:21a200b880d7 | 40 | // setup serial port |
eencae | 0:21a200b880d7 | 41 | void init_serial(); |
eencae | 0:21a200b880d7 | 42 | // set-up the on-board LEDs and switches |
eencae | 0:21a200b880d7 | 43 | void init_K64F(); |
eencae | 0:21a200b880d7 | 44 | |
eencae | 0:21a200b880d7 | 45 | int main() |
eencae | 0:21a200b880d7 | 46 | { |
bonnyngangu | 2:3789998dde80 | 47 | // first need to initialise display |
bonnyngangu | 2:3789998dde80 | 48 | lcd.init(); |
eencae | 1:dd5fb735acf1 | 49 | // initialise the board and serial port |
eencae | 0:21a200b880d7 | 50 | init_K64F(); |
eencae | 0:21a200b880d7 | 51 | init_serial(); |
eencae | 1:dd5fb735acf1 | 52 | // call the sensor init method using dot syntax |
eencae | 1:dd5fb735acf1 | 53 | tmp102.init(); |
eencae | 0:21a200b880d7 | 54 | |
eencae | 0:21a200b880d7 | 55 | while (1) { |
eencae | 0:21a200b880d7 | 56 | |
bonnyngangu | 2:3789998dde80 | 57 | // these are default settings so not strictly needed |
bonnyngangu | 2:3789998dde80 | 58 | lcd.normalMode(); // normal colour mode |
bonnyngangu | 2:3789998dde80 | 59 | lcd.setBrightness(0.5); // put LED backlight on 50% |
bonnyngangu | 2:3789998dde80 | 60 | |
bonnyngangu | 2:3789998dde80 | 61 | // can directly print strings at specified co-ordinates |
bonnyngangu | 2:3789998dde80 | 62 | lcd.printString("Current Temp",0,0); |
bonnyngangu | 2:3789998dde80 | 63 | |
eencae | 0:21a200b880d7 | 64 | // read temperature and print over serial port |
eencae | 1:dd5fb735acf1 | 65 | float T = tmp102.get_temperature(); |
eencae | 0:21a200b880d7 | 66 | pc.printf("T = %f K\n",T); |
bonnyngangu | 2:3789998dde80 | 67 | |
bonnyngangu | 2:3789998dde80 | 68 | char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) |
bonnyngangu | 2:3789998dde80 | 69 | // so can display a string of a maximum 14 characters in length |
bonnyngangu | 2:3789998dde80 | 70 | // or create formatted strings - ensure they aren't more than 14 characters long |
bonnyngangu | 2:3789998dde80 | 71 | int length = sprintf(buffer,"T = %.2f C",T); // print formatted data to buffer |
bonnyngangu | 2:3789998dde80 | 72 | // it is important the format specifier ensures the length will fit in the buffer |
bonnyngangu | 2:3789998dde80 | 73 | if (length <= 14) // if string will fit on display |
bonnyngangu | 2:3789998dde80 | 74 | lcd.printString(buffer,0,2); |
bonnyngangu | 2:3789998dde80 | 75 | |
eencae | 0:21a200b880d7 | 76 | // small delay - 1s to match the update rate of the sensor (1 Hz) |
eencae | 0:21a200b880d7 | 77 | wait(1.0); |
eencae | 0:21a200b880d7 | 78 | |
bonnyngangu | 2:3789998dde80 | 79 | if(T<27){ |
bonnyngangu | 2:3789998dde80 | 80 | |
bonnyngangu | 2:3789998dde80 | 81 | g_led = 0; |
bonnyngangu | 2:3789998dde80 | 82 | lcd.printString("Fan OFF",0,4); |
bonnyngangu | 2:3789998dde80 | 83 | } |
bonnyngangu | 2:3789998dde80 | 84 | |
bonnyngangu | 2:3789998dde80 | 85 | if (T>=30){ |
bonnyngangu | 2:3789998dde80 | 86 | |
bonnyngangu | 2:3789998dde80 | 87 | r_led = 0; |
bonnyngangu | 2:3789998dde80 | 88 | lcd.printString("Fan ON ",0,4); |
bonnyngangu | 2:3789998dde80 | 89 | } |
bonnyngangu | 2:3789998dde80 | 90 | |
eencae | 0:21a200b880d7 | 91 | } |
eencae | 0:21a200b880d7 | 92 | |
eencae | 0:21a200b880d7 | 93 | } |
eencae | 0:21a200b880d7 | 94 | |
eencae | 0:21a200b880d7 | 95 | void init_serial() { |
eencae | 0:21a200b880d7 | 96 | // set to highest baud - ensure terminal software matches |
eencae | 0:21a200b880d7 | 97 | pc.baud(115200); |
eencae | 0:21a200b880d7 | 98 | } |
eencae | 0:21a200b880d7 | 99 | |
eencae | 0:21a200b880d7 | 100 | void init_K64F() |
eencae | 0:21a200b880d7 | 101 | { |
eencae | 0:21a200b880d7 | 102 | // on-board LEDs are active-low, so set pin high to turn them off. |
eencae | 0:21a200b880d7 | 103 | r_led = 1; |
eencae | 0:21a200b880d7 | 104 | g_led = 1; |
eencae | 0:21a200b880d7 | 105 | b_led = 1; |
eencae | 0:21a200b880d7 | 106 | |
eencae | 0:21a200b880d7 | 107 | // since the on-board switches have external pull-ups, we should disable the internal pull-down |
eencae | 0:21a200b880d7 | 108 | // resistors that are enabled by default using InterruptIn |
eencae | 0:21a200b880d7 | 109 | sw2.mode(PullNone); |
eencae | 0:21a200b880d7 | 110 | sw3.mode(PullNone); |
eencae | 0:21a200b880d7 | 111 | } |