Member 14165241 Ответов: 2

Как это можно сделать ВКЛ="1" и выкл="2" в один клик ?


Я использую одну кнопку для "ВКЛ. и "Выкл." в asp.net с#. Когда я нажимаю эту кнопку, она "включена", а когда я нажимаю ту же кнопку во второй раз, она "выключена". Теперь я хочу сделать это в один клик. Это означает, что как только я нажму и удержу эту кнопку, она должна быть "включена", пока я не отпущу кнопку, а когда отпущу, она должна быть "выключена". Пожалуйста, дайте мне знать, как я могу это сделать !

Что я уже пробовал:

protected void Page_Load(object sender, EventArgs e)
    {
        ardo = new SerialPort();
        ardo.PortName = "COM5";
        ardo.BaudRate = 9600;
    }
    protected void BlueOn(object sender, EventArgs e)
    {
        if(Session["currentState"] == null)
           Session["currentState"] = "2";

       if(Session["currentState"].ToString() == "1")
         {

            Session["currentState"]= "2";
         }
         else
         {

            Session["currentState"]= "1"; 
         }
        ardo.Open();
        ardo.Write(Session["currentState"].ToString());
        ardo.Close();

    }

Richard MacCutchan

Более привычно использовать 0 для выключения и 1 для включения.

Richard MacCutchan

Какой последовательный порт вы пытаетесь использовать? Если он не находится на веб-сервере, то ваш код никогда не будет работать.

Member 14165241

Пожалуйста, проверьте мой код там". ardo = new SerialPort();
Ардо.Имя порта = "COM5";
Ардо.Скорость передачи = 9600;"
Я должен передать значение "1" или "2" этому порту "Ардо" через "Ардо".Write(Session["currentState"].Метод toString());" .
Как я могу это сделать при использовании скрипта ?

Richard MacCutchan

Код не имеет значения, если вы думаете, что это будет подключаться к последовательному порту клиента. Что именно ты пытаешься сделать?

Member 14165241

Как вы можете видеть из моего кода там, наверху, когда я нажимаю кнопку "BlueOn", она посылает значение "1" или "2" на порт arduino "ardo.Имя порта = "COM5";". Для этих 2 значений мне нужно нажать кнопку 2 раза. Теперь я пытаюсь сделать что-то вроде того, когда я нажимаю и удерживаю кнопку, она передает значение "1", а когда я отпускаю кнопку, она передает "2".

Richard MacCutchan

Согласно вашим тегам это веб приложение (ASP.NET). Итак, я спрошу еще раз: где вы ожидаете, что последовательный порт будет подключен?

Member 14165241

Последовательный порт соединен с arduino. Когда я нажимаю кнопку из веб-приложения, она передает значение в arduino.

Richard MacCutchan

Последовательный порт-это физическое соединение, так как же он подключен физически И с чем это связано?

Member 14165241

На сервере есть usb-порт, и я подключаю arduino к usb-порту сервера. Этот порт может быть "COM3" или "COM4".

Richard MacCutchan

Затем вам понадобится код на стороне сервера для отправки данных на устройство. Но это невозможно контролировать из веб-браузера, который работает на клиенте.

Member 14165241

Я не уверен, но, возможно, с jquery ajax это возможно.

Richard MacCutchan

Да, возможно. Но что именно вы пытаетесь сделать с устройством arduino, которое поможет пользователям вашей веб-страницы?

Member 14165241

С веб-страницы я хотел бы включить свет с помощью arduino. Вы не могли бы мне помочь?

Richard MacCutchan

Поскольку пользователь веб-страницы не может видеть устройство, в этом действительно нет никакого смысла.

2 Ответов

Рейтинг:
2

Member 12275543

Вместо использования одного события попробуйте использовать два отдельных

например:

private void BlueOn_Click(object sender, EventArgs e)
        {
            //This will be fired as soon as the button is clicked
            //Code for on condition
   
        }

private void BlueOn_MouseUp(object sender, MouseEventArgs e)
        {
            //This will be fired as soon as you release the click
            //Code for off condition
        }


Member 14165241

В таком случае, что будет код с клиентского сайта, который я имею в виду в aspx ?

Рейтинг:
0

OriginalGriff

Не делайте этого в C# - весь код C# работает на сервере, так что это означает круговую поездку через интернет для всего - или ваш пользовательский интерфейс будет таким же текучим и отзывчивым, как патока! Вместо этого сделайте это в клиенте через Javascript, через события up и down там: событие onmousedown[^]


Member 14165241

Не могли бы вы дать мне пример кода, чтобы я мог следовать этому ...

George Swan

Аккуратный способ изменить значение ‘bool’ при каждом наступлении определенного события-это использовать не логический оператор, например IsClicked=!IsClicked

OriginalGriff

Да, но все же - сделайте это в клиенте!

Member 14165241

Будьте добры помочь мне в этом вопросе

OriginalGriff

Как вам помочь? Вы перешли по ссылке и пытались сделать это самостоятельно?
Если да, то как далеко вы продвинулись?

Member 14165241

Как я могу передать строковое значение скриптом, как код за кнопкой ?

Ralf Meier

вы должны внимательно прочитать то, что было предложено в этом решении.
Возьмем (например) MouseDown-событие для набора в "2" и MouseUp-событие для набора в "1".
Оба события также связаны с кнопкой, как и MouseClick-событие, которое уже используется вами ...

Member 14165241

Я это понимаю. Когда я нажимаю и отпускаю кнопку, цвет меняется. Но я не понимаю, как я могу передать это значение в последовательный порт. Пожалуйста, помогите мне решить эту проблему.

Ralf Meier

Вы должны дать больше информации.
Полагаю, вы уже подключены к ком-порту. Итак, теперь какое действие из COM-порта должно изменить цвет, а какое действие должно изменить его обратно.
Если вы хотите помочь, вы также должны помочь, и вы должны дать необходимую информацию. Вы не должны игнорировать наши вопросы ...

Member 14165241

Да , спасибо за вашу признательность. Цвет-это другая часть, которую я только что попробовал проверить, как работает скрипт. В моем коде там наверху вы можете обнаружить, что есть порт, указанный для arduino. При нажатии кнопки "BlueOn" она передает значение "2", а при повторном нажатии посылает значение "1" в порт, так что свет будет включаться и выключаться по следующей команде. Теперь я хочу реализовать это в один клик. Это означает, что я пытаюсь сделать что-то вроде того, когда я нажимаю кнопку, она передает значение "1" arduino, так что свет будет включен, а когда я отпускаю кнопку, она передает "2" arduino, так что свет выключается.

Ralf Meier

Я думаю, что ваше понимание неверно ...
Если вы создаете "умный домашний контроль", то он должен (на мой взгляд) выглядеть следующим образом :
Вы нажимаете кнопку в первый раз, когда она посылает (например) "2" компорту (чтобы включить свет), и цвет кнопки меняется на зеленый.
Через некоторое время вы снова нажимаете кнопку - теперь вы должны отправить "1" в Компорт (чтобы выключить свет), и цвет кнопки возвращается к серому.
Следующая кнопка-нажатие снова изменится на "2" и так далее.
Это то, чего вы пытаетесь достичь ?
Если Да :
Все действие должно исходить из события ButtonClick и его метода. Последнее значение, которое вы отправляете в Компорт, должно быть запомнено в вашем приложении. это значение принимает решение внутри вашего метода - в основном так, как оно было опубликовано вами в вашем вопросе.
Так... пожалуйста, помогите мне понять ... где же твоя настоящая проблема? .. (Потому что я не понимаю, почему вы хотите удерживать кнопку в течение времени, когда свет необходим - свет горит только во время нажатия кнопки).

Member 14165241

Я это понимаю. Когда я нажимаю и отпускаю кнопку, цвет меняется. Но я не понимаю, как я могу передать это значение в последовательный порт. Пожалуйста, помогите мне решить эту проблему.