2016-09-11 55 views
6

Jeśli tworzę aplikację w UWP na przykład z Template 10. Używam C#Najlepsza praktyka umieszczania logiki GPIO w UWP

Chcę mieć logikę GpioController w klasie lub w innym miejscu, które obsłuży wszystkie firmy wejścia i wyjścia, jak ustawić wszystkie szpilki i zdarzenia.

Przykładowo, po naciśnięciu przycisku urządzenie wyśle ​​żądanie POST do serwera, to musi działać w dowolnym widoku.

Jeśli pójdę do widoku i chcę, aby uzyskać status szpilki, aby pokazać jak „Drzwi są otwarte”

Także jeśli na przykład czujnik jest wyzwalanie pin do wysokiej, jeśli zmienię zobacz, czy nie może wywołać zdarzenia buttonPin_ValueChanged i lub ustawić go na LOW z jakiegokolwiek powodu, chyba że czujnik jest NISKI.

Nawet jeśli pinezka Power-on Pull to PullDown.

pin = gpio.OpenPin(12); 
pin.SetDriveMode(GpioPinDriveMode.InputPullUp); 
pin.Write(GpioPinValue.Low); 
pin.ValueChanged += buttonPin_ValueChanged; 
+0

Nie sądzę, można po prostu napisać taką prostą klasę do abstrakcyjny stosowanie kołków GPIO. Elektronika jest bardziej skomplikowana niż w przypadku szpilek, które potrafią robić różne rzeczy w zależności od tego, co łączysz. Byłbym zainteresowany, aby zobaczyć, jakie masz odpowiedzi. –

+0

Naprawdę nie rozumiem, jaki masz problem? Czy po prostu chcesz mieć możliwość interakcji z kontrolerem GPIO z dowolnego miejsca w twoim kodzie i otrzymywać powiadomienia o zmianach wartości pinów bez względu na to, który widok jest aktualnie wyświetlany? Czy to jest poprawne? –

+0

Tak @robinmanuelthiel, jak pracownik tła lub coś takiego. Loguję ~ 8 statystyk/s. I nie mogę przegapić jednej zmiany, nawet jeśli przełączam widok. –

Odpowiedz

1

Można utworzyć GpioController obiekt w początkowej klasy i przekazać go jako obiekt do innych klas.

Takich jak:

class BaseClass { 
    GpioController gpio; 

    void createGpioController(){ 
     gpio = new GpioController(/*Constuctor arguments here.*/); 
    } 

    void moveToNextClass(NextClass next){ 
     //Instantiate next class with any special constructors. 
     next.gpio = this.gpio; 
     //Launch next class with same gpio member values. 
    } 
} 

class NextClass: BaseClass { 
    GpioController gpio; //Will be assigned by last class. 
}