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
Classes/RobotMVC/RobotView.cpp@21:ee2b617cc0e6, 2017-05-11 (annotated)
- Committer:
- blu12758
- Date:
- Thu May 11 16:20:54 2017 +0000
- Revision:
- 21:ee2b617cc0e6
- Parent:
- 18:f2a516ad24eb
OA changed to OF
Who changed what in which revision?
User | Revision | Line number | New 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 | 21:ee2b617cc0e6 | 57 | _lcd.DisplayStringAt(0, LINE(8), (uint8_t *)"Object Following", CENTER_MODE); |
blu12758 | 10:4dd8b18e07d0 | 58 | _lcd.DisplayStringAt(0, LINE(11), (uint8_t *)"Light Avoidance", CENTER_MODE); |
blu12758 | 18:f2a516ad24eb | 59 | _lcd.DisplayStringAt(0, LINE(14), (uint8_t *)"TV Remote Control(Drive Forward)", CENTER_MODE); |
blu12758 | 18:f2a516ad24eb | 60 | _lcd.DisplayStringAt(0, LINE(17), (uint8_t *)"Wiimote Control(Drive in Square)", 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 | 21:ee2b617cc0e6 | 69 | case 3://Object Following |
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 | 21:ee2b617cc0e6 | 72 | _lcd.DisplayStringAt(0, LINE(11), (uint8_t *)"Object Following", 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 | 21:ee2b617cc0e6 | 159 | case 3://Object Following |
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 | } |