public void timerTick() { if (MainClient.GetLastMeting().Seconds > 5 && currentPower != MainClient.GetLastMeting().Power) { MainClient.ComPort.Write("PW " + currentPower); MainClient.ComPort.Read(); MainClient.QuickBeepAudio(); } if (MainClient.GetLastMeting().RPM < 45 || MainClient.GetLastMeting().RPM > 55) { deviation++; } else { deviation = Math.Max(deviation - 1, 0); } if (deviation >= 60 && !failed) { workloadStarted = MainClient.GetLastMeting().Seconds; currentstate = state.COOLINGDOWN; MainClient.SwitchTestModeAudio(); client.updateStepsText("U wijkt te vaak af van 50rpm, de test wordt gestopt. U begint nu aan de cooldown."); failed = true; MainClient.ComPort.Write("PW 25"); MainClient.ComPort.Read(); currentPower = 25; } switch (currentstate) { case state.WARMUP: if (MainClient.GetLastMeting().Seconds > 30) { List <ErgometerLibrary.Meting> last20 = MainClient.Metingen.GetRange(MainClient.Metingen.Count - 20, 20); int max = FindMaxValue(last20, x => x.HeartBeat); int min = FindMinValue(last20, x => x.HeartBeat); if (max + min < 20) { client.updateStepsText("We detecteren geen hartslag. Controleer of de hartslagmeter is verbonden. De test gaat automatisch verder."); } else if (max - min > 10) //Hartslag niet stabiel { client.updateStepsText("Uw hartslag is niet stabiel, probeer een tempo van 50 rpm aan te houden. De test gaat automatisch verder."); return; } else { currentstate = state.WORKLOAD; MainClient.SwitchTestModeAudio(); workloadStarted = MainClient.GetLastMeting().Seconds; client.updateStepsText("De warmup is voltooid. De test gaat nu beginnen. U begint nu aan de " + NumToText(GetCurrentWorkload()) + " workload."); } } if (MainClient.GetLastMeting().Seconds > 9 && MainClient.GetLastMeting().Seconds < 11) { if (MainClient.GetLastMeting().HeartBeat < 20) { client.updateStepsText("We detecteren geen hartslag. Controleer of de hartslagmeter is verbonden."); } } break; case state.WORKLOAD: if (MainClient.GetLastMeting().Seconds - workloadStarted > 180) { currentPower = GetWorkloadPower(GetCurrentWorkload()); workloads.Add(new Workload(MainClient.GetLastMeting().Power, workloadHearthbeat)); MainClient.ComPort.Write("PW " + currentPower); MainClient.ComPort.Read(); client.updateStepsText("U heeft de workload afgerond, u begint nu aan de " + NumToText(GetCurrentWorkload()) + " workload. Uw nieuwe weerstand is " + currentPower + " Watt."); MainClient.SwitchWorkloadAudio(); workloadStarted = MainClient.GetLastMeting().Seconds; workloadHearthbeat = 0; Console.WriteLine("3:00 gefietst, workload" + (GetCurrentWorkload()) + " af, nieuwe waardes maken"); //Checken of de heartrate niet groter is dan 75%, anders stoppen if (workloadHearthbeat > (CalculateMaximumHeartRate() * 0.80)) { workloadStarted = MainClient.GetLastMeting().Seconds; currentstate = state.COOLINGDOWN; MainClient.SwitchTestModeAudio(); client.updateStepsText("Uw hartslag heeft het kritieke punt bereikt, we beginnen nu aan de cooldown."); MainClient.ComPort.Write("PW 25"); MainClient.ComPort.Read(); currentPower = 25; } } else if (MainClient.GetLastMeting().Seconds - workloadStarted > 160 && workloadHearthbeat == 0) { List <ErgometerLibrary.Meting> last150 = MainClient.Metingen.GetRange(MainClient.Metingen.Count - 150, 150); workloadHearthbeat = FindAverageValue(last150, x => x.HeartBeat); Console.WriteLine("2:40 gefiets, gemiddelde harstslag berekenen:" + workloadHearthbeat); 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 > 9 && MainClient.GetLastMeting().Seconds - workloadStarted < 11) { 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: if (MainClient.GetLastMeting().Seconds - workloadStarted > 360) { currentstate = state.STOP; MainClient.SwitchTestModeAudio(); client.updateStepsText("De test is afgelopen."); } else if (MainClient.GetLastMeting().Seconds - workloadStarted > 9 && MainClient.GetLastMeting().Seconds - workloadStarted < 11) { client.updateStepsText("U bent momenteel met de cooldown bezig."); } break; case state.STOP: MainClient.Client.updateTimer.Stop(); MainClient.Client.beeptimer.Stop(); MainClient.ComPort.Write("RS"); MainClient.ComPort.Read(); currentPower = 0; if (failed) { MainClient.Client.updateStepsText("De test is mislukt omdat u te vaak heeft afgeweken van 50rpm. Onze excuses voor het ongemak."); } else if (workloads.Count > 1) { MainClient.Client.updateStepsText(String.Format("De test is afgelopen. Uw test resultaten zijn: \n VO2MAX: {0:0.00} MET: {1:0.00} Gemiddelde: {2:0.00} \n {3} ", CalculateVOMax(), CalculateMET(), CalculatePopulationAverage(), CalculateRating())); MainClient.SendNetCommand(new ErgometerLibrary.NetCommand(CalculateVOMax(), CalculateMET(), CalculatePopulationAverage(), CalculateZScore(), CalculateRating(), MainClient.Session)); } else { MainClient.Client.updateStepsText("Er zijn te weinig workload tests afgenomen om een resultaat te maken. Onze excuses voor het ongemak."); } break; } }
// WORKLOAD // private int GetWorkloadPower(int workload) { if (gender == 'V') { if (workload == 1) { if (workloadHearthbeat < 80) { return(125); } else if (workloadHearthbeat < 89) { return(100); } else if (workloadHearthbeat < 100) { return(75); } else { return(50); } } else { return(MainClient.GetLastMeting().Power + 25); } } else if (gender == 'M') { if (workload == 1) { if (workloadHearthbeat < 90) { return(150); } else if (workloadHearthbeat < 105) { return(125); } else { return(100); } } else if (workload == 2) { if (workloadHearthbeat < 120) { if (MainClient.GetLastMeting().Power == 150) { return(225); } else if (MainClient.GetLastMeting().Power == 125) { return(200); } else { return(175); } } else if (workloadHearthbeat < 135) { if (MainClient.GetLastMeting().Power == 150) { return(200); } else if (MainClient.GetLastMeting().Power == 125) { return(175); } else { return(150); } } else { if (MainClient.GetLastMeting().Power == 150) { return(175); } else if (MainClient.GetLastMeting().Power == 125) { return(150); } else { return(125); } } } else { return(MainClient.GetLastMeting().Power + 25); } } return(25); }