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 00:31:36 2016 +0200
Revision:
22:dd9ff475b34c
Parent:
20:70c5b1e499f0
Child:
23:bab197887d5e
Added AutomaticSettingsScreen

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