Beispiel #1
0
        public ErgometerTest(int weight, int length, int age, char gender, ClientApplicatie client)
        {
            this.weight  = weight;
            this.length  = length;
            this.age     = age;
            this.gender  = gender;
            currentstate = state.WARMUP;

            MainClient.SwitchTestModeAudio();

            deviation = 0;
            failed    = false;

            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 <Workload>();
            MainClient.ComPort.Write("PW 25");
            MainClient.ComPort.Read();
            currentPower = 25;
            MainClient.Client.heartBeat.max = (int)CalculateMaximumHeartRate();
        }
Beispiel #2
0
        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;
            }
        }