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();
링크 스택 오버플로 문제의 코멘트에 제안했다한다. 그래서 내가 뭘 잘못하고 있니? 더 중요한 이유는 무엇입니까?
합니까'때마다 같은 인스턴스를 반환 GpioController.GetDefault' 아니면 새로운 인스턴스를 구축 않습니다 비동기 프로그래밍에 대한 일반적인 관행이 같은 연기를 취할 것입니다 때마다 그것을 반환합니까? –
@ LasseV.Karlsen 로컬 변수로 'public void Run (IBackgroundTaskInstance taskInstance)'을 실행했습니다. 항상 54 개의 핀을 사용할 수 있습니다. Raspberry pi 2는 단지 1 gpio 밖에 가지고 있지 않기 때문에 매번 같을 것으로 예상했습니다. 나는 그것이 동일하거나 뭔가인지를 확인하기 위해 객체에 고유 한 ID를 보지 못합니다. 그것은 배경 응용 프로그램이므로, 나는 백그라운드에서 계속 실행되기를 기대했습니다. 아니면 프로그램을 계속 실행하기 위해 무언가가 필요합니까? –
'Run()'에'var deferval = taskInstance.GetDeferral();을 추가 했습니까? –