Addition of FSM to try and set initial starting temperature for use throughout project. Additional menu option. Joystick input 'bouncing' during FSM use - to be debugged

Dependencies:   mbed N5110v02 TMP102 JoystickIoT

main.cpp

Committer:
legstar85
Date:
2021-12-17
Revision:
2:e0091b5311f1
Parent:
1:dd5fb735acf1
Child:
3:80c1eba78f9b

File content as of revision 2:e0091b5311f1:

/* * Print String
* @ File main.cpp
* 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-5) - the display is split into 6 banks - each bank can be considered a row
* @author - David Leaming - 25574043
* @ Date - December 2021
*
* Acknowledgements 
* Craig A. Evans, University of Leeds, TMP102 Library ,Feb 2016
* Dr Edmond Nurellari, University of Lincoln, Joystick & N5110 Libraries
*
*/ 

#include "mbed.h"                                                               // include the library header, ensure the library has been imported into the project
#include "TMP102.h"
#include "N5110.h"
#include "Joystick.h"
#include "Bitmap.h"

TMP102 tmp102(I2C_SDA,I2C_SCL);                                                 // Create TMP102 object  

//        VCC,SCE,RST,D/C,MOSI,SCLK,LED 
N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);                                      // Create Screen Object - K64F - pwr from 3V3, GND Pin also needs connecting


Serial pc(USBTX,USBRX);                                                         // UART connection for PC

DigitalOut r_led(LED_RED);                                                      // K64F on-board LEDs 
DigitalOut g_led(LED_GREEN);                                                    // K64F on-board LEDs 
DigitalOut b_led(LED_BLUE);                                                     // K64F on-board LEDs 

InterruptIn sw2(SW2);                                                           // K64F on-board switches
InterruptIn sw3(SW3);                                                           // K64F on-board switches

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

int main()
{
    init_K64F();                                                                // initialise the board
    init_serial();                                                              // initialise the serial port
    
    tmp102.init();                                                              // call the sensor init method using dot syntax
    lcd.init();                                                                 // initialise display
    
    lcd.setContrast(0.5);                                                       // change set contrast in range 0.0 to 1.0
    
    while (1) {
        
        lcd.normalMode();                                                       // normal colour mode
        lcd.setBrightness(0.5);                                                 // put LED backlight on 50%
        lcd.clear();                                                            // clear buffer at start of every loop
        
        char buffer[14];                                                        // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)

        
        int temperature = 27;
        int length = sprintf(buffer,"T = %2d C",temperature);                   // print formatted data to buffer - it is important the format specifier ensures the length will fit in the buffer
        if (length <= 14)                                                       // if string will fit on display (assuming printing at x=0)
        lcd.printString(buffer,0,1);                                            // display on screen

        float pressure = 1012.3;                                                // same idea with floats
        length = sprintf(buffer,"P = %.2f mb",pressure);
        if (length <= 14)
        lcd.printString(buffer,0,2);

        lcd.refresh();                                                          // need to refresh display after setting pixels or writing strings
        wait(2.0);     
        
        lcd.clear();                                                            // clear buffer at start of every loop
        lcd.refresh();                                                          // need to refresh display after setting pixels or writing strings 
        wait(0.5);
        
        float T = tmp102.get_temperature();                                     // read temperature and print to lcd
        length = sprintf(buffer,"T = %.2f C",T);
        if (length <= 14)
        lcd.printString(buffer,0,2);
        lcd.refresh();                                                          // need to refresh display after setting pixels or writing strings 
        wait(2.0);
        
    }

}

void init_serial() {
    pc.baud(115200);                                                            // set to highest baud - ensure terminal software matches
}

void init_K64F() 
{
    r_led = 1;                                                                  // on-board LEDs are active-low, so set pin high to turn them off.
    g_led = 1;                                                                  // on-board LEDs are active-low, so set pin high to turn them off.
    b_led = 1;                                                                  // on-board LEDs are active-low, so set pin high to turn them off.
    
    sw2.mode(PullNone);                                                         // since the on-board switches have external pull-ups, we should disable the internal pull-down
    sw3.mode(PullNone);                                                         // resistors that are enabled by default using InterruptIn

}