
Imports Windows.Devices.Gpio
Imports Windows.Devices.I2C
Imports Windows.Devices.Enumeration

Public NotInheritable Class MainPage
    Inherits Page

    Private relais As GpioPin
    Private DHT As GpioPin
    Private Const I2CADR = &H48     ' Adresse des PCF8591
    Private I2C_AD As I2cDevice

    ' Start
    Public Sub New()
        InitializeComponent()

        Dim gpio = GpioController.GetDefault            ' Default GPIO Controller nutzen

        textBlock1.Text = ""
        relais = gpio.OpenPin(6)                        ' benutzter Pin fr Relais
        relais.SetDriveMode(GpioPinDriveMode.Output)    ' Pin als Ausgang
        relais.Write(GpioPinValue.Low)                  ' Low Pegel
        appBarToggleButton.IsChecked = False            ' Button auf GUI nicht checked setzen

        initI2C()       ' Init I2C
    End Sub

    ' Initialisiert IC
    Private Async Sub initI2C()
        Dim aqs As String = I2cDevice.GetDeviceSelector()               ' Ermittelt alle I2C Controller im System
        Dim devinfo As DeviceInformationCollection = Await DeviceInformation.FindAllAsync(aqs)    'Ermittelt mit dem Selektor den I2C Controller
        Dim settings = New I2cConnectionSettings(I2CADR)                ' Adresse des Slave festlegen
        settings.BusSpeed = I2cBusSpeed.FastMode                        ' 400KHz bus speed 
        I2C_AD = Await I2cDevice.FromIdAsync(devinfo(0).Id, settings)   ' Device anlegen mit den Einstellungen
    End Sub


    ' Button wurde eingeschaltet
    Private Sub appBarToggleButton_Checked(sender As Object, e As RoutedEventArgs) Handles appBarToggleButton.Checked
        relais.Write(GpioPinValue.High)     ' Relais einschalten
    End Sub


    ' Button wurde ausgeschaltet
    Private Sub appBarToggleButton_Unchecked(sender As Object, e As RoutedEventArgs) Handles appBarToggleButton.Unchecked
        relais.Write(GpioPinValue.Low)      ' Relais aus
    End Sub

    ' A/D Wert per IC auslesen
    Private Function WertLesen() As Int16
        Dim ReadValue As Byte() = New Byte() {0, 0, 0, 0, 0}
        Dim i As Integer
        Dim wert As Int64 = 0

        For i = 1 To 5      ' 5 Werte einlesen fr weniger Fehler
            I2C_AD.Write(New Byte() {&H44})  ' Register im PCF8591 fr  internal Osc on, Autoincrement, 4-single ended measurments
            I2C_AD.Read(ReadValue)           ' Wert auslesen
            Task.Delay(10)                   ' 10 ms warten. IC entstressen (synchrone Ausfuehrung)
            wert += ReadValue(0)
        Next

        Return wert \ 5         ' ganzzahl. Mittelwert bilden
    End Function

    ' Button zum Auslesen gedrckt
    Private Sub button_Click(sender As Object, e As RoutedEventArgs) Handles button.Click
        textBlock1.Text = WertLesen()   ' Messwert lesen und anzeigen
    End Sub
End Class   