2017-01-15 3 views
1

私はWindowsのiot C#開発SDKを使って学校プロジェクトに取り組んでいますが、これまでのところすべてがうまくいきましたが、今は3秒と7秒後にトリガする必要がある2つのイベントがあります。しかし、私はそれを働かせることはできません、私はこの2日間私の頭を壊してきましたが、私がしようとするすべては私にさらに頭痛を与えるようです。だから私はあなたたちがこれを手伝ってくれることを願っています。ボタンプレス間のディスパッチタイマー

基本的に私のプログラムはボタンの押下を待っていますが、ボタンが離された後、私はタイマーを起動する必要がありますが、ボタンが押されると、ボタンが再び離されるまでタイマーを停止する必要があります。ここであなたは私のbtn_changedイベントを見つけることができます。このイベントに組み込まれたストップウォッチを間違えてはいけません。私が必要とするタイマーのために、ストップウォッチは異なる目的を持っています。

挨拶、 イェルーン

 private void BtnPin_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e) 
    { 
     if (e.Edge == GpioPinEdge.FallingEdge) //Execute code when button is pushed down 
     { 
      stopwatch.Restart(); 
      Debug.WriteLine("Button down"); 
     } else // Execute code when button is released 
     { 
      stopwatch.Stop(); 
      if (stopwatch.ElapsedMilliseconds <= 5000) 
      { 
       morsemessage.AddMorse(stopwatch.ElapsedMilliseconds); //Add the new letter 
      } 
      else if (stopwatch.ElapsedMilliseconds > 5000) 
      { 
       morsemessage.AddCharacter(); 
       lcd_writestring(morsemessage.GetDecryptedMessage()); 
      } 
      Debug.WriteLine(morsemessage.currentCharacter); 
      Debug.WriteLine(stopwatch.ElapsedMilliseconds); 
      Debug.WriteLine(morsemessage.Message); 
      Debug.WriteLine(morsemessage.GetDecryptedMessage()); 
      dispatcherTimer.Start(); 
     }   
+0

ボタンを押してボタンを離したときにエッジ変更イベントが検出されますか? –

答えて

0

私はあなたが遭遇した特定の問題が、次のコードは、私の作品かについては明らかではないと思います。試してみることができます。

CoreDispatcher dispatcher = Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher; 
    private void InitTimer() 
    { 
     dispatchTimer = new DispatcherTimer(); 
     dispatchTimer.Interval = new TimeSpan(0, 0, 1); 
     dispatchTimer.Tick += (object sender, object e) => 
     { 
      Debug.WriteLine("Timer tick."); 
     }; 
     dispatchTimer.Start(); 
    } 

    private void InitGpio() 
    { 
     button = GpioController.GetDefault().OpenPin(4); 
     button.DebounceTimeout = new TimeSpan(0, 0, 0, 0, 200); 
     button.ValueChanged += BtnPin_ValueChanged; 
    } 

    private async void BtnPin_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e) 
    { 
     if (e.Edge == GpioPinEdge.FallingEdge) 
     { 
      Debug.WriteLine("Button pressed"); 
      await dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => 
      { 
       dispatchTimer.Stop(); 
      } 
      ); 
     } 
     else 
     { 
      Debug.WriteLine("Button released"); 
      await dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => 
      { 
       dispatchTimer.Start(); 
      } 
      ); 
     } 
    } 
関連する問題