#2 Re: Програмування Arduino » Как зациклить выдачу сообщения в serial порт » 2020-10-27 18:54:57

Да, но как запустить серию постоянно повторяющихся  "Waiting" с периодичностью 500мс по короткому клику? По длинному нажатию серию я уже запускал по инструкции библиотеки, а с ONECLICK не знаю как запустить серию повторений.

#3 Re: Програмування Arduino » Как зациклить выдачу сообщения в serial порт » 2020-10-27 18:30:35

Та не, дружище, с LONGCLICK я уже разобрался и буду его применять для других функций, а теперь мне надо написать код, который по КОРОТКОМУ нажатию на кнопку должен выдать сначала Serial.println("Ready"); , а потом запустить СЕРИЮ из одинаковых Serial.println("Waiting..."); с периодичностью 500мс, эту серию чтобы можно было остановить ВТОРОЙ кнопкой. Я уже понял, что эта библиотека не способна выдавать серию по короткому нажатию, только через длинное нажатие. Поэтому надо делать свой код запуска серии, а с этим у меня проблемы))

#4 Re: Програмування Arduino » Как зациклить выдачу сообщения в serial порт » 2020-10-27 15:58:22

Не получается, попробовал сделал так

case BTN_DOWN:
  Serial.println("Ready");
  case BTN_ONECLICK:
  Serial.println("Waiting...");

Но серия при этом не запускается, а только дублируется Waiting..., вот так:

Ready
Waiting...
Waiting...

#include <shButton.h> // https://github.com/VAleSh-Soft/shButton

#define button1 5
#define button2 4

shButton btn1(button1);
shButton btn2(button2);

void setup()
{
  Serial.begin(115200);
  btn1.setLongClickMode(LCM_CLICKSERIES);
  btn1.setVirtualClickOn(true);
  
}

void loop()
{
  switch (btn1.getButtonState())
  {
  case BTN_DOWN:
  Serial.println("Ready");
  case BTN_ONECLICK:
  Serial.println("Waiting...");
  break;
  } 
       
  switch (btn2.getButtonState())
  {
  case BTN_DOWN:
  Serial.println("GOOD");
  break;
   }
}

Чет никак не могу придумать как настроить ONECLICK на выдачу серии как при LONGCLICK и выключить эту серию нажатием другой кнопки.

#5 Re: Програмування Arduino » Как зациклить выдачу сообщения в serial порт » 2020-10-27 14:43:26

Спасибо, все получилось и от delay избавился. Но не могу придумать как решить другую задачу - Короткое нажатие кнопки - выдает 1 раз Serial.println("Ready"); и запускается серия Serial.println("Waiting..."); которая должна продолжаться пока не нажать кликом другую кнопку. Чет в библиотеке я не нашел запуск серии по короткому клику.

#6 Re: Програмування Arduino » Как зациклить выдачу сообщения в serial порт » 2020-10-27 10:29:37

г0сть пише:

Для начала покажите полный код

Так это и есть полный код, я только не показал первую строку адреса библиотеки #include <shButton.h> // https://github.com/VAleSh-Soft/shButton

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

Попробовал сейчас обернуть в while (digitalRead(button1) == LOW) - получилось, при нажатой кнопке выдает каждую секунду "Waiting" но вылезла другая проблема - мне понадобилось чтобы при нажатой кнопке 1 раз  выдало сообщение "Ready", а потом постоянно каждую секунду "Waiting", но при отпускании кнопки сразу выдает поток из 30-40 сообщений "Ready" и только потом  "Good" , а надо чтобы при отпускании кнопки просто переставало выдавать каждую секунду "Waiting" и сразу показало сообщение "Good".

#include <shButton.h> // https://github.com/VAleSh-Soft/shButton

#define button1 5

shButton btn1(button1);

void setup()
{
  Serial.begin(115200);
}

void loop()
{
  switch (btn1.getButtonState())
  {
    case BTN_DOWN:
    Serial.println("Ready");
    while (digitalRead(button1) == LOW) {
    Serial.println("Waiting...");
    delay(1000);
     }
     break;
    case BTN_UP:
    Serial.println("Good!");
     break;  
   }
}

может надо правильно условие задать для while, я просто не знаю как.
Понятное дело, что эти сообщения чисто для примера и проверки кода, в конечном коде будут команды для управления другим устройством по serial порту. Просто мне сейчас нужно отладить функциональные элементы кода. Второй раз в жизни леплю скетч и ничего пока не знаю, учусь на ходу.

#7 Програмування Arduino » Как зациклить выдачу сообщения в serial порт » 2020-10-26 21:37:58

Sender
відповідей: 12

Товарищи, может кто подскажет, только начинаю осваивать азы, написал скетч чтобы при нажатии кнопки в порт выдавало сообщение Waiting... , а при отпускании Good!, так вот не получается сделать так, чтобы при нажатой кнопке сообщение Waiting... постоянно выдавалось каждую секунду, а при отпускании кнопки прекращало и 1 раз выдавало Good!. Пытался заворачивать Serial.println("Waiting..."); в for, но не работает так как надо.

#define button1 5

shButton btn1(button1);

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  switch (btn1.getButtonState())
  {
    case BTN_DOWN:
    Serial.println("Waiting...");
    break;
    
    case BTN_UP:
    Serial.println("Good!");
    break;
   }
}

Підвал форуму