Dr. Davis and Dr. Dyer special studies robotics project

Dependencies:   BSP_DISCO_F469NI LCD_DISCO_F469NI TS_DISCO_F469NI mbed Motordriver

Fork of Configurable_Robots by Christopher Eubanks

Classes/RobotMVC/RobotView.cpp

Committer:
blu12758
Date:
2017-05-09
Revision:
10:4dd8b18e07d0
Parent:
9:4ae116881502
Child:
18:f2a516ad24eb

File content as of revision 10:4dd8b18e07d0:

//OU Configurable Robot Project
//Spring 2017
//William Bonner

#include "RobotView.h"

//Constructors/Destructors
RobotView::~RobotView()
{
    //#TODO
}
RobotView::RobotView()
{
    _page = 0;
}

//Initialize the screen to display the robot menu
void RobotView::init()
{
    //Show splash screen
    update();
    wait(1);

    //Initialize touchscreen and display results
    uint8_t status = _ts.Init(_lcd.GetXSize(), _lcd.GetYSize());
    if (status != TS_OK) {
        _lcd.Clear(LCD_COLOR_RED);
        _lcd.SetBackColor(LCD_COLOR_RED);
        _lcd.SetTextColor(LCD_COLOR_WHITE);
        _lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE);
    } else {
        _lcd.Clear(LCD_COLOR_GREEN);
        _lcd.SetBackColor(LCD_COLOR_GREEN);
        _lcd.SetTextColor(LCD_COLOR_WHITE);
        _lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE);
    }
    wait(1);
}

//Write the current page to the lcd
void RobotView::update()
{
    //Clear Screen
    clear();
    _infoline=0;
    //Write current page
    switch(_page)
    {
        case 0://Welcome Screen
            _lcd.DisplayStringAt(0, LINE(7), (uint8_t *)"Configurable Robot", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(8), (uint8_t *)"University of Oklahoma", CENTER_MODE);
            break;
        case 1://Main Menu
            _lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"Configurable Robot", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"University of Oklahoma", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"Line Follower", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(8), (uint8_t *)"Object Avoidance", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(11), (uint8_t *)"Light Avoidance", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(14), (uint8_t *)"TV Remote Control", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(17), (uint8_t *)"Wiimote Control", CENTER_MODE);
            break;
        case 2://Line Follower
            _lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"Configurable Robot", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"University of Oklahoma", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(11), (uint8_t *)"Line Following...", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(14), (uint8_t *)"UNDER CONSTRUCTION", CENTER_MODE);
            _infoline=14;
            break;
        case 3://Object Avoidance
            _lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"Configurable Robot", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"University of Oklahoma", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(11), (uint8_t *)"Object Avoidance", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(14), (uint8_t *)"UNDER CONSTRUCTION", CENTER_MODE);
            _infoline=14;
            break;
        case 4://Light Avoidance
            _lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"Configurable Robot", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"University of Oklahoma", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(11), (uint8_t *)"Light Avoidance", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(14), (uint8_t *)"UNDER CONSTRUCTION", CENTER_MODE);
            _infoline=14;
            break;
        case 5://TV Remote Control
            _lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"Configurable Robot", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"University of Oklahoma", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(11), (uint8_t *)"TV Remote Control", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(14), (uint8_t *)"UNDER CONSTRUCTION", CENTER_MODE);
            _infoline=14;
            break;
        case 6://Wiimote Control
            _lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"Configurable Robot", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"University of Oklahoma", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(11), (uint8_t *)"Wiimote Control", CENTER_MODE);
            _lcd.DisplayStringAt(0, LINE(14), (uint8_t *)"UNDER CONSTRUCTION", CENTER_MODE);
            _infoline=14;
            break;
        default:
            char buffer[50];
            sprintf (buffer, "%d", _page);
            _lcd.DisplayStringAt(0, LINE(14), (uint8_t *)buffer, CENTER_MODE);
            break;
    }
    
    //display back button
    if(_page > 1)
    {
        _lcd.DisplayStringAt(0, LINE(21), (uint8_t *)"<- Back", RIGHT_MODE);
    }
    
    //#TODO Display supply voltage
}

//Clear the screen
void RobotView::clear()
{
    _lcd.Clear(LCD_COLOR_WHITE);
    _lcd.SetBackColor(LCD_COLOR_WHITE);
    _lcd.SetTextColor(LCD_COLOR_BLUE);
}

//Check for touches on the screen
int RobotView::listen()
{
    _ts.GetState(&TS_State);
    if (TS_State.touchDetected)
    { 
      ts_x = TS_State.touchX[0];
      ts_y = TS_State.touchY[0];
      wait_ms(200);
      return checkSelection();
    }
    return -1;
}

//Check which selection the user made based on the current page
int RobotView::checkSelection()
{
    if(_page > 1 && ts_y <=(18))
        return -1;
    switch(_page)
    {
        case 0:
        default:
            return -1;
        case 1://Main Menu
            if(ts_y <= LINE(6))
                return 0;
            else if(ts_y <= LINE(9))
                return 1;
            else if(ts_y <= LINE(12))
                return 2;
            else if(ts_y <= LINE(15))
                return 3;
            else if(ts_y <= LINE(18))
                return 4;
            else
                return 5;
        case 2://Line Following
        case 3://Object Avoidance
        case 4://Light Avoidance
        case 5://TV Remote Control
        case 6://Wiimote Control
            if(ts_y >= LINE(18) && ts_x >= LINE(10))
                return 0;
            
    }
    return -1;
}

//Display string given in parameters
void RobotView::writeString(char* c, int line)
{
    if(line >= 0)
        _infoline = line;
    _lcd.ClearStringLine(_infoline);
    _lcd.DisplayStringAt(0, LINE(_infoline), (uint8_t *)c, CENTER_MODE);
    _infoline++;
}