diff --git a/ErgometerIPR/ErgometerApplication/ErgometerApplication.csproj b/ErgometerIPR/ErgometerApplication/ErgometerApplication.csproj
index 1903322..c53b71f 100644
--- a/ErgometerIPR/ErgometerApplication/ErgometerApplication.csproj
+++ b/ErgometerIPR/ErgometerApplication/ErgometerApplication.csproj
@@ -87,6 +87,7 @@
+
ClientApplicatie.cs
diff --git a/ErgometerIPR/ErgometerApplication/ErgometerTest.cs b/ErgometerIPR/ErgometerApplication/ErgometerTest.cs
index 22b2ccc..246f331 100644
--- a/ErgometerIPR/ErgometerApplication/ErgometerTest.cs
+++ b/ErgometerIPR/ErgometerApplication/ErgometerTest.cs
@@ -13,11 +13,11 @@ namespace ErgometerApplication
private int age;
private char gender;
- private enum state {WARMUP, WORKLOAD, COOLINGDOWN};
+ private enum state {WARMUP, WORKLOAD, COOLINGDOWN, STOP};
private state currentstate;
private int workloadStarted;
private int workloadHearthbeat;
- private int workloadnumber;
+ private List workloads;
private ClientApplicatie client;
@@ -28,10 +28,13 @@ namespace ErgometerApplication
this.age = age;
this.gender = gender;
currentstate = state.WARMUP;
- workloadnumber = 1;
+
this.client = client;
client.updateStepsText("U begint nu aan een warmup, probeer een tempo van 50 rpm aan te houden. De test gaat automatisch verder.");
+ workloads = new List();
MainClient.ComPort.Write("PW 25");
+
+ Console.WriteLine(CalculateVOMax());
}
public void timerTick()
@@ -53,7 +56,7 @@ namespace ErgometerApplication
{
currentstate = state.WORKLOAD;
workloadStarted = MainClient.GetLastMeting().Seconds;
- client.updateStepsText("De warmup is voltooid. U begint nu aan de " + NumToText(workloadnumber) + " workload.");
+ client.updateStepsText("De warmup is voltooid. U begint nu aan de " + NumToText(GetCurrentWorkload()) + " workload.");
}
}
break;
@@ -63,45 +66,56 @@ namespace ErgometerApplication
//Checken of de heartrate niet groter is dan 75%, anders stoppen
if (workloadHearthbeat > CalculateMaximumHeartRate())
{
+ workloadStarted = MainClient.GetLastMeting().Seconds;
currentstate = state.COOLINGDOWN;
client.updateStepsText("Uw hartslag heeft het kritieke punt bereikt, we beginnen nu aan de cooldown.");
}
- int pw = GetWorkloadPower(workloadnumber);
+ int pw = GetWorkloadPower(GetCurrentWorkload());
+ workloads.Add(new Workload(MainClient.GetLastMeting().Power, workloadHearthbeat));
MainClient.ComPort.Write("PW " + pw);
- client.updateStepsText("U heeft de workload afgerond, u begint nu aan de " + NumToText(workloadnumber) + " workload. Uw nieuwe weerstand is " + pw + " Watt.");
+ client.updateStepsText("U heeft de workload afgerond, u begint nu aan de " + NumToText(GetCurrentWorkload()) + " workload. Uw nieuwe weerstand is " + pw + " Watt.");
+
workloadStarted = MainClient.GetLastMeting().Seconds;
workloadHearthbeat = 0;
- workloadnumber++;
- Console.WriteLine("3:00 gefietst, workload" + workloadnumber + " af, nieuwe waardes maken");
+ Console.WriteLine("3:00 gefietst, workload" + (workloads.Count - 1) + " af, nieuwe waardes maken");
}
else if (MainClient.GetLastMeting().Seconds - workloadStarted > 160 && workloadHearthbeat == 0)
{
List last80 = MainClient.Metingen.GetRange(MainClient.Metingen.Count - 80, 80);
workloadHearthbeat = FindAvergeValue(MainClient.Metingen, x => x.HeartBeat);
Console.WriteLine("2:40 gefiets, gemiddelde harstslag berekenen:" + workloadHearthbeat);
- client.updateStepsText("U bent nu met de " + NumToText(workloadnumber) + " workload bezig. Uw gemiddelde hartslag is berekend als " + workloadHearthbeat + "bpm.");
+ client.updateStepsText("U bent nu met de " + NumToText(GetCurrentWorkload()) + " workload bezig. Uw gemiddelde hartslag is berekend als " + workloadHearthbeat + "bpm.");
}
else if(MainClient.GetLastMeting().Seconds - workloadStarted > 8 && MainClient.GetLastMeting().Seconds - workloadStarted < 10)
{
- client.updateStepsText("U bent nu met de " + NumToText(workloadnumber) + " workload bezig. De fiets staat nu ingesteld op " + MainClient.GetLastMeting().Power + " Watt");
+ client.updateStepsText("U bent nu met de " + NumToText(GetCurrentWorkload()) + " workload bezig. De fiets staat nu ingesteld op " + MainClient.GetLastMeting().Power + " Watt");
}
break;
case state.COOLINGDOWN:
+ MainClient.ComPort.Write("PW 25");
+ if(MainClient.GetLastMeting().Seconds - workloadStarted > 360)
+ {
+ currentstate = state.STOP;
+ client.updateStepsText("De test is afgelopen.");
+ }
+ else if(MainClient.GetLastMeting().Seconds - workloadStarted > 8 && MainClient.GetLastMeting().Seconds - workloadStarted < 10)
+ {
+ client.updateStepsText("U bent momenteel met de cooldown bezig.");
+ }
break;
}
}
// WORKLOAD //
-
private int GetWorkloadPower(int workload)
{
if (gender == 'V')
{
- if (workloadnumber == 1)
+ if (workload == 1)
{
if (workloadHearthbeat < 80)
return 125;
@@ -119,7 +133,7 @@ namespace ErgometerApplication
}
else if(gender == 'M')
{
- if(workloadnumber == 1)
+ if(workload == 1)
{
if (workloadHearthbeat < 90)
return 150;
@@ -128,7 +142,7 @@ namespace ErgometerApplication
else
return 100;
}
- else if(workloadnumber == 2)
+ else if(workload == 2)
{
if(workloadHearthbeat < 120)
{
@@ -167,9 +181,27 @@ namespace ErgometerApplication
return 25;
}
+ // CALCULATOR FUNCTIONS //
+
+ public double CalculateVOMax()
+ {
+ Workload wa = workloads[workloads.Count - 2];
+ Workload wb = workloads.Last();
+
+ var LmA = 0.32643 + 0.55275 * wa.getKiloponds() + 0.014429 * Math.Pow(wa.getKiloponds(), 2) + 0.00025271 * Math.Pow(wa.getKiloponds(), 3);
+ var LmB = 0.32643 + 0.55275 * wb.getKiloponds() + 0.014429 * Math.Pow(wb.getKiloponds(), 2) + 0.00025271 * Math.Pow(wb.getKiloponds(), 3);
+ var VOABS = LmB + ((LmB - LmA) / (wb.heartrate - wa.heartrate)) * (220 - age - wb.heartrate);
+ return VOABS * 1000 / weight;
+ }
+
// HELPER FUNCTIONS //
+ private int GetCurrentWorkload()
+ {
+ return workloads.Count - 1;
+ }
+
private double CalculateMaximumHeartRate()
{
return 208 - (0.7 * age);
diff --git a/ErgometerIPR/ErgometerApplication/Workload.cs b/ErgometerIPR/ErgometerApplication/Workload.cs
new file mode 100644
index 0000000..9b72f34
--- /dev/null
+++ b/ErgometerIPR/ErgometerApplication/Workload.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ErgometerApplication
+{
+ class Workload
+ {
+ public double watt{private set; get; }
+ public double heartrate { private set; get; }
+
+ public Workload(int watt, int heartrate)
+ {
+ this.watt = watt;
+ this.heartrate = heartrate;
+ }
+
+ public double getKiloponds()
+ {
+ return watt / 50;
+ }
+ }
+}