My final year project

Dependencies:   BSP_DISCO_F746NG F746_GUI LCD_DISCO_F746NG SDFileSystem TS_DISCO_F746NG ResistiveTouchController Map CYS8218Controller MedianFilter

Committer:
Generic
Date:
Sun Oct 02 10:43:13 2016 +0000
Revision:
17:3b6d66253c97
Parent:
15:bc63b55a426d
Child:
18:1b9579ac9f41
Added some test logic

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 1:43fb2d03c36f 86 }
Kerneels Bezuidenhout 1:43fb2d03c36f 87
Kerneels Bezuidenhout 1:43fb2d03c36f 88 activeScreen->Draw();
Generic 17:3b6d66253c97 89 Thread::wait(200);
Generic 6:f717ce705c5d 90 currentScreen = nextScreen;
Kerneels Bezuidenhout 1:43fb2d03c36f 91 }
Kerneels Bezuidenhout 1:43fb2d03c36f 92
Kerneels Bezuidenhout 1:43fb2d03c36f 93 activeScreen->Process();
Kerneels Bezuidenhout 1:43fb2d03c36f 94
Generic 17:3b6d66253c97 95 Thread::wait(10);
Kerneels Bezuidenhout 1:43fb2d03c36f 96 }
Kerneels Bezuidenhout 1:43fb2d03c36f 97 }
Kerneels Bezuidenhout 1:43fb2d03c36f 98
Kerneels Bezuidenhout 1:43fb2d03c36f 99 void Init()
Kerneels Bezuidenhout 1:43fb2d03c36f 100 {
Generic 9:355a59fd962b 101 pc.baud(57600);
Generic 2:5fded6444350 102 nextScreen = Screen::MAIN_MENU_SCREEN;
Kerneels Bezuidenhout 1:43fb2d03c36f 103 guiThread.start(GUIThread);
Kerneels Bezuidenhout 1:43fb2d03c36f 104 }
Kerneels Bezuidenhout 7:1a6e18b818a5 105
Kerneels Bezuidenhout 7:1a6e18b818a5 106 void ZeroPlate()
Kerneels Bezuidenhout 7:1a6e18b818a5 107 {
Kerneels Bezuidenhout 12:650ae2f4c7df 108
Kerneels Bezuidenhout 12:650ae2f4c7df 109 pc.printf("Zero a : %f | Zero b : %f\n\r", zeroAlpha, zeroBeta);
Kerneels Bezuidenhout 12:650ae2f4c7df 110
Kerneels Bezuidenhout 12:650ae2f4c7df 111
Kerneels Bezuidenhout 7:1a6e18b818a5 112 if( saved)
Kerneels Bezuidenhout 7:1a6e18b818a5 113 {
Kerneels Bezuidenhout 12:650ae2f4c7df 114 // TODO Save zero position on servos
Generic 9:355a59fd962b 115 nextScreen = Screen::MAIN_SETTINGS_SCREEN;
Kerneels Bezuidenhout 7:1a6e18b818a5 116 saved = false;
Kerneels Bezuidenhout 7:1a6e18b818a5 117 }
Kerneels Bezuidenhout 12:650ae2f4c7df 118
Generic 9:355a59fd962b 119 Thread::wait(20);
Kerneels Bezuidenhout 7:1a6e18b818a5 120 }
Kerneels Bezuidenhout 12:650ae2f4c7df 121
Kerneels Bezuidenhout 12:650ae2f4c7df 122 void Manual()
Kerneels Bezuidenhout 12:650ae2f4c7df 123 {
Kerneels Bezuidenhout 12:650ae2f4c7df 124 // TODO Add manual control logic
Kerneels Bezuidenhout 12:650ae2f4c7df 125 }
Kerneels Bezuidenhout 13:21dc070a47a9 126
Kerneels Bezuidenhout 13:21dc070a47a9 127 void Automatic()
Kerneels Bezuidenhout 13:21dc070a47a9 128 {
Kerneels Bezuidenhout 13:21dc070a47a9 129 //TODO Add automatic control mode logic
Generic 17:3b6d66253c97 130 x = 160*sin(20*3.14*t);
Generic 17:3b6d66253c97 131 y = 130*cos(20*3.14*t++);
Generic 17:3b6d66253c97 132 Ts++;
Generic 17:3b6d66253c97 133 Thread::wait(4);
Kerneels Bezuidenhout 13:21dc070a47a9 134 }