Esempio n. 1
0
        private void detectSignals()
        {
            Stopwatch stopWatch = new Stopwatch();

            while (true)
            {
                GpioPinValue currentValue = _inputPin.Read();

                // Wir müssen nur zwischen 2 Zuständen unterscheiden.
                // 1. Wir warten auf ein Low-Signal und beginnen dann die Zeitmessung
                // 2. Wir stoppen die im ersten Schritt gestartete Zeitmessung und werten anschließend die Zeit aus.
                // Da im ersten Schritt die Zeitmessung gestoppt ist und im zweiten nicht, benutzen wir hier die entsprechende Eigenschaft,
                // um zwischen den jeweiligen Schritten zu unterscheiden.
                if (!stopWatch.IsRunning)
                {
                    if (currentValue == GpioPinValue.Low)
                    {
                        stopWatch.Restart();
                    }
                }
                else if (currentValue == GpioPinValue.High)
                {
                    stopWatch.Stop();

                    var duration = stopWatch.ElapsedMilliseconds;


                    stopWatch.Reset();

                    // Unter dem Schwellwert von Short werten wir das Signal als zu kurz und damit ungültig.
                    // Ansonsten ordnen wir das Signal anhand der festgelegten Schwellwerte dem jeweiligen Typ zu.
                    if (duration >= TIME_SHORT)
                    {
                        SignalTypes signalType = SignalTypes.Short;

                        if (duration >= TIME_PAUSE)
                        {
                            signalType = SignalTypes.Pause;
                        }
                        else if (duration >= TIME_LONG)
                        {
                            signalType = SignalTypes.Long;
                        }

                        // Normalerweise würden wir hier ein entsprechendes Event feuern.
                        // Aber in diesem Fall helfen wir uns mit einer einfachen Ausgabe.
                        Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                        {
                            lb_Output.Items.Add(String.Format("{0}: {1} ({2} ms)", DateTime.Now.ToString("HH:mm:ss"), signalType.ToString(), duration));

                            if (lb_Output.Items.Count > 10)
                            {
                                lb_Output.Items.RemoveAt(0);
                            }
                        })
                        .AsTask().Wait();
                    }
                }

                // Damit verhindern wir, dass der arme Raspi heiß läuft ;-)
                // 100 Abtastungen pro Sekunde sollten in diesem Fall genügen.
                Task.Delay(10);
            }
        }
Esempio n. 2
0
 public override string ToString()
 {
     return(m_type.ToString());
 }