コード例 #1
0
        public async Task SetPressurePercent(double newPercent)
        {
            await pneumaticSemaphore.WaitAsync();

            try
            {
                var deltaPercent = newPercent - PressurePercent;

                if (deltaPercent > 0)
                {
                    // Requires inflation
                    var inflationDurationS = deltaPercent / pneumatic.InflationRatePctPerS;
                    if (newPercent >= 1)
                    {
                        inflationDurationS += 0.25 / pneumatic.InflationRatePctPerS;    // Extra padding to ensure maximum inflation
                    }
                    await pneumatic.Inflate(inflationDurationS);
                }
                else if (deltaPercent < 0)
                {
                    var deflationDurationS = (-deltaPercent) / pneumatic.DeflationRatePctPerS;
                    if (newPercent <= 0)
                    {
                        deflationDurationS += 0.25 / pneumatic.DeflationRatePctPerS;    // Extra padding to ensure absolute zero
                    }
                    await pneumatic.Deflate(deflationDurationS);
                }
                this.PressurePercent = newPercent;
            }
            finally
            {
                pneumaticSemaphore.Release();
            }
        }