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 18:28:12 2016 +0200
Revision:
18:1b9579ac9f41
Parent:
17:3b6d66253c97
Child:
19:ef78ac1a98f8
Added AutomaticMoreScreen

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