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