Rev 1.6 - Sample Period Work in progress

Dependencies:   mbed Bitmap N5110 TMP102 Joystick

Committer:
louismarr
Date:
Thu Dec 30 15:49:14 2021 +0000
Revision:
7:ef1dab708752
Parent:
6:117edd5dc0a0
Child:
8:9c5ef970de26
Rev 1.5

Who changed what in which revision?

UserRevisionLine numberNew contents of line
louismarr 5:138a91e25e1c 1 /*
louismarr 5:138a91e25e1c 2
louismarr 7:ef1dab708752 3 Acknowledgements to (c) Craig A. Evans, University of Leeds, Feb 2016 for Temp Library
louismarr 7:ef1dab708752 4 Acknowledgements to (c) Dr. Edmond Nurellari, University of Lincoln, Dec 2021 for Classes used
louismarr 5:138a91e25e1c 5
louismarr 7:ef1dab708752 6 Using Various Libraries & Functions in order to create a
louismarr 7:ef1dab708752 7 Temperature Based Health Assistive Smart Device
louismarr 0:f8a8c6a8a5c3 8 */
louismarr 0:f8a8c6a8a5c3 9
louismarr 7:ef1dab708752 10 /*
louismarr 7:ef1dab708752 11 ======================== Library Imports =======================================
louismarr 7:ef1dab708752 12 Importing the Header Files from the Class Libraries into the main.cpp
louismarr 7:ef1dab708752 13 */
louismarr 7:ef1dab708752 14 #include "mbed.h" // Mbed OS Library
louismarr 7:ef1dab708752 15 #include "TMP102.h" // TMP102 Header File
louismarr 7:ef1dab708752 16 #include "N5110.h" // N5110 Header File
louismarr 7:ef1dab708752 17 #include "Bitmap.h" // Bitmap Header File
louismarr 7:ef1dab708752 18
louismarr 0:f8a8c6a8a5c3 19
louismarr 7:ef1dab708752 20 /*
louismarr 7:ef1dab708752 21 ========================== Vairable Setup ======================================
louismarr 7:ef1dab708752 22 Pre-Determining the various Variable names to hardware pins on the K64F Board
louismarr 7:ef1dab708752 23 */
louismarr 0:f8a8c6a8a5c3 24
louismarr 7:ef1dab708752 25 TMP102 tmp102(I2C_SDA,I2C_SCL); // Create TMP102 object
louismarr 7:ef1dab708752 26 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); // Create lcd objec
louismarr 7:ef1dab708752 27 Serial serial(USBTX,USBRX); // CoolTerm TX, RX Comms Setup for Debug
louismarr 7:ef1dab708752 28 AnalogIn SP(PTB2); // Potentiometer for Setpoint
louismarr 7:ef1dab708752 29
louismarr 7:ef1dab708752 30 DigitalOut RED_led(LED_RED); // On-board K64F LED'S
louismarr 7:ef1dab708752 31 DigitalOut GRN_led(LED_GREEN);
louismarr 7:ef1dab708752 32 DigitalOut BLU_led(LED_BLUE);
louismarr 7:ef1dab708752 33
louismarr 7:ef1dab708752 34 InterruptIn sw2(SW2); // On-board K64F Switches
louismarr 5:138a91e25e1c 35 InterruptIn sw3(SW3);
louismarr 0:f8a8c6a8a5c3 36
louismarr 7:ef1dab708752 37 //Timer timer(); // USE FOR LOGGING BETWEEN 0-10s
louismarr 7:ef1dab708752 38 /*======================= Void Declaration ===================================*/
louismarr 7:ef1dab708752 39 void error(); // Error Hang Code Function
louismarr 7:ef1dab708752 40 void init_serial(); // Setup serial port Function
louismarr 7:ef1dab708752 41 void init_K64F(); // K64F Disabling Onboard Components Function
louismarr 1:5cdfc8d78097 42
louismarr 7:ef1dab708752 43 /*======================== Main Function =====================================*/
louismarr 0:f8a8c6a8a5c3 44 int main()
louismarr 0:f8a8c6a8a5c3 45 {
louismarr 6:117edd5dc0a0 46
louismarr 7:ef1dab708752 47 init_K64F(); // Initialise K64F Board
louismarr 7:ef1dab708752 48 init_serial(); // Initialise Serial Port
louismarr 7:ef1dab708752 49 tmp102.init(); // Initialise Temp Sensor
louismarr 7:ef1dab708752 50 lcd.init(); // Initialise LCD
louismarr 7:ef1dab708752 51
louismarr 6:117edd5dc0a0 52 lcd.setContrast(0.4);
louismarr 0:f8a8c6a8a5c3 53
louismarr 0:f8a8c6a8a5c3 54 while (1) {
louismarr 0:f8a8c6a8a5c3 55
louismarr 7:ef1dab708752 56 //timer.start();
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 7:ef1dab708752 64 lcd.printString("Temperature",0,0);
louismarr 6:117edd5dc0a0 65
louismarr 7:ef1dab708752 66 char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14 Max amound of Characters)
louismarr 6:117edd5dc0a0 67 // or create formatted strings - ensure they aren't more than 14 characters long
louismarr 6:117edd5dc0a0 68
louismarr 6:117edd5dc0a0 69 int length = sprintf(buffer,"T=%.2F 'C",T); // print formatted data to buffer
louismarr 6:117edd5dc0a0 70 // it is important the format specifier ensures the length will fit in the buffer
louismarr 6:117edd5dc0a0 71 if (length <= 14) // if string will fit on display (assuming printing at x=0)
louismarr 7:ef1dab708752 72 lcd.printString(buffer,0,1); // display on screen
louismarr 6:117edd5dc0a0 73
louismarr 7:ef1dab708752 74 float Set = 100 * SP;
louismarr 6:117edd5dc0a0 75 length = sprintf(buffer,"SP=%.2F 'C",Set);
louismarr 6:117edd5dc0a0 76 if (length <= 14) // if string will fit on display (assuming printing at x=0)
louismarr 7:ef1dab708752 77 lcd.printString(buffer,0,2); // display on screen
louismarr 6:117edd5dc0a0 78 serial.printf(" SP = %f", Set);
louismarr 7:ef1dab708752 79
louismarr 6:117edd5dc0a0 80
louismarr 7:ef1dab708752 81 if (Set < T){
louismarr 7:ef1dab708752 82 lcd.clear();
louismarr 7:ef1dab708752 83 lcd.printString("Over Heating",3,2);
louismarr 7:ef1dab708752 84 //serial.printf("OverTemp");
louismarr 7:ef1dab708752 85 }
louismarr 6:117edd5dc0a0 86 lcd.refresh();
louismarr 5:138a91e25e1c 87 wait(1.0);
louismarr 0:f8a8c6a8a5c3 88
louismarr 0:f8a8c6a8a5c3 89 }
louismarr 5:138a91e25e1c 90
louismarr 1:5cdfc8d78097 91 }
louismarr 7:ef1dab708752 92 /*
louismarr 7:ef1dab708752 93 =========================== Void Setup =========================================
louismarr 7:ef1dab708752 94 Custom Function's are called Void's, which are called upon inside the of the
louismarr 7:ef1dab708752 95 Main Function Code
louismarr 7:ef1dab708752 96 */
louismarr 0:f8a8c6a8a5c3 97
louismarr 0:f8a8c6a8a5c3 98 void init_serial() {
louismarr 7:ef1dab708752 99 // Baud Rate Communication for CoolTerm Debugging
louismarr 7:ef1dab708752 100 serial.baud(9600);
louismarr 0:f8a8c6a8a5c3 101 }
louismarr 0:f8a8c6a8a5c3 102
louismarr 5:138a91e25e1c 103 void init_K64F()
louismarr 0:f8a8c6a8a5c3 104 {
louismarr 7:ef1dab708752 105 // on-board LEDs are active when 0, so setting the pin to 1 turns them off.
louismarr 7:ef1dab708752 106 RED_led = 1;
louismarr 7:ef1dab708752 107 GRN_led = 1;
louismarr 7:ef1dab708752 108 BLU_led = 1;
louismarr 5:138a91e25e1c 109
louismarr 7:ef1dab708752 110 /* since the on-board switches have external pull-ups, disable the
louismarr 7:ef1dab708752 111 * internal pull-down resistors that are enabled by default using
louismarr 7:ef1dab708752 112 * the InterruptIn Command */
louismarr 5:138a91e25e1c 113 sw2.mode(PullNone);
louismarr 5:138a91e25e1c 114 sw3.mode(PullNone);
louismarr 0:f8a8c6a8a5c3 115
louismarr 0:f8a8c6a8a5c3 116 }
louismarr 7:ef1dab708752 117 /* void init_BP()
louismarr 7:ef1dab708752 118 {
louismarr 7:ef1dab708752 119
louismarr 7:ef1dab708752 120 }