Cornelius Bezuidenhout / Mbed OS Heiko

Dependencies:   BSP_DISCO_F746NG F746_GUI LCD_DISCO_F746NG SDFileSystem TS_DISCO_F746NG ResistiveTouchController Map CYS8218Controller MedianFilter

Committer:
Kerneels Bezuidenhout
Date:
Mon Oct 03 17:43:28 2016 +0200
Revision:
36:9ca4125e526e
Parent:
35:6baa558d3b86
Child:
37:93c7563f2078
Test 2 of cal

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 35:6baa558d3b86 34 int calPoint = 0;
Kerneels Bezuidenhout 35:6baa558d3b86 35 bool calStarted = false;
Kerneels Bezuidenhout 35:6baa558d3b86 36 Timer calTimer;
Kerneels Bezuidenhout 35:6baa558d3b86 37 float calHeldTime;
Kerneels Bezuidenhout 32:d490f8ca6d2a 38
Generic 23:bab197887d5e 39 int measuredTs = 0;
Kerneels Bezuidenhout 13:21dc070a47a9 40
Generic 17:3b6d66253c97 41 bool started = true;
Kerneels Bezuidenhout 13:21dc070a47a9 42
Generic 17:3b6d66253c97 43 int ballOnPlate = 1;
Kerneels Bezuidenhout 7:1a6e18b818a5 44
Kerneels Bezuidenhout 12:650ae2f4c7df 45 bool saved = false;
Kerneels Bezuidenhout 7:1a6e18b818a5 46
Generic 17:3b6d66253c97 47 // TODO Delete these variables
Generic 17:3b6d66253c97 48 float t = 0;
Generic 9:355a59fd962b 49 Serial pc(USBTX,USBRX);
Kerneels Bezuidenhout 19:ef78ac1a98f8 50 DigitalIn test(D3);
Generic 9:355a59fd962b 51
Kerneels Bezuidenhout 1:43fb2d03c36f 52 int main()
Kerneels Bezuidenhout 1:43fb2d03c36f 53 {
Kerneels Bezuidenhout 1:43fb2d03c36f 54 Init();
Kerneels Bezuidenhout 1:43fb2d03c36f 55
Kerneels Bezuidenhout 1:43fb2d03c36f 56 while(1)
Kerneels Bezuidenhout 1:43fb2d03c36f 57 {
Kerneels Bezuidenhout 7:1a6e18b818a5 58 switch (currentScreen)
Kerneels Bezuidenhout 7:1a6e18b818a5 59 {
Kerneels Bezuidenhout 7:1a6e18b818a5 60 case Screen::ZERO_PLATE_SCREEN :
Kerneels Bezuidenhout 7:1a6e18b818a5 61 ZeroPlate();
Kerneels Bezuidenhout 7:1a6e18b818a5 62 break;
Kerneels Bezuidenhout 12:650ae2f4c7df 63 case Screen::MANUAL_CONTROL_SCREEN :
Kerneels Bezuidenhout 12:650ae2f4c7df 64 Manual();
Kerneels Bezuidenhout 12:650ae2f4c7df 65 break;
Kerneels Bezuidenhout 13:21dc070a47a9 66 case Screen::AUTOMATIC_CONTROL_SCREEN :
Kerneels Bezuidenhout 13:21dc070a47a9 67 Automatic();
Kerneels Bezuidenhout 13:21dc070a47a9 68 break;
Kerneels Bezuidenhout 34:0b308a399f72 69 case Screen::CALIBRATE_SCREEN :
Kerneels Bezuidenhout 34:0b308a399f72 70 Calibrate();
Kerneels Bezuidenhout 34:0b308a399f72 71 break;
Kerneels Bezuidenhout 7:1a6e18b818a5 72 }
Kerneels Bezuidenhout 1:43fb2d03c36f 73 }
Kerneels Bezuidenhout 1:43fb2d03c36f 74 }
Kerneels Bezuidenhout 1:43fb2d03c36f 75
Kerneels Bezuidenhout 1:43fb2d03c36f 76 void GUIThread()
Kerneels Bezuidenhout 1:43fb2d03c36f 77 {
Kerneels Bezuidenhout 1:43fb2d03c36f 78 while(1)
Kerneels Bezuidenhout 1:43fb2d03c36f 79 {
Kerneels Bezuidenhout 1:43fb2d03c36f 80 if( nextScreen != currentScreen )
Kerneels Bezuidenhout 1:43fb2d03c36f 81 {
Kerneels Bezuidenhout 1:43fb2d03c36f 82 if( activeScreen != NULL)
Kerneels Bezuidenhout 1:43fb2d03c36f 83 delete activeScreen;
Kerneels Bezuidenhout 1:43fb2d03c36f 84
Kerneels Bezuidenhout 1:43fb2d03c36f 85 switch (nextScreen)
Kerneels Bezuidenhout 1:43fb2d03c36f 86 {
Kerneels Bezuidenhout 7:1a6e18b818a5 87 case Screen::MAIN_MENU_SCREEN :
Kerneels Bezuidenhout 1:43fb2d03c36f 88 activeScreen = new MainMenuScreen(&nextScreen);
Kerneels Bezuidenhout 1:43fb2d03c36f 89 break;
Kerneels Bezuidenhout 7:1a6e18b818a5 90 case Screen::MAIN_SETTINGS_SCREEN :
Kerneels Bezuidenhout 5:383f1108187d 91 activeScreen = new MainSettingsScreen(&nextScreen);
Kerneels Bezuidenhout 5:383f1108187d 92 break;
Kerneels Bezuidenhout 7:1a6e18b818a5 93 case Screen::ZERO_PLATE_SCREEN :
Kerneels Bezuidenhout 7:1a6e18b818a5 94 activeScreen = new ZeroPlateScreen(&nextScreen, &zeroAlpha, &zeroBeta, &saved);
Kerneels Bezuidenhout 7:1a6e18b818a5 95 break;
Generic 15:bc63b55a426d 96 case Screen::MANUAL_CONTROL_SCREEN :
Kerneels Bezuidenhout 12:650ae2f4c7df 97 activeScreen = new ManualControlScreen(&nextScreen, &alpha, &beta);
Kerneels Bezuidenhout 12:650ae2f4c7df 98 break;
Kerneels Bezuidenhout 13:21dc070a47a9 99 case Screen::AUTOMATIC_CONTROL_SCREEN :
Kerneels Bezuidenhout 22:dd9ff475b34c 100 activeScreen = new AutomaticControlScreen(&nextScreen, &x, &y, &measuredTs, &started, &ballOnPlate, &xSP, &ySP);
Kerneels Bezuidenhout 13:21dc070a47a9 101 break;
Kerneels Bezuidenhout 18:1b9579ac9f41 102 case Screen::AUTOMATIC_MORE_SCREEN :
Kerneels Bezuidenhout 18:1b9579ac9f41 103 activeScreen = new AutomaticMoreScreen(&nextScreen);
Kerneels Bezuidenhout 18:1b9579ac9f41 104 break;
Kerneels Bezuidenhout 20:70c5b1e499f0 105 case Screen::MANUAL_SETPOINT_SCREEN :
Generic 23:bab197887d5e 106 activeScreen = new ManualSetpointScreen(&nextScreen, &xSP, &ySP, &ballOnPlate, &started);
Kerneels Bezuidenhout 20:70c5b1e499f0 107 break;
Generic 23:bab197887d5e 108 case Screen::AUTOMATIC_SETTINGS_SCREEN :
Kerneels Bezuidenhout 22:dd9ff475b34c 109 activeScreen = new AutomaticSettingsScreen(&nextScreen, &P, &I, &D, &Ts);
Kerneels Bezuidenhout 26:f57db8d6d79e 110 break;
Kerneels Bezuidenhout 25:bfff3d661f92 111 case Screen::CHANGE_P_SCREEN :
Kerneels Bezuidenhout 25:bfff3d661f92 112 activeScreen = new ChangeValScreen(&nextScreen, currentScreen, &P, "Change P");
Kerneels Bezuidenhout 25:bfff3d661f92 113 break;
Kerneels Bezuidenhout 26:f57db8d6d79e 114 case Screen::CHANGE_I_SCREEN :
Kerneels Bezuidenhout 26:f57db8d6d79e 115 activeScreen = new ChangeValScreen(&nextScreen, currentScreen, &I, "Change I");
Kerneels Bezuidenhout 26:f57db8d6d79e 116 break;
Kerneels Bezuidenhout 26:f57db8d6d79e 117 case Screen::CHANGE_D_SCREEN :
Kerneels Bezuidenhout 26:f57db8d6d79e 118 activeScreen = new ChangeValScreen(&nextScreen, currentScreen, &D, "Change D");
Kerneels Bezuidenhout 26:f57db8d6d79e 119 break;
Kerneels Bezuidenhout 26:f57db8d6d79e 120 case Screen::CHANGE_TS_SCREEN :
Kerneels Bezuidenhout 31:5ece593c49a7 121 activeScreen = new ChangeValWholeScreen(&nextScreen, currentScreen, &Ts, "Change Ts", false, 4);
Kerneels Bezuidenhout 26:f57db8d6d79e 122 break;
Kerneels Bezuidenhout 32:d490f8ca6d2a 123 case Screen::CALIBRATE_SCREEN :
Kerneels Bezuidenhout 35:6baa558d3b86 124 activeScreen = new CalibrateScreen(&nextScreen, &ballOnPlate, &calStarted, &calPoint, &calHeldTime);
Kerneels Bezuidenhout 32:d490f8ca6d2a 125 break;
Kerneels Bezuidenhout 1:43fb2d03c36f 126 }
Kerneels Bezuidenhout 1:43fb2d03c36f 127
Kerneels Bezuidenhout 1:43fb2d03c36f 128 activeScreen->Draw();
Generic 17:3b6d66253c97 129 Thread::wait(200);
Generic 6:f717ce705c5d 130 currentScreen = nextScreen;
Kerneels Bezuidenhout 1:43fb2d03c36f 131 }
Kerneels Bezuidenhout 1:43fb2d03c36f 132
Kerneels Bezuidenhout 1:43fb2d03c36f 133 activeScreen->Process();
Kerneels Bezuidenhout 1:43fb2d03c36f 134
Generic 17:3b6d66253c97 135 Thread::wait(10);
Kerneels Bezuidenhout 1:43fb2d03c36f 136 }
Kerneels Bezuidenhout 1:43fb2d03c36f 137 }
Kerneels Bezuidenhout 1:43fb2d03c36f 138
Kerneels Bezuidenhout 1:43fb2d03c36f 139 void Init()
Kerneels Bezuidenhout 1:43fb2d03c36f 140 {
Generic 9:355a59fd962b 141 pc.baud(57600);
Generic 2:5fded6444350 142 nextScreen = Screen::MAIN_MENU_SCREEN;
Kerneels Bezuidenhout 1:43fb2d03c36f 143 guiThread.start(GUIThread);
Kerneels Bezuidenhout 1:43fb2d03c36f 144 }
Kerneels Bezuidenhout 7:1a6e18b818a5 145
Kerneels Bezuidenhout 7:1a6e18b818a5 146 void ZeroPlate()
Kerneels Bezuidenhout 7:1a6e18b818a5 147 {
Kerneels Bezuidenhout 12:650ae2f4c7df 148
Kerneels Bezuidenhout 12:650ae2f4c7df 149 pc.printf("Zero a : %f | Zero b : %f\n\r", zeroAlpha, zeroBeta);
Kerneels Bezuidenhout 12:650ae2f4c7df 150
Kerneels Bezuidenhout 12:650ae2f4c7df 151
Kerneels Bezuidenhout 7:1a6e18b818a5 152 if( saved)
Kerneels Bezuidenhout 7:1a6e18b818a5 153 {
Kerneels Bezuidenhout 12:650ae2f4c7df 154 // TODO Save zero position on servos
Generic 9:355a59fd962b 155 nextScreen = Screen::MAIN_SETTINGS_SCREEN;
Kerneels Bezuidenhout 7:1a6e18b818a5 156 saved = false;
Kerneels Bezuidenhout 7:1a6e18b818a5 157 }
Kerneels Bezuidenhout 12:650ae2f4c7df 158
Generic 9:355a59fd962b 159 Thread::wait(20);
Kerneels Bezuidenhout 7:1a6e18b818a5 160 }
Kerneels Bezuidenhout 12:650ae2f4c7df 161
Kerneels Bezuidenhout 12:650ae2f4c7df 162 void Manual()
Kerneels Bezuidenhout 12:650ae2f4c7df 163 {
Kerneels Bezuidenhout 12:650ae2f4c7df 164 // TODO Add manual control logic
Kerneels Bezuidenhout 12:650ae2f4c7df 165 }
Kerneels Bezuidenhout 13:21dc070a47a9 166
Kerneels Bezuidenhout 13:21dc070a47a9 167 void Automatic()
Kerneels Bezuidenhout 13:21dc070a47a9 168 {
Kerneels Bezuidenhout 13:21dc070a47a9 169 //TODO Add automatic control mode logic
Kerneels Bezuidenhout 19:ef78ac1a98f8 170 ballOnPlate = test.read();
Generic 17:3b6d66253c97 171 Thread::wait(4);
Kerneels Bezuidenhout 13:21dc070a47a9 172 }
Kerneels Bezuidenhout 34:0b308a399f72 173
Kerneels Bezuidenhout 34:0b308a399f72 174 void Calibrate()
Kerneels Bezuidenhout 34:0b308a399f72 175 {
Kerneels Bezuidenhout 34:0b308a399f72 176 ballOnPlate = test.read();
Kerneels Bezuidenhout 35:6baa558d3b86 177
Kerneels Bezuidenhout 36:9ca4125e526e 178 if( calStarted )
Kerneels Bezuidenhout 36:9ca4125e526e 179 {
Kerneels Bezuidenhout 36:9ca4125e526e 180 if( calPoint < 3 )
Kerneels Bezuidenhout 36:9ca4125e526e 181 {
Kerneels Bezuidenhout 36:9ca4125e526e 182 if( ballOnPlate )
Kerneels Bezuidenhout 36:9ca4125e526e 183 {
Kerneels Bezuidenhout 36:9ca4125e526e 184 calTimer.start();
Kerneels Bezuidenhout 36:9ca4125e526e 185 calHeldTime = calTimer.read();
Kerneels Bezuidenhout 36:9ca4125e526e 186
Kerneels Bezuidenhout 36:9ca4125e526e 187 if( calHeldTime >= 5 && ballOnPlate )
Kerneels Bezuidenhout 36:9ca4125e526e 188 {
Kerneels Bezuidenhout 36:9ca4125e526e 189 while( test.read() );
Kerneels Bezuidenhout 36:9ca4125e526e 190
Kerneels Bezuidenhout 36:9ca4125e526e 191 calPoint++;
Kerneels Bezuidenhout 36:9ca4125e526e 192 calTimer.stop();
Kerneels Bezuidenhout 36:9ca4125e526e 193 calTimer.reset();
Kerneels Bezuidenhout 36:9ca4125e526e 194 }
Kerneels Bezuidenhout 36:9ca4125e526e 195 }
Kerneels Bezuidenhout 36:9ca4125e526e 196 }
Kerneels Bezuidenhout 36:9ca4125e526e 197 }
Kerneels Bezuidenhout 36:9ca4125e526e 198
Kerneels Bezuidenhout 35:6baa558d3b86 199 while( calStarted )
Kerneels Bezuidenhout 35:6baa558d3b86 200 {
Kerneels Bezuidenhout 35:6baa558d3b86 201 while( calPoint < 3 )
Kerneels Bezuidenhout 35:6baa558d3b86 202 {
Kerneels Bezuidenhout 35:6baa558d3b86 203 //TODO Reaplace test with plate
Kerneels Bezuidenhout 35:6baa558d3b86 204 if( test.read() )
Kerneels Bezuidenhout 35:6baa558d3b86 205 {
Kerneels Bezuidenhout 35:6baa558d3b86 206 calTimer.start();
Kerneels Bezuidenhout 35:6baa558d3b86 207 //TODO measure and save screen values;
Kerneels Bezuidenhout 35:6baa558d3b86 208
Kerneels Bezuidenhout 35:6baa558d3b86 209 while( calTimer.read() < 5 )
Kerneels Bezuidenhout 35:6baa558d3b86 210 {
Kerneels Bezuidenhout 35:6baa558d3b86 211 calHeldTime = calTimer.read();
Kerneels Bezuidenhout 35:6baa558d3b86 212 }
Kerneels Bezuidenhout 35:6baa558d3b86 213
Kerneels Bezuidenhout 35:6baa558d3b86 214 while(test.read());
Kerneels Bezuidenhout 35:6baa558d3b86 215
Kerneels Bezuidenhout 35:6baa558d3b86 216 calPoint++;
Kerneels Bezuidenhout 35:6baa558d3b86 217 calTimer.stop;
Kerneels Bezuidenhout 35:6baa558d3b86 218 calTimer.reset();
Kerneels Bezuidenhout 35:6baa558d3b86 219 }
Kerneels Bezuidenhout 35:6baa558d3b86 220 else
Kerneels Bezuidenhout 35:6baa558d3b86 221 {
Kerneels Bezuidenhout 35:6baa558d3b86 222 calTimer.stop;
Kerneels Bezuidenhout 35:6baa558d3b86 223 calTimer.reset();
Kerneels Bezuidenhout 35:6baa558d3b86 224 }
Kerneels Bezuidenhout 35:6baa558d3b86 225 }
Kerneels Bezuidenhout 35:6baa558d3b86 226
Kerneels Bezuidenhout 35:6baa558d3b86 227 calStarted = false;
Kerneels Bezuidenhout 35:6baa558d3b86 228 calPoint = 0;
Kerneels Bezuidenhout 35:6baa558d3b86 229 }
Kerneels Bezuidenhout 34:0b308a399f72 230 }