(DA) Internet of Things and Smart Electronics- ELE3006M2122 / Mbed OS AnimalTempChecker

Files at this revision

API Documentation at this revision

Comitter:
ejh23
Date:
Mon Jan 31 12:06:33 2022 +0000
Parent:
7:7edce25b8f15
Commit message:
Old version of code

Changed in this revision

Bitmap/Bitmap.cpp Show diff for this revision Revisions of this file
Bitmap/Bitmap.h Show diff for this revision Revisions of this file
Joystick/Joystick.cpp Show diff for this revision Revisions of this file
Joystick/Joystick.h Show diff for this revision Revisions of this file
N5110/N5110.cpp Show diff for this revision Revisions of this file
N5110/N5110.h Show diff for this revision Revisions of this file
TMP102.lib Show diff for this revision Revisions of this file
main.cpp Show diff for this revision Revisions of this file
mbed-os.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show diff for this revision Revisions of this file
--- a/Bitmap/Bitmap.cpp	Fri Jan 21 12:17:34 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-#include "Bitmap.h"
-
-#include <iostream>
-
-#include "N5110.h"
-
-Bitmap::Bitmap(int const               *contents,
-               unsigned int const       height,
-               unsigned int const       width)
-    :
-    _contents(std::vector<int>(height*width)),
-    _height(height),
-    _width(width)
-{
-    // Perform a quick sanity check of the dimensions
-    if (_contents.size() != height * width) {
-        std::cerr << "Contents of bitmap has size " << _contents.size()
-                  << " pixels, but its dimensions were specified as "
-                  << width << " * " << height << " = " << width * height << std::endl;
-    }
-
-    for(unsigned int i = 0; i < height*width; ++i) _contents[i] = contents[i];
-}
-
-/**
- * @returns the value of the pixel at the given position
- */
-int Bitmap::get_pixel(unsigned int const row,
-                      unsigned int const column) const
-{
-    // First check that row and column indices are within bounds
-    if(column >= _width || row >= _height)
-    {
-        std::cerr << "The requested pixel with index " << row << "," << column
-                  << "is outside the bitmap dimensions: " << _width << ","
-                  << _height << std::endl;
-    }
-
-    // Now return the pixel value, using row-major indexing
-    return _contents[row * _width + column];
-}
-
-/**
- * @brief Prints the contents of the bitmap to the terminal
- */
-void Bitmap::print() const
-{
-    for (unsigned int row = 0; row < _height; ++row)
-    {
-        // Print each element of the row
-        for (unsigned int column = 0; column < _width; ++column)
-        {
-            int pixel = get_pixel(row, column);
-            std::cout << pixel;
-        }
-
-        // And then terminate with a new-line character
-        std::cout << std::endl;
-    }
-}
-
-/**
- * @brief Renders the contents of the bitmap onto an N5110 screen
- *
- * @param[in] lcd The screen to use for rendering
- * @param[in] x0  The horizontal position in pixels at which to render the bitmap
- * @param[in] y0  The vertical position in pixels at which to render the bitmap
- *
- * @details Note that x0, y0 gives the location of the top-left of the bitmap on
- *          the screen.
- *          This function only updates the buffer on the screen.  You still need
- *          to refresh the screen in order to actually see the bitmap.
- */
-void Bitmap::render(N5110 &lcd,
-                    unsigned int const x0,
-                    unsigned int const y0) const
-{
-    // Loop through each row of the bitmap image
-    for (unsigned int bitmap_row = 0; bitmap_row < _height; ++bitmap_row)
-    {
-        // Row index on the screen for rendering the row of pixels
-        unsigned int screen_row = y0 + bitmap_row;
-                
-        // Render each pixel in the row
-        for (unsigned int bitmap_col = 0; bitmap_col < _width; ++bitmap_col)
-        {
-            // Column index on the screen for rendering this pixel
-            int screen_col = x0 + bitmap_col;
-
-            // Find the required value of the pixel at the given location within
-            // the bitmap data and then write it to the LCD screen
-            int pixel = get_pixel(bitmap_row, bitmap_col);
-            lcd.setPixel(screen_col, screen_row, pixel);
-        }
-    }
-}
\ No newline at end of file
--- a/Bitmap/Bitmap.h	Fri Jan 21 12:17:34 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-#ifndef BITMAP_H
-#define BITMAP_H
-
-#include <vector>
-
-// Forward declarations
-class N5110;
-
-/**
- * @brief  A black & white bitmap that can be rendered on an N5110 screen
- * 
- * 
- * @code
-  // First declare the pixel map data using '1' for black,
-  // or '0' for white pixels
-  static int sprite_data[] = {
-    0,0,1,0,0,
-    0,1,1,1,0,
-    0,0,1,0,0,
-    0,1,1,1,0,
-    1,1,1,1,1,
-    1,1,1,1,1,
-    1,1,0,1,1,
-    1,1,0,1,1
-  };
-
-  // Instantiate the Bitmap object using the data above
-  Bitmap sprite(sprite_data, 8, 5); // Specify rows and columns in sprite
-  
-  // We can render the bitmap wherever we want on the screen
-  sprite.render(lcd, 20, 6); // x and y locations for rendering
-  sprite.render(lcd, 30, 10);
-  
-  // We can also print its values to the terminal
-  sprite.print();
- * @endcode
- */
-class Bitmap
-{
-private:
-    /**
-     * @brief The contents of the drawing, with pixels stored in row-major order
-     * @details '1' represents a black pixel; '0' represents white
-     */
-    std::vector<int> _contents;
-    
-    unsigned int _height; ///< The height of the drawing in pixels
-    unsigned int _width;  ///< The width of the drawing in pixels
-    
-public:
-    Bitmap(int const          *contents,
-           unsigned int const  height,
-           unsigned int const  width);
-
-    int get_pixel(unsigned int const row,
-                  unsigned int const column) const;
-
-    void print() const;
-
-    void render(N5110 &lcd,
-                unsigned int const x0,
-                unsigned int const y0) const;
-};
-
-#endif // BITMAP_H
\ No newline at end of file
--- a/Joystick/Joystick.cpp	Fri Jan 21 12:17:34 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,162 +0,0 @@
-#include "Joystick.h"
-
-Joystick::Joystick(PinName vertPin,PinName horizPin,PinName clickPin)
-{
-    vert = new AnalogIn(vertPin);
-    horiz = new AnalogIn(horizPin);
-    click = new InterruptIn(clickPin);
-}
-
-void Joystick::init()
-{
-    // read centred values of joystick
-    _x0 = horiz->read();
-    _y0 = vert->read();
-
-    // this assumes that the joystick is centred when the init function is called
-    // if perfectly centred, the pots should read 0.5, but this may
-    // not be the case and x0 and y0 will be used to calibrate readings
-
-    // turn on pull-down for button -> this assumes the other side of the button
-    // is connected to +3V3 so we read 1 when pressed and 0 when not pressed
-    click->mode(PullDown);
-    // we therefore need to fire the interrupt on a rising edge
-    //click->rise(callback(this,&Joystick::click_isr));
-    // need to use a callback since mbed-os5 - basically tells it to look in this class for the ISR
-    _click_flag = 0;
-
-}
-
-Direction Joystick::get_direction()
-{
-    float angle = get_angle();  // 0 to 360, -1 for centred
-
-    Direction d;
-    // partition 360 into segments and check which segment the angle is in
-    if (angle < 0.0f) {
-        d = CENTRE;   // check for -1.0 angle
-    } else if (angle < 22.5f) {  // then keep going in 45 degree increments
-        d = N;
-    } else if (angle < 67.5f) {
-        d = NE;
-    } else if (angle < 112.5f) {
-        d = E;
-    } else if (angle < 157.5f) {
-        d = SE;
-    } else if (angle < 202.5f) {
-        d = S;
-    } else if (angle < 247.5f) {
-        d = SW;
-    } else if (angle < 292.5f) {
-        d = W;
-    } else if (angle < 337.5f) {
-        d = NW;
-    } else {
-        d = N;
-    }
-
-    return d;
-}
-
-// this method gets the magnitude of the joystick movement
-float Joystick::get_mag()
-{
-    Polar p = get_polar();
-    return p.mag;
-}
-
-// this method gets the angle of joystick movement (0 to 360, 0 North)
-float Joystick::get_angle()
-{
-    Polar p = get_polar();
-    return p.angle;
-}
-
-// get raw joystick coordinate in range -1 to 1
-// Direction (x,y)
-// North     (0,1)
-// East      (1,0)
-// South     (0,-1)
-// West      (-1,0)
-Vector2D Joystick::get_coord()
-{
-    // read() returns value in range 0.0 to 1.0 so is scaled and centre value
-    // substracted to get values in the range -1.0 to 1.0
-    float x = 2.0f*( horiz->read() - _x0 );
-    float y = 2.0f*( vert->read() - _y0 );
-
-    // Note: the x value here is inverted to ensure the positive x is to the
-    // right. This is simply due to how the potentiometer on the joystick
-    // I was using was connected up. It could have been corrected in hardware
-    // by swapping the power supply pins. Instead it is done in software so may
-    // need to be changed depending on your wiring setup
-
-    Vector2D coord = {-x,y};
-    return coord;
-}
-
-// This maps the raw x,y coord onto a circular grid.
-// See:  http://mathproofs.blogspot.co.uk/2005/07/mapping-square-to-circle.html
-Vector2D Joystick::get_mapped_coord()
-{
-    Vector2D coord = get_coord();
-
-    // do the transformation
-    float x = coord.x*sqrt(1.0f-pow(coord.y,2.0f)/2.0f);
-    float y = coord.y*sqrt(1.0f-pow(coord.x,2.0f)/2.0f);
-
-    Vector2D mapped_coord = {x,y};
-    return mapped_coord;
-}
-
-// this function converts the mapped coordinates into polar form
-Polar Joystick::get_polar()
-{
-    // get the mapped coordinate
-    Vector2D coord = get_mapped_coord();
-
-    // at this point, 0 degrees (i.e. x-axis) will be defined to the East.
-    // We want 0 degrees to correspond to North and increase clockwise to 359
-    // like a compass heading, so we need to swap the axis and invert y
-    float x = coord.y;
-    float y = coord.x;
-
-    float mag = sqrt(x*x+y*y);  // pythagoras
-    float angle = RAD2DEG*atan2(y,x);
-    // angle will be in range -180 to 180, so add 360 to negative angles to
-    // move to 0 to 360 range
-    if (angle < 0.0f) {
-        angle+=360.0f;
-    }
-
-    // the noise on the ADC causes the values of x and y to fluctuate slightly
-    // around the centred values. This causes the random angle values to get
-    // calculated when the joystick is centred and untouched. This is also when
-    // the magnitude is very small, so we can check for a small magnitude and then
-    // set the angle to -1. This will inform us when the angle is invalid and the
-    // joystick is centred
-
-    if (mag < TOL) {
-        mag = 0.0f;
-        angle = -1.0f;
-    }
-
-    Polar p = {mag,angle};
-    return p;
-}
-
-bool Joystick::button_pressed()
-{
-    // ISR must have been triggered
-    if (_click_flag) {
-        _click_flag = 0;  // clear flag
-        return true;
-    } else {
-        return false;
-    }
-}
-
-void Joystick::click_isr()
-{
-    _click_flag = 1;
-}
--- a/Joystick/Joystick.h	Fri Jan 21 12:17:34 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-#ifndef JOYSTICK_H
-#define JOYSTICK_H
-
-#include "mbed.h"
-
-// this value can be tuned to alter tolerance of joystick movement
-#define TOL 0.1f
-#define RAD2DEG 57.2957795131f
-
-enum Direction {
-    CENTRE,  // 0
-    N,       // 1
-    NE,      // 2
-    E,       // 3
-    SE,      // 4
-    S,       // 5
-    SW,      // 6
-    W,       // 7
-    NW      // 8
-};
-
-struct Vector2D {
-  float x;
-  float y;  
-};
-
-struct Polar {
-    float mag;
-    float angle;
-};
-
-/** Joystick Class
-@brief Acknowledgements to Dr Craig A. Evans, University of Leeds
-@brief  Library for interfacing with analogue joystick
-@upgraded Dr Edmond Nurellari, University of Lincoln
-
-Example:
-
-@code
-
-#include "mbed.h"
-#include "Joystick.h"
-
-//                  y     x     button
-Joystick joystick(PTB10,PTB11,PTC16);
-
-int main() {
-    
-    joystick.init();
-    
-    while(1) {
-    
-        Vector2D coord = joystick.get_coord();
-        printf("Coord = %f,%f\n",coord.x,coord.y);
-        
-        Vector2D mapped_coord = joystick.get_mapped_coord(); 
-        printf("Mapped coord = %f,%f\n",mapped_coord.x,mapped_coord.y); 
-        
-        float mag = joystick.get_mag();
-        float angle = joystick.get_angle();
-        printf("Mag = %f Angle = %f\n",mag,angle);
-        
-        Direction d = joystick.get_direction();
-        printf("Direction = %i\n",d);
-        
-        if (joystick.button_pressed() ) {
-            printf("Button Pressed\n");  
-        }
-          
-        wait(0.5);
-    }
-    
-    
-}
-
-* @endcode
-*/
-class Joystick
-{
-public:
-    
-    //              y-pot              x-pot            button
-    Joystick(PinName vertPin,PinName horizPin,PinName clickPin);
-    
-    void init();  // needs to be called at start with joystick centred
-    float get_mag();              // polar
-    float get_angle();            // polar
-    Vector2D get_coord();         // cartesian co-ordinates x,y
-    Vector2D get_mapped_coord();  // x,y mapped to circle
-    Direction get_direction();    // N,NE,E,SE etc.
-    Polar get_polar();            // mag and angle in struct form
-    bool button_pressed();        // read button flag set in ISR when button pressed
-    
-private:
-
-    AnalogIn *vert;
-    AnalogIn *horiz;
-    InterruptIn *click;
-    
-    int _click_flag;    // flag set in ISR
-    void click_isr();   // ISR on button press
-       
-    // centred x,y values    
-    float _x0;
-    float _y0;
-    
-};
-
-#endif
\ No newline at end of file
--- a/N5110/N5110.cpp	Fri Jan 21 12:17:34 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,498 +0,0 @@
-#include "mbed.h"
-#include "N5110.h"
-
-// overloaded constructor includes power pin - LCD Vcc connected to GPIO pin
-// this constructor works fine with LPC1768 - enough current sourced from GPIO
-// to power LCD. Doesn't work well with K64F.
-/*N5110::N5110(PinName const pwrPin,
-             PinName const scePin,
-             PinName const rstPin,
-             PinName const dcPin,
-             PinName const mosiPin,
-             PinName const sclkPin,
-             PinName const ledPin)
-    :
-    _spi(new SPI(mosiPin,NC,sclkPin)), // create new SPI instance and initialise
-    _led(new PwmOut(ledPin)),
-    _pwr(new DigitalOut(pwrPin)),
-    _sce(new DigitalOut(scePin)),
-    _rst(new DigitalOut(rstPin)),
-    _dc(new DigitalOut(dcPin))
-{}
-*/
-// overloaded constructor does not include power pin - LCD Vcc must be tied to +3V3
-// Best to use this with K64F as the GPIO hasn't sufficient output current to reliably
-// drive the LCD.
-N5110::N5110(PinName const scePin,
-             PinName const rstPin,
-             PinName const dcPin,
-             PinName const mosiPin,
-             PinName const sclkPin,
-             PinName const ledPin)
-    :
-    _spi(new SPI(mosiPin,NC,sclkPin)), // create new SPI instance and initialise
-    _led(new PwmOut(ledPin)),
-    _pwr(NULL), // pwr not needed so null it to be safe
-    _sce(new DigitalOut(scePin)),
-    _rst(new DigitalOut(rstPin)),
-    _dc(new DigitalOut(dcPin))
-{}
-
-N5110::~N5110()
-{
-    delete _spi;
-
-    if(_pwr) {
-        delete _pwr;
-    }
-
-    delete _led;
-    delete _sce;
-    delete _rst;
-    delete _dc;
-}
-
-// initialise function - powers up and sends the initialisation commands
-void N5110::init()
-{
-    turnOn();     // power up
-      wait(0.1);  // small delay seems to prevent spurious pixels during mbed reset
-    reset();      // reset LCD - must be done within 100 ms
-   // initSPI();    
-    
-    setContrast(0.55);  // this may need tuning (say 0.4 to 0.6)
-    setBias(3);   // datasheet - 48:1 mux - don't mess with if you don't know what you're doing! (0 to 7)
-    setTempCoefficient(0); // datasheet - may need increasing (range 0 to 3) at very low temperatures
-    normalMode();  // normal video mode by default
-    
-    clearRAM();      // RAM is undefined at power-up so clear to be sure
-    clear();   // clear buffer
-    setBrightness(0.5);
-}
-
-// sets normal video mode (black on white)
-void N5110::normalMode()
-{
-    sendCommand(0b00100000);   // basic instruction
-    sendCommand(0b00001100);  // normal video mode- datasheet
-}
-
-// sets normal video mode (white on black)
-void N5110::inverseMode()
-{
-    sendCommand(0b00100000);   // basic instruction
-    sendCommand(0b00001101);   // inverse video mode - datasheet
-}
-
-// function to power up the LCD and backlight - only works when using GPIO to power
-void N5110::turnOn()
-{
-    if (_pwr != NULL) {
-        _pwr->write(1);  // apply power
-    }
-}
-
-// function to power down LCD
-void N5110::turnOff()
-{
-    clear(); // clear buffer
-    refresh();
-    setBrightness(0.0);  // turn backlight off
-    clearRAM();   // clear RAM to ensure specified current consumption
-    // send command to ensure we are in basic mode
-    
-    sendCommand(0b00100000); // basic mode
-    sendCommand(0b00001000); // clear display
-    sendCommand(0b00100001); // extended mode
-    sendCommand(0b00100100); // power down
-    
-    // if we are powering the LCD using the GPIO then make it low to turn off
-    if (_pwr != NULL) {
-        wait(0.10);  // small delay and then turn off the power pin
-        _pwr->write(0);  // turn off power
-    }
-
-}
-
-// function to change LED backlight brightness
-void N5110::setBrightness(float brightness)
-{
-    // check whether brightness is within range
-    if (brightness < 0.0f)
-        brightness = 0.0f;
-    if (brightness > 1.0f)
-        brightness = 1.0f;
-    // set PWM duty cycle
-    _led->write(brightness);
-}
-
-void N5110::setContrast(float contrast) {
-    
-    // enforce limits
-    if (contrast > 1.0f)
-        contrast = 1.0f;
-    else if (contrast < 0.0f)
-        contrast = 0.0;
-    
-    // convert to char in range 0 to 127 (i.e. 6 bits)
-    char ic = char(contrast*127.0f);
-    
-    sendCommand(0b00100001);  // extended instruction set
-    sendCommand(0b10000000 | ic);   // set Vop (which controls contrast)
-    sendCommand(0b00100000);  // back to basic instruction set
-}
-
-void N5110::setTempCoefficient(char tc) {
-    
-    // enforce limits
-    if (tc>3) {
-        tc=3;
-    }
-    
-    // temperature coefficient may need increasing at low temperatures
-
-    sendCommand(0b00100001);  // extended instruction set
-    sendCommand(0b00000100 | tc);
-    sendCommand(0b00100000);  // back to basic instruction set
-}
-    
-void N5110::setBias(char bias) {
-    
-    // from data sheet
-    // bias      mux rate
-    // 0        1:100
-    // 1        1:80
-    // 2        1:65
-    // 3        1:48   (default)
-    // 4        1:40/1:34
-    // 5        1:24
-    // 6        1:18/1:16
-    // 7        1:10/1:9/1:8
-    
-    // enforce limits
-    if (bias>7) {
-        bias=7;
-    }
-        
-    sendCommand(0b00100001);  // extended mode instruction
-    sendCommand(0b00010000 | bias);  
-    sendCommand(0b00100000); // end of extended mode instruction
-}
-
-// pulse the active low reset line
-void N5110::reset()
-{
-    _rst->write(0);  // reset the LCD
-    _rst->write(1);
-}
-
-// function to initialise SPI peripheral
-void N5110::initSPI()
-{
-    _spi->format(8,1);    // 8 bits, Mode 1 - polarity 0, phase 1 - base value of clock is 0, data captured on falling edge/propagated on rising edge
-    _spi->frequency(4000000);  // maximum of screen is 4 MHz
-}
-
-// send a command to the display
-void N5110::sendCommand(unsigned char command)
-{
-    _dc->write(0);  // set DC low for command
-    _sce->write(0); // set CE low to begin frame
-    _spi->write(command);  // send command
-    _dc->write(1);  // turn back to data by default
-    _sce->write(1); // set CE high to end frame (expected for transmission of single byte)
-}
-
-// send data to the display at the current XY address
-// dc is set to 1 (i.e. data) after sending a command and so should
-// be the default mode.
-void N5110::sendData(unsigned char data)
-{
-    _sce->write(0);   // set CE low to begin frame
-    _spi->write(data);
-    _sce->write(1);  // set CE high to end frame (expected for transmission of single byte)
-}
-
-// this function writes 0 to the 504 bytes to clear the RAM
-void N5110::clearRAM()
-{
-    _sce->write(0);  //set CE low to begin frame
-    for(int i = 0; i < WIDTH * HEIGHT; i++) { // 48 x 84 bits = 504 bytes
-        _spi->write(0x00);  // send 0's
-    }
-    _sce->write(1); // set CE high to end frame
-}
-
-// function to set the XY address in RAM for subsequenct data write
-void N5110::setXYAddress(unsigned int const x,
-                         unsigned int const y)
-{
-    if (x<WIDTH && y<HEIGHT) {  // check within range
-        sendCommand(0b00100000);  // basic instruction
-        sendCommand(0b10000000 | x);  // send addresses to display with relevant mask
-        sendCommand(0b01000000 | y);
-    }
-}
-
-// These functions are used to set, clear and get the value of pixels in the display
-// Pixels are addressed in the range of 0 to 47 (y) and 0 to 83 (x).  The refresh()
-// function must be called after set and clear in order to update the display
-void N5110::setPixel(unsigned int const x,
-                     unsigned int const y,
-                     bool const         state)
-{
-    if (x<WIDTH && y<HEIGHT) {  // check within range
-        // calculate bank and shift 1 to required position in the data byte
-        if(state) buffer[x][y/8] |= (1 << y%8);
-        else      buffer[x][y/8] &= ~(1 << y%8);
-    }
-}
-
-void N5110::clearPixel(unsigned int const x,
-                       unsigned int const y)
-{
-    if (x<WIDTH && y<HEIGHT) {  // check within range
-        // calculate bank and shift 1 to required position (using bit clear)
-        buffer[x][y/8] &= ~(1 << y%8);
-    }
-}
-
-int N5110::getPixel(unsigned int const x,
-                    unsigned int const y) const
-{
-    if (x<WIDTH && y<HEIGHT) {  // check within range
-        // return relevant bank and mask required bit
-
-        int pixel = (int) buffer[x][y/8] & (1 << y%8);
-
-        if (pixel)
-            return 1;
-        else
-            return 0;
-    }
-
-    return 0;
-
-}
-
-// function to refresh the display
-void N5110::refresh()
-{
-    setXYAddress(0,0);  // important to set address back to 0,0 before refreshing display
-    // address auto increments after printing string, so buffer[0][0] will not coincide
-    // with top-left pixel after priting string
-
-    _sce->write(0);  //set CE low to begin frame
-
-    for(int j = 0; j < BANKS; j++) {  // be careful to use correct order (j,i) for horizontal addressing
-        for(int i = 0; i < WIDTH; i++) {
-            _spi->write(buffer[i][j]);  // send buffer
-        }
-    }
-    _sce->write(1); // set CE high to end frame
-
-}
-
-// fills the buffer with random bytes.  Can be used to test the display.
-// The rand() function isn't seeded so it probably creates the same pattern everytime
-void N5110::randomiseBuffer()
-{
-    int i,j;
-    for(j = 0; j < BANKS; j++) {  // be careful to use correct order (j,i) for horizontal addressing
-        for(i = 0; i < WIDTH; i++) {
-            buffer[i][j] = rand()%256;  // generate random byte
-        }
-    }
-
-}
-
-// function to print 5x7 font
-void N5110::printChar(char const          c,
-                      unsigned int const  x,
-                      unsigned int const  y)
-{
-    if (y<BANKS) {  // check if printing in range of y banks
-
-        for (int i = 0; i < 5 ; i++ ) {
-            int pixel_x = x+i;
-            if (pixel_x > WIDTH-1)  // ensure pixel isn't outside the buffer size (0 - 83)
-                break;
-            buffer[pixel_x][y] = font5x7[(c - 32)*5 + i];
-            // array is offset by 32 relative to ASCII, each character is 5 pixels wide
-        }
-
-    }
-}
-
-// function to print string at specified position
-void N5110::printString(const char         *str,
-                        unsigned int const  x,
-                        unsigned int const  y)
-{
-    if (y<BANKS) {  // check if printing in range of y banks
-
-        int n = 0 ; // counter for number of characters in string
-        // loop through string and print character
-        while(*str) {
-
-            // writes the character bitmap data to the buffer, so that
-            // text and pixels can be displayed at the same time
-            for (int i = 0; i < 5 ; i++ ) {
-                int pixel_x = x+i+n*6;
-                if (pixel_x > WIDTH-1) // ensure pixel isn't outside the buffer size (0 - 83)
-                    break;
-                buffer[pixel_x][y] = font5x7[(*str - 32)*5 + i];
-            }
-            str++;  // go to next character in string
-            n++;    // increment index
-        }
-    }
-}
-
-// function to clear the screen buffer
-void N5110::clear()
-{
-    memset(buffer,0,sizeof(buffer));
-}
-
-// function to plot array on display
-void N5110::plotArray(float const array[])
-{
-    for (int i=0; i<WIDTH; i++) {  // loop through array
-        // elements are normalised from 0.0 to 1.0, so multiply
-        // by 47 to convert to pixel range, and subtract from 47
-        // since top-left is 0,0 in the display geometry
-        setPixel(i,47 - int(array[i]*47.0f),true);
-    }
-
-}
-
-// function to draw circle
-void N5110:: drawCircle(unsigned int const x0,
-                        unsigned int const y0,
-                        unsigned int const radius,
-                        FillType const     fill)
-{
-    // from http://en.wikipedia.org/wiki/Midpoint_circle_algorithm
-    int x = radius;
-    int y = 0;
-    int radiusError = 1-x;
-
-    while(x >= y) {
-
-        // if transparent, just draw outline
-        if (fill == FILL_TRANSPARENT) {
-            setPixel( x + x0,  y + y0,true);
-            setPixel(-x + x0,  y + y0,true);
-            setPixel( y + x0,  x + y0,true);
-            setPixel(-y + x0,  x + y0,true);
-            setPixel(-y + x0, -x + y0,true);
-            setPixel( y + x0, -x + y0,true);
-            setPixel( x + x0, -y + y0,true);
-            setPixel(-x + x0, -y + y0,true);
-        } else {  // drawing filled circle, so draw lines between points at same y value
-
-            int type = (fill==FILL_BLACK) ? 1:0;  // black or white fill
-
-            drawLine(x+x0,y+y0,-x+x0,y+y0,type);
-            drawLine(y+x0,x+y0,-y+x0,x+y0,type);
-            drawLine(y+x0,-x+y0,-y+x0,-x+y0,type);
-            drawLine(x+x0,-y+y0,-x+x0,-y+y0,type);
-        }
-
-        y++;
-        if (radiusError<0) {
-            radiusError += 2 * y + 1;
-        } else {
-            x--;
-            radiusError += 2 * (y - x) + 1;
-        }
-    }
-
-}
-
-void N5110::drawLine(unsigned int const x0,
-                     unsigned int const y0,
-                     unsigned int const x1,
-                     unsigned int const y1,
-                     unsigned int const type)
-{
-    // Note that the ranges can be negative so we have to turn the input values
-    // into signed integers first
-    int const y_range = static_cast<int>(y1) - static_cast<int>(y0);
-    int const x_range = static_cast<int>(x1) - static_cast<int>(x0);
-
-    // if dotted line, set step to 2, else step is 1
-    unsigned int const step = (type==2) ? 2:1;
-
-    // make sure we loop over the largest range to get the most pixels on the display
-    // for instance, if drawing a vertical line (x_range = 0), we need to loop down the y pixels
-    // or else we'll only end up with 1 pixel in the x column
-    if ( abs(x_range) > abs(y_range) ) {
-
-        // ensure we loop from smallest to largest or else for-loop won't run as expected
-        unsigned int const start = x_range > 0 ? x0:x1;
-        unsigned int const stop =  x_range > 0 ? x1:x0;
-
-        // loop between x pixels
-        for (unsigned int x = start; x<= stop ; x+=step) {
-            // do linear interpolation
-            int const dx = static_cast<int>(x)-static_cast<int>(x0);
-            unsigned int const y = y0 + y_range * dx / x_range;
-
-            // If the line type is '0', this will clear the pixel
-            // If it is '1' or '2', the pixel will be set
-            setPixel(x,y, type);
-        }
-    } else {
-
-        // ensure we loop from smallest to largest or else for-loop won't run as expected
-        unsigned int const start = y_range > 0 ? y0:y1;
-        unsigned int const stop =  y_range > 0 ? y1:y0;
-
-        for (unsigned int y = start; y<= stop ; y+=step) {
-            // do linear interpolation
-            int const dy = static_cast<int>(y)-static_cast<int>(y0);
-            unsigned int const x = x0 + x_range * dy / y_range;
-
-            // If the line type is '0', this will clear the pixel
-            // If it is '1' or '2', the pixel will be set
-            setPixel(x,y, type);
-        }
-    }
-
-}
-
-void N5110::drawRect(unsigned int const x0,
-                     unsigned int const y0,
-                     unsigned int const width,
-                     unsigned int const height,
-                     FillType const     fill)
-{
-    if (fill == FILL_TRANSPARENT) { // transparent, just outline
-        drawLine(x0,y0,x0+(width-1),y0,1);  // top
-        drawLine(x0,y0+(height-1),x0+(width-1),y0+(height-1),1);  // bottom
-        drawLine(x0,y0,x0,y0+(height-1),1);  // left
-        drawLine(x0+(width-1),y0,x0+(width-1),y0+(height-1),1);  // right
-    } else { // filled rectangle
-        int type = (fill==FILL_BLACK) ? 1:0;  // black or white fill
-        for (int y = y0; y<y0+height; y++) {  // loop through rows of rectangle
-            drawLine(x0,y,x0+(width-1),y,type);  // draw line across screen
-        }
-    }
-}
-
-void N5110::drawSprite(int x0,
-                       int y0,
-                       int nrows,
-                       int ncols,
-                       int *sprite)
-{
-    for (int i = 0; i < nrows; i++) {
-        for (int j = 0 ; j < ncols ; j++) {
-
-            int pixel = *((sprite+i*ncols)+j);
-            setPixel(x0+j,y0+i, pixel);
-        }
-    }
-}
\ No newline at end of file
--- a/N5110/N5110.h	Fri Jan 21 12:17:34 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,374 +0,0 @@
-#ifndef N5110_H
-#define N5110_H
-
-#include "mbed.h"
-
-// number of pixels on display
-#define WIDTH 84
-#define HEIGHT 48
-#define BANKS 6
-
-/// Fill types for 2D shapes
-enum FillType {
-    FILL_TRANSPARENT, ///< Transparent with outline
-    FILL_BLACK,       ///< Filled black
-    FILL_WHITE,       ///< Filled white (no outline)
-};
-
-
-class N5110
-{
-private:
-// objects
-    SPI         *_spi;
-    PwmOut      *_led;
-    DigitalOut  *_pwr;
-    DigitalOut  *_sce;
-    DigitalOut  *_rst;
-    DigitalOut  *_dc;
-
-// variables
-    unsigned char buffer[84][6];  // screen buffer - the 6 is for the banks - each one is 8 bits;
-
-public:
-    /** Create a N5110 object connected to the specified pins
-    *
-    * @param pwr  Pin connected to Vcc on the LCD display (pin 1)
-    * @param sce  Pin connected to chip enable (pin 3)
-    * @param rst  Pin connected to reset (pin 4)
-    * @param dc   Pin connected to data/command select (pin 5)
-    * @param mosi Pin connected to data input (MOSI) (pin 6)
-    * @param sclk Pin connected to serial clock (SCLK) (pin 7)
-    * @param led  Pin connected to LED backlight (must be PWM) (pin 8)
-    *
-    */
-    N5110(PinName const pwrPin,
-          PinName const scePin,
-          PinName const rstPin,
-          PinName const dcPin,
-          PinName const mosiPin,
-          PinName const sclkPin,
-          PinName const ledPin);
-
-    /** Create a N5110 object connected to the specified pins (Vcc to +3V3)
-    *
-    * @param sce  Pin connected to chip enable (pin 3)
-    * @param rst  Pin connected to reset (pin 4)
-    * @param dc   Pin connected to data/command select (pin 5)
-    * @param mosi Pin connected to data input (MOSI) (pin 6)
-    * @param sclk Pin connected to serial clock (SCLK) (pin 7)
-    * @param led  Pin connected to LED backlight (must be PWM) (pin 8)
-    *
-    */
-    N5110(PinName const scePin,
-          PinName const rstPin,
-          PinName const dcPin,
-          PinName const mosiPin,
-          PinName const sclkPin,
-          PinName const ledPin);
-
-    /**
-     * Free allocated memory when object goes out of scope
-     */
-    ~N5110();
-
-    /** Initialise display
-    *
-    *   Powers up the display and turns on backlight (50% brightness default).
-    *   Sets the display up in horizontal addressing mode and with normal video mode.
-    */
-    void init();
-
-    /** Turn off
-    *
-    *   Powers down the display and turns of the backlight.
-    *   Needs to be reinitialised before being re-used.
-    */
-    void turnOff();
-
-    /** Clear
-    *
-    *   Clears the screen buffer.
-    */
-    void clear();
-
-    /** Set screen constrast
-    *   @param constrast - float in range 0.0 to 1.0 (0.40 to 0.60 is usually a good value)
-    */
-    void setContrast(float contrast);
-    
-    /** Turn on normal video mode (default)
-    *  Black on white
-    */
-    void normalMode();
-
-    /** Turn on inverse video mode (default)
-    *  White on black
-    */
-    void inverseMode();
-
-    /** Set Brightness
-    *
-    *   Sets brightness of LED backlight.
-    *   @param brightness - float in range 0.0 to 1.0
-    */
-    void setBrightness(float const brightness);
-
-    /** Print String
-    *
-    *   Prints a string of characters to the screen buffer. String is cut-off after the 83rd pixel.
-    *   @param x - the column number (0 to 83)
-    *   @param y - the row number (0 to 5) - the display is split into 6 banks - each bank can be considered a row
-    */
-    void printString(char const         *str,
-                     unsigned int const  x,
-                     unsigned int const  y);
-
-    /** Print Character
-    *
-    *   Sends a character to the screen buffer.  Printed at the specified location. Character is cut-off after the 83rd pixel.
-    *   @param  c - the character to print. Can print ASCII as so printChar('C').
-    *   @param x - the column number (0 to 83)
-    *   @param y - the row number (0 to 5) - the display is split into 6 banks - each bank can be considered a row
-    */
-    void printChar(char const         c,
-                   unsigned int const x,
-                   unsigned int const y);
-
-    /**
-    * @brief Set a Pixel
-    *
-    * @param x     The x co-ordinate of the pixel (0 to 83)
-    * @param y     The y co-ordinate of the pixel (0 to 47)
-    * @param state The state of the pixel [true=black (default), false=white]
-    *
-    * @details This function sets the state of a pixel in the screen buffer.
-    *          The third parameter can be omitted,
-    */
-    void setPixel(unsigned int const x,
-                  unsigned int const y,
-                  bool const         state = true);
-
-    /**
-    *  @brief Clear a Pixel
-    *
-    *   @param  x - the x co-ordinate of the pixel (0 to 83)
-    *   @param  y - the y co-ordinate of the pixel (0 to 47)
-    *
-    *   @details This function clears pixel in the screen buffer
-    *
-    *   @deprecated Use setPixel(x, y, false) instead
-    */
-    void clearPixel(unsigned int const x,
-                    unsigned int const y)
-    __attribute__((deprecated("Use setPixel(x,y,false) instead")));
-
-    /** Get a Pixel
-    *
-    *   This function gets the status of a pixel in the screen buffer.
-    *   @param  x - the x co-ordinate of the pixel (0 to 83)
-    *   @param  y - the y co-ordinate of the pixel (0 to 47)
-    *   @returns
-    *       0           - pixel is clear
-    *       1    - pixel is set
-    */
-    int getPixel(unsigned int const x,
-                 unsigned int const y) const;
-
-    /** Refresh display
-    *
-    *   This functions sends the screen buffer to the display.
-    */
-    void refresh();
-
-    /** Randomise buffer
-    *
-    *   This function fills the buffer with random data.  Can be used to test the display.
-    *   A call to refresh() must be made to update the display to reflect the change in pixels.
-    *   The seed is not set and so the generated pattern will probably be the same each time.
-    *   TODO: Randomise the seed - maybe using the noise on the AnalogIn pins.
-    */
-    void randomiseBuffer();
-
-    /** Plot Array
-    *
-    *   This function plots a one-dimensional array in the buffer.
-    *   @param array[] - y values of the plot. Values should be normalised in the range 0.0 to 1.0. First 84 plotted.
-    */
-    void plotArray(float const array[]);
-
-    /** Draw Circle
-    *
-    *   This function draws a circle at the specified origin with specified radius in the screen buffer
-    *   Uses the midpoint circle algorithm.
-    *   @see http://en.wikipedia.org/wiki/Midpoint_circle_algorithm
-    *   @param  x0     - x-coordinate of centre
-    *   @param  y0     - y-coordinate of centre
-    *   @param  radius - radius of circle in pixels
-    *   @param  fill   - fill-type for the shape
-    */
-    void drawCircle(unsigned int const x0,
-                    unsigned int const y0,
-                    unsigned int const radius,
-                    FillType const     fill);
-
-    /** Draw Line
-    *
-    *   This function draws a line between the specified points using linear interpolation.
-    *   @param  x0 - x-coordinate of first point
-    *   @param  y0 - y-coordinate of first point
-    *   @param  x1 - x-coordinate of last point
-    *   @param  y1 - y-coordinate of last point
-    *   @param  type - 0 white,1 black,2 dotted
-    */
-    void drawLine(unsigned int const x0,
-                  unsigned int const y0,
-                  unsigned int const x1,
-                  unsigned int const y1,
-                  unsigned int const type);
-
-    /** Draw Rectangle
-    *
-    *   This function draws a rectangle.
-    *   @param  x0 - x-coordinate of origin (top-left)
-    *   @param  y0 - y-coordinate of origin (top-left)
-    *   @param  width - width of rectangle
-    *   @param  height - height of rectangle
-    *   @param  fill   - fill-type for the shape
-    */
-    void drawRect(unsigned int const x0,
-                  unsigned int const y0,
-                  unsigned int const width,
-                  unsigned int const height,
-                  FillType const     fill);
-
-    /** Draw Sprite
-    *
-    *   This function draws a sprite as defined in a 2D array
-    *   @param  x0 - x-coordinate of origin (top-left)
-    *   @param  y0 - y-coordinate of origin (top-left)
-    *   @param  nrows - number of rows in sprite
-    *   @param  ncols - number of columns in sprite
-    *   @param  sprite - 2D array representing the sprite
-    */
-    void drawSprite(int x0,
-                    int y0,
-                    int nrows,
-                    int ncols,
-                    int *sprite);
-
-
-private:
-// methods
-    void setXYAddress(unsigned int const x,
-                      unsigned int const y);
-    void initSPI();
-    void turnOn();
-    void reset();
-    void clearRAM();
-    void sendCommand(unsigned char command);
-    void sendData(unsigned char data);
-    void setTempCoefficient(char tc);  // 0 to 3
-    void setBias(char bias);  // 0 to 7
-};
-
-const unsigned char font5x7[480] = {
-    0x00, 0x00, 0x00, 0x00, 0x00,// (space)
-    0x00, 0x00, 0x5F, 0x00, 0x00,// !
-    0x00, 0x07, 0x00, 0x07, 0x00,// "
-    0x14, 0x7F, 0x14, 0x7F, 0x14,// #
-    0x24, 0x2A, 0x7F, 0x2A, 0x12,// $
-    0x23, 0x13, 0x08, 0x64, 0x62,// %
-    0x36, 0x49, 0x55, 0x22, 0x50,// &
-    0x00, 0x05, 0x03, 0x00, 0x00,// '
-    0x00, 0x1C, 0x22, 0x41, 0x00,// (
-    0x00, 0x41, 0x22, 0x1C, 0x00,// )
-    0x08, 0x2A, 0x1C, 0x2A, 0x08,// *
-    0x08, 0x08, 0x3E, 0x08, 0x08,// +
-    0x00, 0x50, 0x30, 0x00, 0x00,// ,
-    0x08, 0x08, 0x08, 0x08, 0x08,// -
-    0x00, 0x60, 0x60, 0x00, 0x00,// .
-    0x20, 0x10, 0x08, 0x04, 0x02,// /
-    0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
-    0x00, 0x42, 0x7F, 0x40, 0x00,// 1
-    0x42, 0x61, 0x51, 0x49, 0x46,// 2
-    0x21, 0x41, 0x45, 0x4B, 0x31,// 3
-    0x18, 0x14, 0x12, 0x7F, 0x10,// 4
-    0x27, 0x45, 0x45, 0x45, 0x39,// 5
-    0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
-    0x01, 0x71, 0x09, 0x05, 0x03,// 7
-    0x36, 0x49, 0x49, 0x49, 0x36,// 8
-    0x06, 0x49, 0x49, 0x29, 0x1E,// 9
-    0x00, 0x36, 0x36, 0x00, 0x00,// :
-    0x00, 0x56, 0x36, 0x00, 0x00,// ;
-    0x00, 0x08, 0x14, 0x22, 0x41,// <
-    0x14, 0x14, 0x14, 0x14, 0x14,// =
-    0x41, 0x22, 0x14, 0x08, 0x00,// >
-    0x02, 0x01, 0x51, 0x09, 0x06,// ?
-    0x32, 0x49, 0x79, 0x41, 0x3E,// @
-    0x7E, 0x11, 0x11, 0x11, 0x7E,// A
-    0x7F, 0x49, 0x49, 0x49, 0x36,// B
-    0x3E, 0x41, 0x41, 0x41, 0x22,// C
-    0x7F, 0x41, 0x41, 0x22, 0x1C,// D
-    0x7F, 0x49, 0x49, 0x49, 0x41,// E
-    0x7F, 0x09, 0x09, 0x01, 0x01,// F
-    0x3E, 0x41, 0x41, 0x51, 0x32,// G
-    0x7F, 0x08, 0x08, 0x08, 0x7F,// H
-    0x00, 0x41, 0x7F, 0x41, 0x00,// I
-    0x20, 0x40, 0x41, 0x3F, 0x01,// J
-    0x7F, 0x08, 0x14, 0x22, 0x41,// K
-    0x7F, 0x40, 0x40, 0x40, 0x40,// L
-    0x7F, 0x02, 0x04, 0x02, 0x7F,// M
-    0x7F, 0x04, 0x08, 0x10, 0x7F,// N
-    0x3E, 0x41, 0x41, 0x41, 0x3E,// O
-    0x7F, 0x09, 0x09, 0x09, 0x06,// P
-    0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
-    0x7F, 0x09, 0x19, 0x29, 0x46,// R
-    0x46, 0x49, 0x49, 0x49, 0x31,// S
-    0x01, 0x01, 0x7F, 0x01, 0x01,// T
-    0x3F, 0x40, 0x40, 0x40, 0x3F,// U
-    0x1F, 0x20, 0x40, 0x20, 0x1F,// V
-    0x7F, 0x20, 0x18, 0x20, 0x7F,// W
-    0x63, 0x14, 0x08, 0x14, 0x63,// X
-    0x03, 0x04, 0x78, 0x04, 0x03,// Y
-    0x61, 0x51, 0x49, 0x45, 0x43,// Z
-    0x00, 0x00, 0x7F, 0x41, 0x41,// [
-    0x02, 0x04, 0x08, 0x10, 0x20,// "\"
-    0x41, 0x41, 0x7F, 0x00, 0x00,// ]
-    0x04, 0x02, 0x01, 0x02, 0x04,// ^
-    0x40, 0x40, 0x40, 0x40, 0x40,// _
-    0x00, 0x01, 0x02, 0x04, 0x00,// `
-    0x20, 0x54, 0x54, 0x54, 0x78,// a
-    0x7F, 0x48, 0x44, 0x44, 0x38,// b
-    0x38, 0x44, 0x44, 0x44, 0x20,// c
-    0x38, 0x44, 0x44, 0x48, 0x7F,// d
-    0x38, 0x54, 0x54, 0x54, 0x18,// e
-    0x08, 0x7E, 0x09, 0x01, 0x02,// f
-    0x08, 0x14, 0x54, 0x54, 0x3C,// g
-    0x7F, 0x08, 0x04, 0x04, 0x78,// h
-    0x00, 0x44, 0x7D, 0x40, 0x00,// i
-    0x20, 0x40, 0x44, 0x3D, 0x00,// j
-    0x00, 0x7F, 0x10, 0x28, 0x44,// k
-    0x00, 0x41, 0x7F, 0x40, 0x00,// l
-    0x7C, 0x04, 0x18, 0x04, 0x78,// m
-    0x7C, 0x08, 0x04, 0x04, 0x78,// n
-    0x38, 0x44, 0x44, 0x44, 0x38,// o
-    0x7C, 0x14, 0x14, 0x14, 0x08,// p
-    0x08, 0x14, 0x14, 0x18, 0x7C,// q
-    0x7C, 0x08, 0x04, 0x04, 0x08,// r
-    0x48, 0x54, 0x54, 0x54, 0x20,// s
-    0x04, 0x3F, 0x44, 0x40, 0x20,// t
-    0x3C, 0x40, 0x40, 0x20, 0x7C,// u
-    0x1C, 0x20, 0x40, 0x20, 0x1C,// v
-    0x3C, 0x40, 0x30, 0x40, 0x3C,// w
-    0x44, 0x28, 0x10, 0x28, 0x44,// x
-    0x0C, 0x50, 0x50, 0x50, 0x3C,// y
-    0x44, 0x64, 0x54, 0x4C, 0x44,// z
-    0x00, 0x08, 0x36, 0x41, 0x00,// {
-    0x00, 0x00, 0x7F, 0x00, 0x00,// |
-    0x00, 0x41, 0x36, 0x08, 0x00,// }
-    0x08, 0x08, 0x2A, 0x1C, 0x08,// ->
-    0x08, 0x1C, 0x2A, 0x08, 0x08 // <-
-};
-
-#endif
\ No newline at end of file
--- a/TMP102.lib	Fri Jan 21 12:17:34 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://developer.mbed.org/users/eencae/code/TMP102/#2e125e654e42
--- a/main.cpp	Fri Jan 21 12:17:34 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-/* 
-
-2645_I2C_TMP102_Library
-(c) Craig A. Evans, University of Leeds, Feb 2016
-
-*/ 
-
-#include "mbed.h"
-#include "TMP102.h"
-#include "Bitmap.h"
-#include "N5110.h"
-// include the library header folders, ensure the library has been imported into the project file
-
-// Create TMP102 object
-TMP102 tmp102(I2C_SDA,I2C_SCL); 
-N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
-// UART connection for PC
-Serial pc(USBTX,USBRX);
-
-/*K64F on-board LEDs 
-DigitalOut r_led(LED_RED);
-DigitalOut g_led(LED_GREEN);
-DigitalOut b_led(LED_BLUE);
-*/
-InterruptIn StartButton(PTC5);
-Ticker RunRdng;
-Timeout Runtime;
-volatile int G_RdngFlag = 0;
-volatile int G_ReadCount = 0;
-volatile float G_AvTemp = 0;
-volatile float G_Total;
-
-void error(); // error function hangs flashing an LED
-void init_serial(); // setup serial port
-void init_K64F(); // set-up the on-board LEDs and switches
-
-void RdngValCalc(); //sets value of timer and attaches void TakeRdng() to the ticker then uses data gathered to 
-void TakeRdng(); //Takes a reading and stores in a vector on each pass (for use with a ticker)
-void TimerAttach();
-
-int main()
-{
-    // initialise the board and serial port
-    
-    init_K64F();
-    init_serial(); 
-    // call the sensor init method using dot syntax
-    tmp102.init();
-    lcd.init();
-    StartButton.mode(PullDown);
-    pc.printf("Init complete \n");
-
-    lcd.setContrast(0.4);
-    
-    StartButton.rise(&TimerAttach);
-
-/*    while (1) {
-        
-        
-        G_RdngFlag = 0; //Reset Flag and Read count for next initiation 
-        G_ReadCount = 0;
-        sleep();
-    }*/
-
-}
-
-void TimerAttach(){
- 
-    pc.printf("TimerAttach"); 
-    G_RdngFlag = 1;
-    Runtime.attach(&TakeRdng, 30);
-    //RunRdng.attach(&TakeRdng, 1);
-
-}
-
-void init_K64F()
-{
-    pc.printf("Initialising \n");
-    
-    // since the on-board switches have external pull-ups, we should disable the internal pull-down
-    // resistors that are enabled by default using InterruptIn
-    //StartButton.mode(PullNone);
-    //sw3.mode(PullNone);
-
-}
-
-void init_serial() {
-    // set to highest baud - ensure terminal software matches
-    pc.baud(9600);
-    pc.printf("PC Baud Set \n"); 
-}
-
-void TakeRdng(){
-// read temperature and print over serial port
-        float T = tmp102.get_temperature();
-        pc.printf("T = %f C\n",T);
-        G_ReadCount = G_ReadCount + 1;
-        G_Total = G_Total + T;  // sum the readings on each pass. by the end should have 30 readings in the sum
-        
-}
-
-void RdngValCalc(){
-    
-    G_AvTemp = G_Total / G_ReadCount;
-    
-}
-
-
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-os.lib	Mon Jan 31 12:06:33 2022 +0000
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/mbed-os/#a2ada74770f043aff3e61e29d164a8e78274fcd4
--- a/mbed.bld	Fri Jan 21 12:17:34 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/f141b2784e32
\ No newline at end of file