From 78404b22954b1fea89ebdae219fb951aff6baba7 Mon Sep 17 00:00:00 2001 From: Janco Kock Date: Sun, 1 Nov 2015 16:35:31 +0100 Subject: [PATCH 1/2] Added gender --- .../ErgometerApplication/ErgometerTest.cs | 49 +++++++++++++------ 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/ErgometerIPR/ErgometerApplication/ErgometerTest.cs b/ErgometerIPR/ErgometerApplication/ErgometerTest.cs index 016a9a2..680cce1 100644 --- a/ErgometerIPR/ErgometerApplication/ErgometerTest.cs +++ b/ErgometerIPR/ErgometerApplication/ErgometerTest.cs @@ -11,38 +11,57 @@ 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; - 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); + if(max - min > 20) //Hartslag niet stabiel + { + return; + } + else + { + currentstate = state.WORKLOAD; + } + } + break; + case state.WORKLOAD: + 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) From 679f17a98ffde4449d4fd883914d466eecf88273 Mon Sep 17 00:00:00 2001 From: Janco Kock Date: Sun, 1 Nov 2015 16:58:57 +0100 Subject: [PATCH 2/2] Calculated average hearthbeat, Added some new structure --- .../ErgometerApplication/ErgometerTest.cs | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/ErgometerIPR/ErgometerApplication/ErgometerTest.cs b/ErgometerIPR/ErgometerApplication/ErgometerTest.cs index 680cce1..e643e08 100644 --- a/ErgometerIPR/ErgometerApplication/ErgometerTest.cs +++ b/ErgometerIPR/ErgometerApplication/ErgometerTest.cs @@ -16,6 +16,7 @@ namespace ErgometerApplication private enum state {WARMUP, WORKLOAD, COOLINGDOWN}; private state currentstate; private int stateStarted; + private int stateHearthbeat; public ErgometerTest(int weight, int length , int age, char gender) { @@ -37,6 +38,7 @@ namespace ErgometerApplication 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; @@ -44,10 +46,25 @@ namespace ErgometerApplication 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; @@ -97,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; + } } }