My final year project

Dependencies:   BSP_DISCO_F746NG F746_GUI LCD_DISCO_F746NG SDFileSystem TS_DISCO_F746NG ResistiveTouchController Map CYS8218Controller MedianFilter

Committer:
Kerneels Bezuidenhout
Date:
Sun Oct 02 11:39:42 2016 +0200
Revision:
13:21dc070a47a9
Parent:
12:650ae2f4c7df
Child:
15:bc63b55a426d
Added AutomaticControlScreen

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kerneels Bezuidenhout 1:43fb2d03c36f 1 #include "mbed.h"
Kerneels Bezuidenhout 1:43fb2d03c36f 2 #include "Screens.hpp"
Kerneels Bezuidenhout 1:43fb2d03c36f 3
Kerneels Bezuidenhout 1:43fb2d03c36f 4
Kerneels Bezuidenhout 1:43fb2d03c36f 5 void GUIThread();
Kerneels Bezuidenhout 1:43fb2d03c36f 6 void Init();
Kerneels Bezuidenhout 1:43fb2d03c36f 7
Kerneels Bezuidenhout 7:1a6e18b818a5 8 void ZeroPlate();
Kerneels Bezuidenhout 12:650ae2f4c7df 9 void Manual();
Kerneels Bezuidenhout 13:21dc070a47a9 10 void Automatic();
Kerneels Bezuidenhout 7:1a6e18b818a5 11
Kerneels Bezuidenhout 1:43fb2d03c36f 12 int currentScreen = 0;
Kerneels Bezuidenhout 1:43fb2d03c36f 13 int nextScreen = 0;
Kerneels Bezuidenhout 1:43fb2d03c36f 14 Thread guiThread;
Kerneels Bezuidenhout 1:43fb2d03c36f 15 Screen *activeScreen = NULL;
Kerneels Bezuidenhout 1:43fb2d03c36f 16
Kerneels Bezuidenhout 12:650ae2f4c7df 17 float zeroAlpha = 0;
Kerneels Bezuidenhout 12:650ae2f4c7df 18 float alpha = 0;
Kerneels Bezuidenhout 13:21dc070a47a9 19 float xSP = 0;
Kerneels Bezuidenhout 13:21dc070a47a9 20 float x = 0;
Kerneels Bezuidenhout 7:1a6e18b818a5 21
Kerneels Bezuidenhout 12:650ae2f4c7df 22 float zeroBeta = 0;
Kerneels Bezuidenhout 12:650ae2f4c7df 23 float beta = 0;
Kerneels Bezuidenhout 13:21dc070a47a9 24 float ySP = 0;
Kerneels Bezuidenhout 13:21dc070a47a9 25 float y = 0;
Kerneels Bezuidenhout 13:21dc070a47a9 26
Kerneels Bezuidenhout 13:21dc070a47a9 27 int Ts = 0;
Kerneels Bezuidenhout 13:21dc070a47a9 28
Kerneels Bezuidenhout 13:21dc070a47a9 29 bool started = false;
Kerneels Bezuidenhout 13:21dc070a47a9 30
Kerneels Bezuidenhout 13:21dc070a47a9 31 int ballOnPlate = 0;
Kerneels Bezuidenhout 7:1a6e18b818a5 32
Kerneels Bezuidenhout 12:650ae2f4c7df 33 bool saved = false;
Kerneels Bezuidenhout 7:1a6e18b818a5 34
Generic 9:355a59fd962b 35 Serial pc(USBTX,USBRX);
Generic 9:355a59fd962b 36
Kerneels Bezuidenhout 1:43fb2d03c36f 37 int main()
Kerneels Bezuidenhout 1:43fb2d03c36f 38 {
Kerneels Bezuidenhout 1:43fb2d03c36f 39 Init();
Kerneels Bezuidenhout 1:43fb2d03c36f 40
Kerneels Bezuidenhout 1:43fb2d03c36f 41 while(1)
Kerneels Bezuidenhout 1:43fb2d03c36f 42 {
Kerneels Bezuidenhout 7:1a6e18b818a5 43 switch (currentScreen)
Kerneels Bezuidenhout 7:1a6e18b818a5 44 {
Kerneels Bezuidenhout 7:1a6e18b818a5 45 case Screen::ZERO_PLATE_SCREEN :
Kerneels Bezuidenhout 7:1a6e18b818a5 46 ZeroPlate();
Kerneels Bezuidenhout 7:1a6e18b818a5 47 break;
Kerneels Bezuidenhout 12:650ae2f4c7df 48 case Screen::MANUAL_CONTROL_SCREEN :
Kerneels Bezuidenhout 12:650ae2f4c7df 49 Manual();
Kerneels Bezuidenhout 12:650ae2f4c7df 50 break;
Kerneels Bezuidenhout 13:21dc070a47a9 51 case Screen::AUTOMATIC_CONTROL_SCREEN :
Kerneels Bezuidenhout 13:21dc070a47a9 52 Automatic();
Kerneels Bezuidenhout 13:21dc070a47a9 53 break;
Kerneels Bezuidenhout 7:1a6e18b818a5 54 }
Kerneels Bezuidenhout 1:43fb2d03c36f 55 }
Kerneels Bezuidenhout 1:43fb2d03c36f 56 }
Kerneels Bezuidenhout 1:43fb2d03c36f 57
Kerneels Bezuidenhout 1:43fb2d03c36f 58 void GUIThread()
Kerneels Bezuidenhout 1:43fb2d03c36f 59 {
Kerneels Bezuidenhout 1:43fb2d03c36f 60 while(1)
Kerneels Bezuidenhout 1:43fb2d03c36f 61 {
Kerneels Bezuidenhout 1:43fb2d03c36f 62 if( nextScreen != currentScreen )
Kerneels Bezuidenhout 1:43fb2d03c36f 63 {
Kerneels Bezuidenhout 1:43fb2d03c36f 64 if( activeScreen != NULL)
Kerneels Bezuidenhout 1:43fb2d03c36f 65 delete activeScreen;
Kerneels Bezuidenhout 1:43fb2d03c36f 66
Kerneels Bezuidenhout 1:43fb2d03c36f 67 switch (nextScreen)
Kerneels Bezuidenhout 1:43fb2d03c36f 68 {
Kerneels Bezuidenhout 7:1a6e18b818a5 69 case Screen::MAIN_MENU_SCREEN :
Kerneels Bezuidenhout 1:43fb2d03c36f 70 activeScreen = new MainMenuScreen(&nextScreen);
Kerneels Bezuidenhout 1:43fb2d03c36f 71 break;
Kerneels Bezuidenhout 7:1a6e18b818a5 72 case Screen::MAIN_SETTINGS_SCREEN :
Kerneels Bezuidenhout 5:383f1108187d 73 activeScreen = new MainSettingsScreen(&nextScreen);
Kerneels Bezuidenhout 5:383f1108187d 74 break;
Kerneels Bezuidenhout 7:1a6e18b818a5 75 case Screen::ZERO_PLATE_SCREEN :
Kerneels Bezuidenhout 7:1a6e18b818a5 76 activeScreen = new ZeroPlateScreen(&nextScreen, &zeroAlpha, &zeroBeta, &saved);
Kerneels Bezuidenhout 7:1a6e18b818a5 77 break;
Kerneels Bezuidenhout 12:650ae2f4c7df 78 case Screem::MANUAL_CONTROL_SCREEN :
Kerneels Bezuidenhout 12:650ae2f4c7df 79 activeScreen = new ManualControlScreen(&nextScreen, &alpha, &beta);
Kerneels Bezuidenhout 12:650ae2f4c7df 80 break;
Kerneels Bezuidenhout 13:21dc070a47a9 81 case Screen::AUTOMATIC_CONTROL_SCREEN :
Kerneels Bezuidenhout 13:21dc070a47a9 82 activeScreen = new AutomaticControlScreen(&nextScreen, &x, &y, &Ts, &started. &ballOnPlate, &xSP, &ySp);
Kerneels Bezuidenhout 13:21dc070a47a9 83 break;
Kerneels Bezuidenhout 1:43fb2d03c36f 84 }
Kerneels Bezuidenhout 1:43fb2d03c36f 85
Kerneels Bezuidenhout 1:43fb2d03c36f 86 activeScreen->Draw();
Generic 6:f717ce705c5d 87 currentScreen = nextScreen;
Kerneels Bezuidenhout 1:43fb2d03c36f 88 Thread::wait(200);
Kerneels Bezuidenhout 1:43fb2d03c36f 89 }
Kerneels Bezuidenhout 1:43fb2d03c36f 90
Kerneels Bezuidenhout 1:43fb2d03c36f 91 activeScreen->Process();
Kerneels Bezuidenhout 1:43fb2d03c36f 92
Kerneels Bezuidenhout 1:43fb2d03c36f 93 Thread::wait(20);
Kerneels Bezuidenhout 1:43fb2d03c36f 94 }
Kerneels Bezuidenhout 1:43fb2d03c36f 95 }
Kerneels Bezuidenhout 1:43fb2d03c36f 96
Kerneels Bezuidenhout 1:43fb2d03c36f 97 void Init()
Kerneels Bezuidenhout 1:43fb2d03c36f 98 {
Generic 9:355a59fd962b 99 pc.baud(57600);
Generic 2:5fded6444350 100 nextScreen = Screen::MAIN_MENU_SCREEN;
Kerneels Bezuidenhout 1:43fb2d03c36f 101 guiThread.start(GUIThread);
Kerneels Bezuidenhout 1:43fb2d03c36f 102 }
Kerneels Bezuidenhout 7:1a6e18b818a5 103
Kerneels Bezuidenhout 7:1a6e18b818a5 104 void ZeroPlate()
Kerneels Bezuidenhout 7:1a6e18b818a5 105 {
Kerneels Bezuidenhout 12:650ae2f4c7df 106
Kerneels Bezuidenhout 12:650ae2f4c7df 107 pc.printf("Zero a : %f | Zero b : %f\n\r", zeroAlpha, zeroBeta);
Kerneels Bezuidenhout 12:650ae2f4c7df 108
Kerneels Bezuidenhout 12:650ae2f4c7df 109
Kerneels Bezuidenhout 7:1a6e18b818a5 110 if( saved)
Kerneels Bezuidenhout 7:1a6e18b818a5 111 {
Kerneels Bezuidenhout 12:650ae2f4c7df 112 // TODO Save zero position on servos
Generic 9:355a59fd962b 113 nextScreen = Screen::MAIN_SETTINGS_SCREEN;
Kerneels Bezuidenhout 7:1a6e18b818a5 114 saved = false;
Kerneels Bezuidenhout 7:1a6e18b818a5 115 }
Kerneels Bezuidenhout 12:650ae2f4c7df 116
Generic 9:355a59fd962b 117 Thread::wait(20);
Kerneels Bezuidenhout 7:1a6e18b818a5 118 }
Kerneels Bezuidenhout 12:650ae2f4c7df 119
Kerneels Bezuidenhout 12:650ae2f4c7df 120 void Manual()
Kerneels Bezuidenhout 12:650ae2f4c7df 121 {
Kerneels Bezuidenhout 12:650ae2f4c7df 122 // TODO Add manual control logic
Kerneels Bezuidenhout 12:650ae2f4c7df 123 }
Kerneels Bezuidenhout 13:21dc070a47a9 124
Kerneels Bezuidenhout 13:21dc070a47a9 125 void Automatic()
Kerneels Bezuidenhout 13:21dc070a47a9 126 {
Kerneels Bezuidenhout 13:21dc070a47a9 127 //TODO Add automatic control mode logic
Kerneels Bezuidenhout 13:21dc070a47a9 128
Kerneels Bezuidenhout 13:21dc070a47a9 129
Kerneels Bezuidenhout 13:21dc070a47a9 130 }