Повторное нажатие button

161
12 июня 2019, 06:30

Суть проблемы: создаю приложение в UWP, которое загружаю в Windows IoT на raspberry. Суть программы в включении/отключении реле на плате, которая связяна с raspberry по i2c. Сама программа отрабатывает правильно, нажимаю кнопку - реле включается, нажимаю еще раз - выключается, но при повторном нажатии на включение - ничего не происходит. Подскажите, что может быть не так?

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.Devices.I2c;
// Документацию по шаблону элемента "Пустая страница" см. по адресу https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x419
namespace App3
{
    /// <summary>
    /// Пустая страница, которую можно использовать саму по себе или для перехода внутри фрейма.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        I2cDevice I2C_PIC24FJ128GB106;
        DispatcherTimer timer;
        int addrSlave = 0x15;
        bool Pump = false;

        public MainPage()
        {
            InitializeComponent();
            InitI2C();
        }
        async void InitI2C()
        {
            I2cConnectionSettings i2CConnectionSettings = new I2cConnectionSettings(addrSlave);
            i2CConnectionSettings.BusSpeed = I2cBusSpeed.StandardMode;
            I2cController i2CController = await I2cController.GetDefaultAsync();
            I2C_PIC24FJ128GB106 = i2CController.GetDevice(i2CConnectionSettings);
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var per1 = new byte[] { 13, 0x0 };
            var per2 = new byte[] { 13, 0x1 };
            if (Pump != false)
            {
                I2C_PIC24FJ128GB106.Write(per1);
            }
            else
            {
                Pump = true;
                I2C_PIC24FJ128GB106.Write(per2);
            }
        }
    }
}

Аналогичная обработка метода на Python, где кнопка отрабатывает как нужно

def onButtonEnableLevel1(self):
        if self.enableLevel1 != False:            
            self.m_buttonEnableLevel1.configure(background=self.orig_color)           
            bus.write_byte_data(0x15, 13, 0x0)            
            self.enableLevel1 = False
        else:            
            self.enableLevel1 = True            
            self.m_buttonEnableLevel1.configure(background='#0078D7')            
            bus.write_byte_data(0x15, 13, 0x1)          
Answer 1
if (Pump != false)
{
    Pump = false;
    I2C_PIC24FJ128GB106.Write(per1);
}
else
{
    Pump = true;
    I2C_PIC24FJ128GB106.Write(per2);
}

Постоянно подавали сигнал на выключение, поскольку флаг не вернули в соответствующее состоянию положение.

А вообще лучше сделать как-нибудь так:

public void DeviceSwitch()
{
     I2C_PIC24FJ128GB106.Write(Pump ?  per1: per2);
     Pump =!Pump;
}

И в Button_Click дергайте уже этот метод. Вообще в обработчике событий контролов логики быть не должно.

Плюс это

  var per1 = new byte[] { 13, 0x0 };
  var per2 = new byte[] { 13, 0x1 };

Вынесите в константы класса. И название переменным давайте более удобоваримые - еще спасибо за совет скажете, когда-нибудь. А еще лучше вообще из класса MainPage - всё это вынести в отдельный класс.

READ ALSO
Как получить значения json из контроллера asp.net mvc core

Как получить значения json из контроллера asp.net mvc core

отправляю такой запрос наконтроллер:

159
Работа с базой данных WPF

Работа с базой данных WPF

Есть база данных магазина (3 таблицы)Нужно выводить данные в datagrid, а также в нем же добавлять, обновлять, удалять и искать записи

116
Cast&lt;T&gt; для набора элементов приводящихся к Т

Cast<T> для набора элементов приводящихся к Т

Есть класс, содержащий оператор приведения типа int к типу этого класса

148
Проксирование запроса в cqrs приложениях

Проксирование запроса в cqrs приложениях

Пишу тестовый веб-сайт, где пробую разные аспекты CQRS (сначала это была самопальная реализация cqrs, потом попробовал MediatR)

97