Cornelius Bezuidenhout / Mbed OS Heiko

Dependencies:   BSP_DISCO_F746NG F746_GUI LCD_DISCO_F746NG SDFileSystem TS_DISCO_F746NG ResistiveTouchController Map CYS8218Controller MedianFilter

Revision:
22:dd9ff475b34c
Parent:
21:aa3074b237e0
Child:
23:bab197887d5e
--- a/Screens/ManualSetpointScreen.cpp	Sun Oct 02 21:22:04 2016 +0000
+++ b/Screens/ManualSetpointScreen.cpp	Mon Oct 03 00:31:36 2016 +0200
@@ -1,19 +1,23 @@
 #include "ManualSetpointScreen.hpp"
 
-ManualSetpointScreen::ManualSetpointScreen(int *nextScreen, float *xSP, float *ySP) :
+ManualSetpointScreen::ManualSetpointScreen(int *nextScreen, float *xSP, float *ySP, int *ballOnPlate, bool *started) :
   Screen(),
   _lbTitle( SCREEN_W/2, 0, "Manual Setpoint", Label::CENTER, Font24),
   _btBack( 0, SCREEN_H-30, 100, 30, "Back"),
   _tpSetpoint( (SCREEN_W/2)-90 ,57, 180,180, -120.0, 120.0, -136,136),
-  _btStart( 110, SCREEN_H-30, SCREEN_W-120, 30, "Start"),
-  _btStop( 110, SCREEN_H-30, SCREEN_W-120, 30, "Stop"),
+  _btStart( 110, SCREEN_H-30, SCREEN_W-220, 30, "Start"),
+  _btStop( 110, SCREEN_H-30, SCREEN_W-220, 30, "Stop"),
   _nlbXSP(0,26,"x (mm)=%.0f",*xSP),
-  _nlbYSP(0,40,"x (mm)=%.0f",*xSP),
+  _nlbYSP(0,40,"y (mm)=%.0f",*ySP),
   _btReset( SCREEN_W-100, SCREEN_H-30, 100, 30, "Reset")
 {
   _nextScreen = nextScreen;
   _xSP = xSP;
   _ySP = ySP;
+  *_xSP = 0;
+  *_ySP = 0;
+  _ballOnPlate = ballOnPlate;
+  _started = started;
 }
 
 void ManualSetpointScreen::Draw()
@@ -22,17 +26,76 @@
   _lbTitle.Draw();
   _btBack.Draw();
   _tpSetpoint.Draw();
+  _btStop.Inactivate();
+  _btStart.Inactivate();
   _btStart.Draw();
-  _btStop.Draw();
   _nlbXSP.Draw();
   _nlbYSP.Draw();
+  _btReset.Draw();
 }
 
 void ManualSetpointScreen::Process()
 {
   if( _btBack.Touched() )
   {
+    //TODO Stop control system if running
     *_nextScreen = AUTOMATIC_MORE_SCREEN;
   }
 
+  if( _tpSetpoint.Touched() )
+  {
+    _tpSetpoint.Update();
+
+    *_xSP = floor(_tpSetpoint.GetX());
+    *_ySP = floor(_tpSetpoint.GetY());
+    _nlbXSP.Draw("x (mm)=%.0f",*xSP),);
+    _nlbYSP.Draw("y (mm)=%.0f",*ySP),);
+  }
+
+  if( _btReset.Touched() )
+  {
+    _tpSetpoint.Reset();
+    _btReset.Draw();
+
+    *_xSP = floor(_tpSetpoint.GetX());
+    *_ySP = floor(_tpSetpoint.GetY());
+    _nlbXSP.Draw("x (mm)=%.0f",*xSP),);
+    _nlbYSP.Draw("y (mm)=%.0f",*ySP),);
+  }
+
+  if( _btStart.IsActive() )
+  {
+    if( !*_ballOnPlate )
+      _btStart.Inactivate();
+    else if( _btStart.Touched() )
+    {
+      _btStart.Inactivate();
+      _btStart.Erase();
+      _btStop.Activate();
+      _btStop.Draw(0xFFFF0000);
+      Thread::wait(200);
+      *_started = true;
+    }
+  }
+  else if( _btStop.IsActive() )
+  {
+    if( _btStop.Touched() )
+    {
+      _btStop.Inactivate();
+      _btStop.Erase();
+      _btStart.Activate();
+      _btStart.Draw(0xFF00FF00);
+      Thread::wait(200);
+      *_started = false;
+    }
+  }
+  else if( *_ballOnPlate )
+  {
+    if( !_btStop.IsActive() )
+    {
+      _btSta.Activate();
+      _btStart.Drwa(0xFF00FF00);
+    }
+  }
+
 }