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:
Mon Oct 03 16:21:01 2016 +0200
Revision:
34:0b308a399f72
Parent:
32:d490f8ca6d2a
Child:
35:6baa558d3b86
Testing Calibrate 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 34:0b308a399f72 11 void Calibrate();
Kerneels Bezuidenhout 7:1a6e18b818a5 12
Kerneels Bezuidenhout 1:43fb2d03c36f 13 int currentScreen = 0;
Kerneels Bezuidenhout 1:43fb2d03c36f 14 int nextScreen = 0;
Kerneels Bezuidenhout 1:43fb2d03c36f 15 Thread guiThread;
Kerneels Bezuidenhout 1:43fb2d03c36f 16 Screen *activeScreen = NULL;
Kerneels Bezuidenhout 1:43fb2d03c36f 17
Kerneels Bezuidenhout 12:650ae2f4c7df 18 float zeroAlpha = 0;
Kerneels Bezuidenhout 12:650ae2f4c7df 19 float alpha = 0;
Generic 17:3b6d66253c97 20 float xSP = -20;
Kerneels Bezuidenhout 13:21dc070a47a9 21 float x = 0;
Kerneels Bezuidenhout 7:1a6e18b818a5 22
Kerneels Bezuidenhout 12:650ae2f4c7df 23 float zeroBeta = 0;
Kerneels Bezuidenhout 12:650ae2f4c7df 24 float beta = 0;
Generic 17:3b6d66253c97 25 float ySP = 50;
Kerneels Bezuidenhout 13:21dc070a47a9 26 float y = 0;
Kerneels Bezuidenhout 13:21dc070a47a9 27
Kerneels Bezuidenhout 22:dd9ff475b34c 28 float P = 0;
Kerneels Bezuidenhout 22:dd9ff475b34c 29 float I = 0;
Kerneels Bezuidenhout 22:dd9ff475b34c 30 float D = 0;
Kerneels Bezuidenhout 30:e8eb64ad8526 31 float Ts = 4;
Kerneels Bezuidenhout 22:dd9ff475b34c 32
Kerneels Bezuidenhout 32:d490f8ca6d2a 33 float tCal[3][2];
Kerneels Bezuidenhout 32:d490f8ca6d2a 34
Generic 23:bab197887d5e 35 int measuredTs = 0;
Kerneels Bezuidenhout 13:21dc070a47a9 36
Generic 17:3b6d66253c97 37 bool started = true;
Kerneels Bezuidenhout 13:21dc070a47a9 38
Generic 17:3b6d66253c97 39 int ballOnPlate = 1;
Kerneels Bezuidenhout 7:1a6e18b818a5 40
Kerneels Bezuidenhout 12:650ae2f4c7df 41 bool saved = false;
Kerneels Bezuidenhout 7:1a6e18b818a5 42
Generic 17:3b6d66253c97 43 // TODO Delete these variables
Generic 17:3b6d66253c97 44 float t = 0;
Generic 9:355a59fd962b 45 Serial pc(USBTX,USBRX);
Kerneels Bezuidenhout 19:ef78ac1a98f8 46 DigitalIn test(D3);
Generic 9:355a59fd962b 47
Kerneels Bezuidenhout 1:43fb2d03c36f 48 int main()
Kerneels Bezuidenhout 1:43fb2d03c36f 49 {
Kerneels Bezuidenhout 1:43fb2d03c36f 50 Init();
Kerneels Bezuidenhout 1:43fb2d03c36f 51
Kerneels Bezuidenhout 1:43fb2d03c36f 52 while(1)
Kerneels Bezuidenhout 1:43fb2d03c36f 53 {
Kerneels Bezuidenhout 7:1a6e18b818a5 54 switch (currentScreen)
Kerneels Bezuidenhout 7:1a6e18b818a5 55 {
Kerneels Bezuidenhout 7:1a6e18b818a5 56 case Screen::ZERO_PLATE_SCREEN :
Kerneels Bezuidenhout 7:1a6e18b818a5 57 ZeroPlate();
Kerneels Bezuidenhout 7:1a6e18b818a5 58 break;
Kerneels Bezuidenhout 12:650ae2f4c7df 59 case Screen::MANUAL_CONTROL_SCREEN :
Kerneels Bezuidenhout 12:650ae2f4c7df 60 Manual();
Kerneels Bezuidenhout 12:650ae2f4c7df 61 break;
Kerneels Bezuidenhout 13:21dc070a47a9 62 case Screen::AUTOMATIC_CONTROL_SCREEN :
Kerneels Bezuidenhout 13:21dc070a47a9 63 Automatic();
Kerneels Bezuidenhout 13:21dc070a47a9 64 break;
Kerneels Bezuidenhout 34:0b308a399f72 65 case Screen::CALIBRATE_SCREEN :
Kerneels Bezuidenhout 34:0b308a399f72 66 Calibrate();
Kerneels Bezuidenhout 34:0b308a399f72 67 break;
Kerneels Bezuidenhout 7:1a6e18b818a5 68 }
Kerneels Bezuidenhout 1:43fb2d03c36f 69 }
Kerneels Bezuidenhout 1:43fb2d03c36f 70 }
Kerneels Bezuidenhout 1:43fb2d03c36f 71
Kerneels Bezuidenhout 1:43fb2d03c36f 72 void GUIThread()
Kerneels Bezuidenhout 1:43fb2d03c36f 73 {
Kerneels Bezuidenhout 1:43fb2d03c36f 74 while(1)
Kerneels Bezuidenhout 1:43fb2d03c36f 75 {
Kerneels Bezuidenhout 1:43fb2d03c36f 76 if( nextScreen != currentScreen )
Kerneels Bezuidenhout 1:43fb2d03c36f 77 {
Kerneels Bezuidenhout 1:43fb2d03c36f 78 if( activeScreen != NULL)
Kerneels Bezuidenhout 1:43fb2d03c36f 79 delete activeScreen;
Kerneels Bezuidenhout 1:43fb2d03c36f 80
Kerneels Bezuidenhout 1:43fb2d03c36f 81 switch (nextScreen)
Kerneels Bezuidenhout 1:43fb2d03c36f 82 {
Kerneels Bezuidenhout 7:1a6e18b818a5 83 case Screen::MAIN_MENU_SCREEN :
Kerneels Bezuidenhout 1:43fb2d03c36f 84 activeScreen = new MainMenuScreen(&nextScreen);
Kerneels Bezuidenhout 1:43fb2d03c36f 85 break;
Kerneels Bezuidenhout 7:1a6e18b818a5 86 case Screen::MAIN_SETTINGS_SCREEN :
Kerneels Bezuidenhout 5:383f1108187d 87 activeScreen = new MainSettingsScreen(&nextScreen);
Kerneels Bezuidenhout 5:383f1108187d 88 break;
Kerneels Bezuidenhout 7:1a6e18b818a5 89 case Screen::ZERO_PLATE_SCREEN :
Kerneels Bezuidenhout 7:1a6e18b818a5 90 activeScreen = new ZeroPlateScreen(&nextScreen, &zeroAlpha, &zeroBeta, &saved);
Kerneels Bezuidenhout 7:1a6e18b818a5 91 break;
Generic 15:bc63b55a426d 92 case Screen::MANUAL_CONTROL_SCREEN :
Kerneels Bezuidenhout 12:650ae2f4c7df 93 activeScreen = new ManualControlScreen(&nextScreen, &alpha, &beta);
Kerneels Bezuidenhout 12:650ae2f4c7df 94 break;
Kerneels Bezuidenhout 13:21dc070a47a9 95 case Screen::AUTOMATIC_CONTROL_SCREEN :
Kerneels Bezuidenhout 22:dd9ff475b34c 96 activeScreen = new AutomaticControlScreen(&nextScreen, &x, &y, &measuredTs, &started, &ballOnPlate, &xSP, &ySP);
Kerneels Bezuidenhout 13:21dc070a47a9 97 break;
Kerneels Bezuidenhout 18:1b9579ac9f41 98 case Screen::AUTOMATIC_MORE_SCREEN :
Kerneels Bezuidenhout 18:1b9579ac9f41 99 activeScreen = new AutomaticMoreScreen(&nextScreen);
Kerneels Bezuidenhout 18:1b9579ac9f41 100 break;
Kerneels Bezuidenhout 20:70c5b1e499f0 101 case Screen::MANUAL_SETPOINT_SCREEN :
Generic 23:bab197887d5e 102 activeScreen = new ManualSetpointScreen(&nextScreen, &xSP, &ySP, &ballOnPlate, &started);
Kerneels Bezuidenhout 20:70c5b1e499f0 103 break;
Generic 23:bab197887d5e 104 case Screen::AUTOMATIC_SETTINGS_SCREEN :
Kerneels Bezuidenhout 22:dd9ff475b34c 105 activeScreen = new AutomaticSettingsScreen(&nextScreen, &P, &I, &D, &Ts);
Kerneels Bezuidenhout 26:f57db8d6d79e 106 break;
Kerneels Bezuidenhout 25:bfff3d661f92 107 case Screen::CHANGE_P_SCREEN :
Kerneels Bezuidenhout 25:bfff3d661f92 108 activeScreen = new ChangeValScreen(&nextScreen, currentScreen, &P, "Change P");
Kerneels Bezuidenhout 25:bfff3d661f92 109 break;
Kerneels Bezuidenhout 26:f57db8d6d79e 110 case Screen::CHANGE_I_SCREEN :
Kerneels Bezuidenhout 26:f57db8d6d79e 111 activeScreen = new ChangeValScreen(&nextScreen, currentScreen, &I, "Change I");
Kerneels Bezuidenhout 26:f57db8d6d79e 112 break;
Kerneels Bezuidenhout 26:f57db8d6d79e 113 case Screen::CHANGE_D_SCREEN :
Kerneels Bezuidenhout 26:f57db8d6d79e 114 activeScreen = new ChangeValScreen(&nextScreen, currentScreen, &D, "Change D");
Kerneels Bezuidenhout 26:f57db8d6d79e 115 break;
Kerneels Bezuidenhout 26:f57db8d6d79e 116 case Screen::CHANGE_TS_SCREEN :
Kerneels Bezuidenhout 31:5ece593c49a7 117 activeScreen = new ChangeValWholeScreen(&nextScreen, currentScreen, &Ts, "Change Ts", false, 4);
Kerneels Bezuidenhout 26:f57db8d6d79e 118 break;
Kerneels Bezuidenhout 32:d490f8ca6d2a 119 case Screen::CALIBRATE_SCREEN :
Kerneels Bezuidenhout 34:0b308a399f72 120 activeScreen = new CalibrateScreen(&nextScreen, tCal, &ballOnPlate);
Kerneels Bezuidenhout 32:d490f8ca6d2a 121 break;
Kerneels Bezuidenhout 1:43fb2d03c36f 122 }
Kerneels Bezuidenhout 1:43fb2d03c36f 123
Kerneels Bezuidenhout 1:43fb2d03c36f 124 activeScreen->Draw();
Generic 17:3b6d66253c97 125 Thread::wait(200);
Generic 6:f717ce705c5d 126 currentScreen = nextScreen;
Kerneels Bezuidenhout 1:43fb2d03c36f 127 }
Kerneels Bezuidenhout 1:43fb2d03c36f 128
Kerneels Bezuidenhout 1:43fb2d03c36f 129 activeScreen->Process();
Kerneels Bezuidenhout 1:43fb2d03c36f 130
Generic 17:3b6d66253c97 131 Thread::wait(10);
Kerneels Bezuidenhout 1:43fb2d03c36f 132 }
Kerneels Bezuidenhout 1:43fb2d03c36f 133 }
Kerneels Bezuidenhout 1:43fb2d03c36f 134
Kerneels Bezuidenhout 1:43fb2d03c36f 135 void Init()
Kerneels Bezuidenhout 1:43fb2d03c36f 136 {
Generic 9:355a59fd962b 137 pc.baud(57600);
Generic 2:5fded6444350 138 nextScreen = Screen::MAIN_MENU_SCREEN;
Kerneels Bezuidenhout 1:43fb2d03c36f 139 guiThread.start(GUIThread);
Kerneels Bezuidenhout 1:43fb2d03c36f 140 }
Kerneels Bezuidenhout 7:1a6e18b818a5 141
Kerneels Bezuidenhout 7:1a6e18b818a5 142 void ZeroPlate()
Kerneels Bezuidenhout 7:1a6e18b818a5 143 {
Kerneels Bezuidenhout 12:650ae2f4c7df 144
Kerneels Bezuidenhout 12:650ae2f4c7df 145 pc.printf("Zero a : %f | Zero b : %f\n\r", zeroAlpha, zeroBeta);
Kerneels Bezuidenhout 12:650ae2f4c7df 146
Kerneels Bezuidenhout 12:650ae2f4c7df 147
Kerneels Bezuidenhout 7:1a6e18b818a5 148 if( saved)
Kerneels Bezuidenhout 7:1a6e18b818a5 149 {
Kerneels Bezuidenhout 12:650ae2f4c7df 150 // TODO Save zero position on servos
Generic 9:355a59fd962b 151 nextScreen = Screen::MAIN_SETTINGS_SCREEN;
Kerneels Bezuidenhout 7:1a6e18b818a5 152 saved = false;
Kerneels Bezuidenhout 7:1a6e18b818a5 153 }
Kerneels Bezuidenhout 12:650ae2f4c7df 154
Generic 9:355a59fd962b 155 Thread::wait(20);
Kerneels Bezuidenhout 7:1a6e18b818a5 156 }
Kerneels Bezuidenhout 12:650ae2f4c7df 157
Kerneels Bezuidenhout 12:650ae2f4c7df 158 void Manual()
Kerneels Bezuidenhout 12:650ae2f4c7df 159 {
Kerneels Bezuidenhout 12:650ae2f4c7df 160 // TODO Add manual control logic
Kerneels Bezuidenhout 12:650ae2f4c7df 161 }
Kerneels Bezuidenhout 13:21dc070a47a9 162
Kerneels Bezuidenhout 13:21dc070a47a9 163 void Automatic()
Kerneels Bezuidenhout 13:21dc070a47a9 164 {
Kerneels Bezuidenhout 13:21dc070a47a9 165 //TODO Add automatic control mode logic
Kerneels Bezuidenhout 19:ef78ac1a98f8 166 ballOnPlate = test.read();
Generic 17:3b6d66253c97 167 Thread::wait(4);
Kerneels Bezuidenhout 13:21dc070a47a9 168 }
Kerneels Bezuidenhout 34:0b308a399f72 169
Kerneels Bezuidenhout 34:0b308a399f72 170 void Calibrate()
Kerneels Bezuidenhout 34:0b308a399f72 171 {
Kerneels Bezuidenhout 34:0b308a399f72 172 ballOnPlate = test.read();
Kerneels Bezuidenhout 34:0b308a399f72 173 Thread::wait(4);
Kerneels Bezuidenhout 34:0b308a399f72 174 }