2017-05-03 10 views
0

정확히 같은 Win10 IoT - RaspBerry Pi2: ValueChanged not called when GPIO change 내가 win10의 IoT (창조자 버전)와 라즈베리 파이 2가 보인다 C# Win10 여잔으로 발사하고이 C# 코드가 없습니다 : 센서에의 valueChanged는

public sealed class StartupTask : IBackgroundTask 
{ 
    private const int SENSOR_PIN = 17; 
    private GpioPin pinSensor; 

    public void Run(IBackgroundTaskInstance taskInstance) 
    { 
     taskInstance.Canceled += TaskInstance_Canceled; // "destructor" 

     var gpio = GpioController.GetDefault(); 

     if (gpio != null) 
     { 
      pinSensor = gpio.OpenPin(SENSOR_PIN); // also tried with GpioSharingMode.SharedReadOnly 

      var r = pinSensor.Read(); // works and changes if sensor changes. Verified with quickwatch 

      pinSensor.SetDriveMode(GpioPinDriveMode.Input); 
      pinSensor.DebounceTimeout = TimeSpan.FromMilliseconds(20); 

      pinSensor.ValueChanged += PinIn_ValueChanged; 
     } 
    } 

    private void PinIn_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs args) 
    { 
     // never gets hit... 
    } 

    private void TaskInstance_Canceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason) 
    { 
     pinSensor.Dispose(); 
    } 
} 

을 주도을하고 GpioPinValue 말 간략한 높고 낮은 것 사이에서 번갈아 나옵니다. 그래서 맞을 것입니다 ...

입력으로 설정 한 후 드라이브 모드를 검색 할 때. 그것은 실제로 입력으로 설정되어 저에게 말한다 :

var dm = pinSensor.GetDriveMode(); 

링크 스택 오버플로 문제의 코멘트에 제안했다한다. 그래서 내가 뭘 잘못하고 있니? 더 중요한 이유는 무엇입니까?

+0

합니까'때마다 같은 인스턴스를 반환 GpioController.GetDefault' 아니면 새로운 인스턴스를 구축 않습니다 비동기 프로그래밍에 대한 일반적인 관행이 같은 연기를 취할 것입니다 때마다 그것을 반환합니까? –

+0

@ LasseV.Karlsen 로컬 변수로 'public void Run (IBackgroundTaskInstance taskInstance)'을 실행했습니다. 항상 54 개의 핀을 사용할 수 있습니다. Raspberry pi 2는 단지 1 gpio 밖에 가지고 있지 않기 때문에 매번 같을 것으로 예상했습니다. 나는 그것이 동일하거나 뭔가인지를 확인하기 위해 객체에 고유 한 ID를 보지 못합니다. 그것은 배경 응용 프로그램이므로, 나는 백그라운드에서 계속 실행되기를 기대했습니다. 아니면 프로그램을 계속 실행하기 위해 무언가가 필요합니까? –

+1

'Run()'에'var deferval = taskInstance.GetDeferral();을 추가 했습니까? –

답변

1

지연 개체가 만들어지지 않으면 Run 메서드가 끝나면 백그라운드 응용 프로그램이 종료됩니다.

var deferval = taskInstance.GetDeferral(); 

참조 : Developing Background Applications