Arduino вопросы про кнопки и можно ли заменить энкодер потенциометром?

Старик Похабыч

★★★★★★★
14 Авг 2019
4,188
1,280
Москва
Я вот 1-ый раз вижу это дело все.. Примеры посмотреть не судьба ? 1 минута и вот ответ:
C++:
   bleKeyboard.press(KEY_LEFT_CTRL);
    bleKeyboard.press(KEY_LEFT_ALT);
    bleKeyboard.press(KEY_DELETE);
    delay(100);
    bleKeyboard.releaseAll();
 

ambilight

✩✩✩✩✩✩✩
12 Июл 2021
31
0
@Старик Похабыч,
Это я ещё неделю назад находил. Только сейчас пришло в голову поменять bluetooth адаптер на orico bta-508 и esp32 сразу нормально подключилось и монитор порта открывается, но с моими кнопками не работает. Переключаю, подсветка слабо горит, но команда не срабатывает и надпись в монитор не выводится.
C++:
#include <BleKeyboard.h>
BleKeyboard bleKeyboard("ZoomBox","Ph");
boolean connected;
#define BTN1 15
#define NUMBUTTONS 1

int buttons[NUMBUTTONS] = {BTN1};
unsigned long btntime[NUMBUTTONS];
boolean btnpress[NUMBUTTONS];

char line[80];
unsigned long t;
int n;

void setup() {

  Serial.begin(115200);
  Serial.write("Starting...\n");
 
  for (int i = 0; i < NUMBUTTONS; i++) {
    pinMode(buttons[i], INPUT_PULLUP);
    btntime[i] = 0;
    btnpress[i] = false;
  }
  bleKeyboard.begin();
  connected = false;
}

void loop() {
if (!connected) {
    connected = true;
    Serial.print("connected");
  }
  for (int i = 0; i < NUMBUTTONS; i++) {
    if (!digitalRead(buttons[i]))
      {
      if (btntime[i] == 0) {
        btntime[i] = millis();
      }
      else {
        if (millis() - btntime[i] > 20 && !btnpress[i]) {
          btnpress[i] = true;
          Serial.println(i);
          Serial.println("hello");
          switch (i) {

          case 0:
            Serial.println("Test");
            bleKeyboard.press(KEY_LEFT_CTRL);
            bleKeyboard.press(KEY_LEFT_ALT);
            bleKeyboard.press(KEY_DELETE);
            delay(100);
            bleKeyboard.releaseAll();
            break;

          }
        }
      }
    }
    else {
      if (btntime[i] != 0) {
        btntime[i] = 0;
        btnpress[i] = false;
      }
    }
  }
}
 

bort707

★★★★★★✩
21 Сен 2020
2,895
860
Как мне сделать так, чтобы при нажатии на кнопку ОДИН раз срабатывала команда, в моём случае ctrl+alt+delete?
вам надо для начала разобраться, тот ли пин вы выбрали.
У ЕСП есть такая неприятная особенность, что цифры. написанные на плате рядом с выходами - часто не имеют ничего общего с номерами пинов, которые вы указываете в коде скетча.

И кнопку вы вообще выбрали не самую удачную. Судя по фото, это не кнопка, а переключатель. Нет, на этом переключателе тоже можно сделать то, что вы хотите - но только ни один из готовых примеров не подойдет, придется выдумывать самому.
Главный принцип - читаете состояние пина, где он подключен - и сравниваете с предыдущим. Если состояние изменилось - значит переключатель щелкнули. Делаете ваш ctrl+alt+delete и запоминаете новое состояние пина. И так по кругу.
 

bort707

★★★★★★✩
21 Сен 2020
2,895
860
но с моими кнопками не работает.
конечно не работает. У вас вообще не кнопка.
Вам ни один пример из инета для кнопок не подойдет

Вообще, если это ваш первый проект - стоило ли его намеренно усложнять, используя неподходящие кнопки?
Неужели "в европе" нельзя найти нормальные, так называемые "тактовые" - то есть те, что замыкаются только на время нажатия?
 
Изменено:

ambilight

✩✩✩✩✩✩✩
12 Июл 2021
31
0
@Старик Похабыч,Честно тоже не понял.Сначала false потом, если false, то true....
@bort707, @bort707, Спасибо, но я решил не мучить себя и вас, просто взял новый bluetooth адаптер, тактовые кнопки и сразу всё заработало.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,188
1,280
Москва
Да вот в том то и дело, что это ничего не решает. В примере там немного по другому. Там эта переменная является полем объекта клавиатуры.
 

ambilight

✩✩✩✩✩✩✩
12 Июл 2021
31
0
А как лучше реализовать программу, чтобы любой пользователь мог легко перепрограммировать кнопки?
Чтобы зашёл, выбрал кнопку, нажал сочетание клавиш, например, ctrl+shift+e и всё?
Веб страницу создавать и перепрошивать esp32 по wifi? или можно прошить по bluetooth и GUI сделать на processing?