Rev 1.6 - Sample Period Work in progress

Dependencies:   mbed Bitmap N5110 TMP102 Joystick

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?

UserRevisionLine numberNew 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 }