diff --git a/ErgometerIPR/ErgometerApplication/ErgometerTest.cs b/ErgometerIPR/ErgometerApplication/ErgometerTest.cs index 32d1828..282ee3f 100644 --- a/ErgometerIPR/ErgometerApplication/ErgometerTest.cs +++ b/ErgometerIPR/ErgometerApplication/ErgometerTest.cs @@ -11,38 +11,74 @@ namespace ErgometerApplication private int weight; private int length; private int age; + private char gender; - private enum state {WARMUP, WORKLOAD1, WORKLOAD2, WORKLOAD3, WORKLOAD4, COOLINGDOWN}; + private enum state {WARMUP, WORKLOAD, COOLINGDOWN}; private state currentstate; private int stateStarted; + private int stateHearthbeat; - public ErgometerTest(int weight, int length , int age) + public ErgometerTest(int weight, int length , int age, char gender) { this.weight = weight; this.length = length; this.age = age; - this.currentstate = state.WARMUP; + this.gender = gender; + currentstate = state.WARMUP; stateStarted = 0; } - private double CalculateMaximumHeartRate() - { - return 208 - (0.7 * age); - } - public void timerTick() { - if(currentstate == state.WARMUP) + switch(currentstate) { - if (MainClient.Metingen.Last().Seconds > 30) - { - List last10 = MainClient.Metingen.GetRange(MainClient.Metingen.Count - 10, 10); - int max = FindMaxValue(MainClient.Metingen, x => x.HeartBeat); - int min = FindMaxValue(MainClient.Metingen, x => x.HeartBeat); - }; + case state.WARMUP: + if (MainClient.Metingen.Last().Seconds > 30) + { + List last10 = MainClient.Metingen.GetRange(MainClient.Metingen.Count - 10, 10); + int max = FindMaxValue(MainClient.Metingen, x => x.HeartBeat); + int min = FindMaxValue(MainClient.Metingen, x => x.HeartBeat); + MainClient.ComPort.Write("SET PW 25"); + if(max - min > 20) //Hartslag niet stabiel + { + return; + } + else + { + currentstate = state.WORKLOAD; + stateStarted = MainClient.Metingen.Last().Seconds; + } + } + break; + case state.WORKLOAD: + if (stateStarted - MainClient.Metingen.Last().Seconds > 180) + { + //Bereken nieuwe kracht + //Zet nieuwe kracht + //State started weer op de huidige tijd zetten + //Checken of het niet groter dan 75% is + //stateHeartbeat weer op 0 zetten + + } + else if (stateStarted - MainClient.Metingen.Last().Seconds > 160 && stateHearthbeat != 0) + { + List last80 = MainClient.Metingen.GetRange(MainClient.Metingen.Count - 80, 80); + stateHearthbeat = FindAvergeValue(MainClient.Metingen, x => x.HeartBeat); + } + break; + case state.COOLINGDOWN: + break; } } + + // HELPER FUNCTIONS // + + private double CalculateMaximumHeartRate() + { + return 208 - (0.7 * age); + } + public int FindMaxValue(List list, Converter projection) { if (list.Count == 0) @@ -78,5 +114,19 @@ namespace ErgometerApplication } return minValue; } + + public int FindAvergeValue(List list, Converter projection) + { + if (list.Count == 0) + { + throw new InvalidOperationException("Empty list"); + } + int totalvalue = 0; + foreach (T item in list) + { + totalvalue += projection(item); + } + return totalvalue / list.Count; + } } }