Rev 1.6 - Sample Period Work in progress

Dependencies:   mbed Bitmap N5110 TMP102 Joystick

Committer:
louismarr
Date:
Sat Jan 08 18:29:45 2022 +0000
Revision:
9:77a6ea988e01
Parent:
8:9c5ef970de26
Child:
10:d98b2dd7ba09
Rev 1.8 Pop-Up Added

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 9:77a6ea988e01 29 //Timer timer(); // USE FOR LOGGING BETWEEN 0-10s
louismarr 7:ef1dab708752 30
louismarr 7:ef1dab708752 31 DigitalOut RED_led(LED_RED); // On-board K64F LED'S
louismarr 7:ef1dab708752 32 DigitalOut GRN_led(LED_GREEN);
louismarr 7:ef1dab708752 33 DigitalOut BLU_led(LED_BLUE);
louismarr 7:ef1dab708752 34
louismarr 7:ef1dab708752 35 InterruptIn sw2(SW2); // On-board K64F Switches
louismarr 5:138a91e25e1c 36 InterruptIn sw3(SW3);
louismarr 9:77a6ea988e01 37 InterruptIn R(PTB3); // Right Bumper Button
louismarr 9:77a6ea988e01 38 InterruptIn L(PTB18); // Left Bumper Button
louismarr 0:f8a8c6a8a5c3 39
louismarr 9:77a6ea988e01 40 volatile int g_R_flag = 0; // g_ in order to show it is a global variable.
louismarr 9:77a6ea988e01 41 volatile int g_L_flag = 0; // volatile flag as it will change within the isr
louismarr 8:9c5ef970de26 42
louismarr 7:ef1dab708752 43 /*======================= Void Declaration ===================================*/
louismarr 7:ef1dab708752 44 void error(); // Error Hang Code Function
louismarr 7:ef1dab708752 45 void init_serial(); // Setup serial port Function
louismarr 7:ef1dab708752 46 void init_K64F(); // K64F Disabling Onboard Components Function
louismarr 9:77a6ea988e01 47 void R_isr();
louismarr 9:77a6ea988e01 48 void L_isr();
louismarr 1:5cdfc8d78097 49
louismarr 7:ef1dab708752 50 /*======================== Main Function =====================================*/
louismarr 0:f8a8c6a8a5c3 51 int main()
louismarr 0:f8a8c6a8a5c3 52 {
louismarr 6:117edd5dc0a0 53
louismarr 7:ef1dab708752 54 init_K64F(); // Initialise K64F Board
louismarr 7:ef1dab708752 55 init_serial(); // Initialise Serial Port
louismarr 7:ef1dab708752 56 tmp102.init(); // Initialise Temp Sensor
louismarr 7:ef1dab708752 57 lcd.init(); // Initialise LCD
louismarr 7:ef1dab708752 58
louismarr 9:77a6ea988e01 59 lcd.setContrast(0.4); // Setup the contrast for the LCD Screen
louismarr 9:77a6ea988e01 60 R.fall(&R_isr);
louismarr 9:77a6ea988e01 61 R.mode(PullDown);
louismarr 9:77a6ea988e01 62
louismarr 9:77a6ea988e01 63 L.fall(&L_isr);
louismarr 9:77a6ea988e01 64 L.mode(PullDown);
louismarr 0:f8a8c6a8a5c3 65
louismarr 0:f8a8c6a8a5c3 66 while (1) {
louismarr 0:f8a8c6a8a5c3 67
louismarr 8:9c5ef970de26 68 //timer.start();
louismarr 8:9c5ef970de26 69 //for(i = 0; i < 10; i++){
louismarr 5:138a91e25e1c 70 // read temperature and print over serial port
louismarr 9:77a6ea988e01 71 float T = tmp102.get_temperature(); // Reading Temperature as a floating variable
louismarr 9:77a6ea988e01 72 float Set = SP * 100; // Reading Potentiometer as a floating variable. Multiplied by 100 to give larger range
louismarr 9:77a6ea988e01 73 if (g_L_flag){ // Condition to change over into new loop
louismarr 9:77a6ea988e01 74 g_L_flag = 0;
louismarr 9:77a6ea988e01 75 L.fall(&L_isr);
louismarr 9:77a6ea988e01 76 serial.printf("T = %f C\n",T); // Printing the Temperature over Serial Port
louismarr 8:9c5ef970de26 77 //serial.printf("%2.2fs: %3.1f deg C\n\r", timer.read(), T);
louismarr 6:117edd5dc0a0 78
louismarr 9:77a6ea988e01 79 lcd.clear(); // clearing the LCD buffer at the begining of the loop
louismarr 9:77a6ea988e01 80 lcd.printString("Temperature",0,0); // Can also pre-determine the co-ordinates of the ',0,0' (must be less than 84 pixels to fit on display)
louismarr 9:77a6ea988e01 81
louismarr 9:77a6ea988e01 82 char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14 Max amound of Characters)
louismarr 9:77a6ea988e01 83 // Therefor strings csn not exceed the 14 Character Limit
louismarr 6:117edd5dc0a0 84
louismarr 9:77a6ea988e01 85 int length = sprintf(buffer,"T=%.2F 'C",T); // print the temperature from the float variable T
louismarr 9:77a6ea988e01 86 // it is important the format specifier ensures the length will fit in the buffer
louismarr 9:77a6ea988e01 87 if (length <= 14) // Ensuring string will fit on the screen (Printing at x=0)
louismarr 9:77a6ea988e01 88 lcd.printString(buffer,0,1); // display on screen
louismarr 6:117edd5dc0a0 89
louismarr 9:77a6ea988e01 90 // Multiplying the Floating variable by 100 in order to gain a larger range
louismarr 9:77a6ea988e01 91 length = sprintf(buffer,"SP=%.2F 'C",Set); // Print the Setpoint from the Float Variable Set
louismarr 9:77a6ea988e01 92 if (length <= 14) // Ensuring string will fit on the screen (Printing at x=0)
louismarr 9:77a6ea988e01 93 lcd.printString(buffer,0,2); // display on screen
louismarr 9:77a6ea988e01 94 serial.printf(" SP = %f", Set); //
louismarr 9:77a6ea988e01 95
louismarr 9:77a6ea988e01 96 if (Set < T){ // Condition to change over into new loop
louismarr 9:77a6ea988e01 97 lcd.clear(); // clearing the LCD buffer at the begining of the loop
louismarr 9:77a6ea988e01 98 lcd.printString("Over Heating",3,2); // Print New Message
louismarr 9:77a6ea988e01 99 serial.printf("OverTemp"); // Debugging Print
louismarr 9:77a6ea988e01 100 }
louismarr 9:77a6ea988e01 101 lcd.refresh();
louismarr 9:77a6ea988e01 102 wait(1.0);
louismarr 9:77a6ea988e01 103
louismarr 6:117edd5dc0a0 104
louismarr 9:77a6ea988e01 105 if (g_R_flag){ // Condition to change over into new loop
louismarr 9:77a6ea988e01 106 g_R_flag = 0;
louismarr 9:77a6ea988e01 107 R.rise(&R_isr);
louismarr 9:77a6ea988e01 108 serial.printf(" Information Page Selected "); // Debugging Print
louismarr 9:77a6ea988e01 109 lcd.clear(); // Clear Screen
louismarr 9:77a6ea988e01 110 lcd.printString("Info Page",0,0); // Print Information Screen
louismarr 9:77a6ea988e01 111 lcd.printString("Author:",0,1);
louismarr 9:77a6ea988e01 112 lcd.printString("Louis M",0,2);
louismarr 9:77a6ea988e01 113 lcd.printString("18689006",0,3);
louismarr 9:77a6ea988e01 114 lcd.printString("Version 1.8",0,4);
louismarr 9:77a6ea988e01 115
louismarr 7:ef1dab708752 116 }
louismarr 9:77a6ea988e01 117 lcd.refresh();
louismarr 9:77a6ea988e01 118 wait(1.0);
louismarr 0:f8a8c6a8a5c3 119
louismarr 9:77a6ea988e01 120
louismarr 0:f8a8c6a8a5c3 121 }
louismarr 9:77a6ea988e01 122 }
louismarr 9:77a6ea988e01 123 }
louismarr 5:138a91e25e1c 124
louismarr 7:ef1dab708752 125 /*
louismarr 7:ef1dab708752 126 =========================== Void Setup =========================================
louismarr 7:ef1dab708752 127 Custom Function's are called Void's, which are called upon inside the of the
louismarr 7:ef1dab708752 128 Main Function Code
louismarr 7:ef1dab708752 129 */
louismarr 0:f8a8c6a8a5c3 130
louismarr 0:f8a8c6a8a5c3 131 void init_serial() {
louismarr 9:77a6ea988e01 132 // Baud Rate Communication for CoolTerm Debugging
louismarr 7:ef1dab708752 133 serial.baud(9600);
louismarr 0:f8a8c6a8a5c3 134 }
louismarr 0:f8a8c6a8a5c3 135
louismarr 5:138a91e25e1c 136 void init_K64F()
louismarr 0:f8a8c6a8a5c3 137 {
louismarr 7:ef1dab708752 138 // on-board LEDs are active when 0, so setting the pin to 1 turns them off.
louismarr 7:ef1dab708752 139 RED_led = 1;
louismarr 7:ef1dab708752 140 GRN_led = 1;
louismarr 9:77a6ea988e01 141 BLU_led = 1;
louismarr 9:77a6ea988e01 142 /* since the on-board switches have external pull-ups, disable the
louismarr 9:77a6ea988e01 143 * internal pull-down resistors that are enabled by default using
louismarr 9:77a6ea988e01 144 * the InterruptIn Command */
louismarr 5:138a91e25e1c 145 sw2.mode(PullNone);
louismarr 5:138a91e25e1c 146 sw3.mode(PullNone);
louismarr 9:77a6ea988e01 147 }
louismarr 0:f8a8c6a8a5c3 148
louismarr 9:77a6ea988e01 149 void R_isr() // Right Bumper Interrupt Service
louismarr 9:77a6ea988e01 150 {
louismarr 9:77a6ea988e01 151 g_R_flag = 1; // set flag in ISR
louismarr 0:f8a8c6a8a5c3 152 }
louismarr 9:77a6ea988e01 153
louismarr 9:77a6ea988e01 154 void L_isr() // Left Bumper Interrupt Service
louismarr 9:77a6ea988e01 155 {
louismarr 9:77a6ea988e01 156 g_L_flag = 1; // set flag in ISR
louismarr 9:77a6ea988e01 157 }
louismarr 9:77a6ea988e01 158 /*
louismarr 9:77a6ea988e01 159 void init_PCB()
louismarr 7:ef1dab708752 160 {
louismarr 7:ef1dab708752 161
louismarr 9:77a6ea988e01 162 }
louismarr 9:77a6ea988e01 163 */