0

Я хочу отправить данные в arduino mega 2560 до тех пор, пока нажимается кнопка, и когда эта кнопка будет отпущена, она перестанет отправлять информацию. Я использую onTouchListener с константами MotionEvent. Но когда я запускаю это на своем телефоне, я нажимаю кнопку, и он отправляет данные, хотя через некоторое время я его отпущу. Где я здесь не так?Отправляйте данные в arduino при нажатии кнопки

switch (v.getId()) { 

    case R.id.left1: // check what button is pressed 

     while(event.getAction() == MotionEvent.ACTION_DOWN) { 

      bt.sendData("1"); // while pressing the button it sends data 

     } 
     if(event.getAction() == MotionEvent.ACTION_UP) { 

      // when it stops, do nothing 

     } 

     break; 

    } 

    return true; 

ответ

-1

Вы должны установить флаг bt.sendData в false, когда кнопка отпущена, которая, кажется, отсутствует в вашем коде.

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

+0

Я не специалист, и поэтому я не мог понять вас очень хорошо. Что вы подразумеваете под флагом? И как я могу это достичь? – user3882221

+0

Вы правы в концепции «забыть закрыть краны», но аргументы в «bt.sendData» не имеют к этому никакого отношения, поскольку он вызывается в бесконечном цикле – Vasfed

+0

Я думаю, что Vasfed дал то же объяснение, используя кода, и кажется, что это будет работать как шарм – Pheonix

0

Ваша проблема в бесконечном цикле while(event.getAction() == MotionEvent.ACTION_DOWN), который вы начинаете с получения первого события.

OnTouchListener вызывается для каждого события, которое отправляется для просмотра, вниз и вверх - отдельные события, и событие не изменяется при обработке.

Чтобы решить вашу проблему - вам необходимо отправить данные из отдельного потока. Запустите его на ACTION_DOWN, а также установите флажок, который будет изменен на ACTION_UP, чтобы указать поток для выхода.

Смежные вопросы