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

Committer:
blu12758
Date:
Tue May 09 18:48:47 2017 +0000
Revision:
10:4dd8b18e07d0
Parent:
9:4ae116881502
Child:
18:f2a516ad24eb
UI update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
blu12758 7:0f8c3dfbbb86 1 //OU Configurable Robot Project
blu12758 7:0f8c3dfbbb86 2 //Spring 2017
blu12758 7:0f8c3dfbbb86 3 //William Bonner
blu12758 7:0f8c3dfbbb86 4
blu12758 7:0f8c3dfbbb86 5 #include "RobotView.h"
blu12758 7:0f8c3dfbbb86 6
blu12758 7:0f8c3dfbbb86 7 //Constructors/Destructors
blu12758 7:0f8c3dfbbb86 8 RobotView::~RobotView()
blu12758 7:0f8c3dfbbb86 9 {
blu12758 7:0f8c3dfbbb86 10 //#TODO
blu12758 7:0f8c3dfbbb86 11 }
blu12758 7:0f8c3dfbbb86 12 RobotView::RobotView()
blu12758 7:0f8c3dfbbb86 13 {
blu12758 7:0f8c3dfbbb86 14 _page = 0;
blu12758 7:0f8c3dfbbb86 15 }
blu12758 7:0f8c3dfbbb86 16
blu12758 7:0f8c3dfbbb86 17 //Initialize the screen to display the robot menu
blu12758 7:0f8c3dfbbb86 18 void RobotView::init()
blu12758 7:0f8c3dfbbb86 19 {
blu12758 8:1173b502b316 20 //Show splash screen
blu12758 7:0f8c3dfbbb86 21 update();
blu12758 8:1173b502b316 22 wait(1);
blu12758 8:1173b502b316 23
blu12758 8:1173b502b316 24 //Initialize touchscreen and display results
blu12758 8:1173b502b316 25 uint8_t status = _ts.Init(_lcd.GetXSize(), _lcd.GetYSize());
blu12758 8:1173b502b316 26 if (status != TS_OK) {
blu12758 8:1173b502b316 27 _lcd.Clear(LCD_COLOR_RED);
blu12758 8:1173b502b316 28 _lcd.SetBackColor(LCD_COLOR_RED);
blu12758 8:1173b502b316 29 _lcd.SetTextColor(LCD_COLOR_WHITE);
blu12758 8:1173b502b316 30 _lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE);
blu12758 8:1173b502b316 31 } else {
blu12758 8:1173b502b316 32 _lcd.Clear(LCD_COLOR_GREEN);
blu12758 8:1173b502b316 33 _lcd.SetBackColor(LCD_COLOR_GREEN);
blu12758 8:1173b502b316 34 _lcd.SetTextColor(LCD_COLOR_WHITE);
blu12758 8:1173b502b316 35 _lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE);
blu12758 8:1173b502b316 36 }
blu12758 8:1173b502b316 37 wait(1);
blu12758 7:0f8c3dfbbb86 38 }
blu12758 7:0f8c3dfbbb86 39
blu12758 7:0f8c3dfbbb86 40 //Write the current page to the lcd
blu12758 7:0f8c3dfbbb86 41 void RobotView::update()
blu12758 7:0f8c3dfbbb86 42 {
blu12758 8:1173b502b316 43 //Clear Screen
blu12758 8:1173b502b316 44 clear();
blu12758 10:4dd8b18e07d0 45 _infoline=0;
blu12758 9:4ae116881502 46 //Write current page
blu12758 7:0f8c3dfbbb86 47 switch(_page)
blu12758 7:0f8c3dfbbb86 48 {
blu12758 8:1173b502b316 49 case 0://Welcome Screen
blu12758 7:0f8c3dfbbb86 50 _lcd.DisplayStringAt(0, LINE(7), (uint8_t *)"Configurable Robot", CENTER_MODE);
blu12758 7:0f8c3dfbbb86 51 _lcd.DisplayStringAt(0, LINE(8), (uint8_t *)"University of Oklahoma", CENTER_MODE);
blu12758 7:0f8c3dfbbb86 52 break;
blu12758 8:1173b502b316 53 case 1://Main Menu
blu12758 8:1173b502b316 54 _lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"Configurable Robot", CENTER_MODE);
blu12758 8:1173b502b316 55 _lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"University of Oklahoma", CENTER_MODE);
blu12758 8:1173b502b316 56 _lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"Line Follower", CENTER_MODE);
blu12758 8:1173b502b316 57 _lcd.DisplayStringAt(0, LINE(8), (uint8_t *)"Object Avoidance", CENTER_MODE);
blu12758 10:4dd8b18e07d0 58 _lcd.DisplayStringAt(0, LINE(11), (uint8_t *)"Light Avoidance", CENTER_MODE);
blu12758 10:4dd8b18e07d0 59 _lcd.DisplayStringAt(0, LINE(14), (uint8_t *)"TV Remote Control", CENTER_MODE);
blu12758 10:4dd8b18e07d0 60 _lcd.DisplayStringAt(0, LINE(17), (uint8_t *)"Wiimote Control", CENTER_MODE);
blu12758 10:4dd8b18e07d0 61 break;
blu12758 10:4dd8b18e07d0 62 case 2://Line Follower
blu12758 10:4dd8b18e07d0 63 _lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"Configurable Robot", CENTER_MODE);
blu12758 10:4dd8b18e07d0 64 _lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"University of Oklahoma", CENTER_MODE);
blu12758 10:4dd8b18e07d0 65 _lcd.DisplayStringAt(0, LINE(11), (uint8_t *)"Line Following...", CENTER_MODE);
blu12758 10:4dd8b18e07d0 66 _lcd.DisplayStringAt(0, LINE(14), (uint8_t *)"UNDER CONSTRUCTION", CENTER_MODE);
blu12758 10:4dd8b18e07d0 67 _infoline=14;
blu12758 10:4dd8b18e07d0 68 break;
blu12758 10:4dd8b18e07d0 69 case 3://Object Avoidance
blu12758 10:4dd8b18e07d0 70 _lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"Configurable Robot", CENTER_MODE);
blu12758 10:4dd8b18e07d0 71 _lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"University of Oklahoma", CENTER_MODE);
blu12758 10:4dd8b18e07d0 72 _lcd.DisplayStringAt(0, LINE(11), (uint8_t *)"Object Avoidance", CENTER_MODE);
blu12758 10:4dd8b18e07d0 73 _lcd.DisplayStringAt(0, LINE(14), (uint8_t *)"UNDER CONSTRUCTION", CENTER_MODE);
blu12758 10:4dd8b18e07d0 74 _infoline=14;
blu12758 10:4dd8b18e07d0 75 break;
blu12758 10:4dd8b18e07d0 76 case 4://Light Avoidance
blu12758 10:4dd8b18e07d0 77 _lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"Configurable Robot", CENTER_MODE);
blu12758 10:4dd8b18e07d0 78 _lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"University of Oklahoma", CENTER_MODE);
blu12758 10:4dd8b18e07d0 79 _lcd.DisplayStringAt(0, LINE(11), (uint8_t *)"Light Avoidance", CENTER_MODE);
blu12758 10:4dd8b18e07d0 80 _lcd.DisplayStringAt(0, LINE(14), (uint8_t *)"UNDER CONSTRUCTION", CENTER_MODE);
blu12758 10:4dd8b18e07d0 81 _infoline=14;
blu12758 10:4dd8b18e07d0 82 break;
blu12758 10:4dd8b18e07d0 83 case 5://TV Remote Control
blu12758 10:4dd8b18e07d0 84 _lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"Configurable Robot", CENTER_MODE);
blu12758 10:4dd8b18e07d0 85 _lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"University of Oklahoma", CENTER_MODE);
blu12758 10:4dd8b18e07d0 86 _lcd.DisplayStringAt(0, LINE(11), (uint8_t *)"TV Remote Control", CENTER_MODE);
blu12758 10:4dd8b18e07d0 87 _lcd.DisplayStringAt(0, LINE(14), (uint8_t *)"UNDER CONSTRUCTION", CENTER_MODE);
blu12758 10:4dd8b18e07d0 88 _infoline=14;
blu12758 10:4dd8b18e07d0 89 break;
blu12758 10:4dd8b18e07d0 90 case 6://Wiimote Control
blu12758 10:4dd8b18e07d0 91 _lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"Configurable Robot", CENTER_MODE);
blu12758 10:4dd8b18e07d0 92 _lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"University of Oklahoma", CENTER_MODE);
blu12758 10:4dd8b18e07d0 93 _lcd.DisplayStringAt(0, LINE(11), (uint8_t *)"Wiimote Control", CENTER_MODE);
blu12758 10:4dd8b18e07d0 94 _lcd.DisplayStringAt(0, LINE(14), (uint8_t *)"UNDER CONSTRUCTION", CENTER_MODE);
blu12758 10:4dd8b18e07d0 95 _infoline=14;
blu12758 10:4dd8b18e07d0 96 break;
blu12758 7:0f8c3dfbbb86 97 default:
blu12758 10:4dd8b18e07d0 98 char buffer[50];
blu12758 10:4dd8b18e07d0 99 sprintf (buffer, "%d", _page);
blu12758 10:4dd8b18e07d0 100 _lcd.DisplayStringAt(0, LINE(14), (uint8_t *)buffer, CENTER_MODE);
blu12758 7:0f8c3dfbbb86 101 break;
blu12758 7:0f8c3dfbbb86 102 }
blu12758 8:1173b502b316 103
blu12758 9:4ae116881502 104 //display back button
blu12758 9:4ae116881502 105 if(_page > 1)
blu12758 9:4ae116881502 106 {
blu12758 9:4ae116881502 107 _lcd.DisplayStringAt(0, LINE(21), (uint8_t *)"<- Back", RIGHT_MODE);
blu12758 9:4ae116881502 108 }
blu12758 9:4ae116881502 109
blu12758 8:1173b502b316 110 //#TODO Display supply voltage
blu12758 7:0f8c3dfbbb86 111 }
blu12758 8:1173b502b316 112
blu12758 8:1173b502b316 113 //Clear the screen
blu12758 8:1173b502b316 114 void RobotView::clear()
blu12758 8:1173b502b316 115 {
blu12758 8:1173b502b316 116 _lcd.Clear(LCD_COLOR_WHITE);
blu12758 8:1173b502b316 117 _lcd.SetBackColor(LCD_COLOR_WHITE);
blu12758 8:1173b502b316 118 _lcd.SetTextColor(LCD_COLOR_BLUE);
blu12758 8:1173b502b316 119 }
blu12758 8:1173b502b316 120
blu12758 7:0f8c3dfbbb86 121 //Check for touches on the screen
blu12758 9:4ae116881502 122 int RobotView::listen()
blu12758 7:0f8c3dfbbb86 123 {
blu12758 8:1173b502b316 124 _ts.GetState(&TS_State);
blu12758 8:1173b502b316 125 if (TS_State.touchDetected)
blu12758 8:1173b502b316 126 {
blu12758 8:1173b502b316 127 ts_x = TS_State.touchX[0];
blu12758 8:1173b502b316 128 ts_y = TS_State.touchY[0];
blu12758 10:4dd8b18e07d0 129 wait_ms(200);
blu12758 9:4ae116881502 130 return checkSelection();
blu12758 8:1173b502b316 131 }
blu12758 9:4ae116881502 132 return -1;
blu12758 9:4ae116881502 133 }
blu12758 9:4ae116881502 134
blu12758 9:4ae116881502 135 //Check which selection the user made based on the current page
blu12758 9:4ae116881502 136 int RobotView::checkSelection()
blu12758 9:4ae116881502 137 {
blu12758 10:4dd8b18e07d0 138 if(_page > 1 && ts_y <=(18))
blu12758 10:4dd8b18e07d0 139 return -1;
blu12758 9:4ae116881502 140 switch(_page)
blu12758 9:4ae116881502 141 {
blu12758 9:4ae116881502 142 case 0:
blu12758 9:4ae116881502 143 default:
blu12758 9:4ae116881502 144 return -1;
blu12758 10:4dd8b18e07d0 145 case 1://Main Menu
blu12758 9:4ae116881502 146 if(ts_y <= LINE(6))
blu12758 9:4ae116881502 147 return 0;
blu12758 9:4ae116881502 148 else if(ts_y <= LINE(9))
blu12758 9:4ae116881502 149 return 1;
blu12758 9:4ae116881502 150 else if(ts_y <= LINE(12))
blu12758 9:4ae116881502 151 return 2;
blu12758 9:4ae116881502 152 else if(ts_y <= LINE(15))
blu12758 9:4ae116881502 153 return 3;
blu12758 9:4ae116881502 154 else if(ts_y <= LINE(18))
blu12758 9:4ae116881502 155 return 4;
blu12758 9:4ae116881502 156 else
blu12758 9:4ae116881502 157 return 5;
blu12758 10:4dd8b18e07d0 158 case 2://Line Following
blu12758 10:4dd8b18e07d0 159 case 3://Object Avoidance
blu12758 10:4dd8b18e07d0 160 case 4://Light Avoidance
blu12758 10:4dd8b18e07d0 161 case 5://TV Remote Control
blu12758 10:4dd8b18e07d0 162 case 6://Wiimote Control
blu12758 10:4dd8b18e07d0 163 if(ts_y >= LINE(18) && ts_x >= LINE(10))
blu12758 10:4dd8b18e07d0 164 return 0;
blu12758 10:4dd8b18e07d0 165
blu12758 9:4ae116881502 166 }
blu12758 10:4dd8b18e07d0 167 return -1;
blu12758 10:4dd8b18e07d0 168 }
blu12758 10:4dd8b18e07d0 169
blu12758 10:4dd8b18e07d0 170 //Display string given in parameters
blu12758 10:4dd8b18e07d0 171 void RobotView::writeString(char* c, int line)
blu12758 10:4dd8b18e07d0 172 {
blu12758 10:4dd8b18e07d0 173 if(line >= 0)
blu12758 10:4dd8b18e07d0 174 _infoline = line;
blu12758 10:4dd8b18e07d0 175 _lcd.ClearStringLine(_infoline);
blu12758 10:4dd8b18e07d0 176 _lcd.DisplayStringAt(0, LINE(_infoline), (uint8_t *)c, CENTER_MODE);
blu12758 10:4dd8b18e07d0 177 _infoline++;
blu12758 7:0f8c3dfbbb86 178 }