Проблема с GButton и сенсорной кнопкой ttp223

KastonL

✩✩✩✩✩✩✩
14 Сен 2020
9
0
Здравствуйте, у меня возникла проблема. Где-то пол года назад я решил повторить проект Алекса огненная лента на адреске, потом решил немного дописать код для управления цветом и яркостью с помощью сенсорной кнопки ttp223. Всё было окей но потом возникли проблемы и скетч был утерян. Решил переписать и сейчас столкнулся с проблемой. При вызове isSingle(), true возвращалось только после двойного нажатия, для isDouble() нужно тройное нажатие и т.д. Когда загрузил пример Gbutton_demo, в мониторе порта постоянно выводилось :
Holding
Holding
Holding...
При использовании самого обычного кода для вывода значения кнопки всё работает правильно. Но при использовании GButton кнопка постоянно зажата. При использовании обычной кнопки проблема та же.
Надеюсь на вашу помощь!
 

Вложения

Roden

✩✩✩✩✩✩✩
19 Апр 2019
31
5
Кнопку к земле подключи, скорее всего ты подключил к 5 вольт
 

KastonL

✩✩✩✩✩✩✩
14 Сен 2020
9
0
@Roden, я пробовал подключать и к 5 вольт и к земле и в самой библиотеке всё перепробовал (LOW_PULL, HIGH_PULL)
Прошу обратить внимание что при подключении без использования GButton всё работает окей!

Если у кого-то есть более старая версия библиотеки, пожалуйста скиньте
 

Roden

✩✩✩✩✩✩✩
19 Апр 2019
31
5
Ты бы скетч показал и схему подключения, ты что-то делаешь не так
 

KastonL

✩✩✩✩✩✩✩
14 Сен 2020
9
0
@Roden, Скетч обычный из примера к библиотеке
C++:
// Пример использования библиотеки GyverButton, все возможности в одном скетче.

#define BTN_PIN 4                // кнопка подключена сюда (BTN_PIN --- КНОПКА --- GND)

#include "GyverButton.h"
GButton butt1(BTN_PIN, LOW_PULL, NORM_OPEN);

// Варианты инициализации:
// GButton btn;               // без привязки к пину (виртуальная кнопка) и без указания типа (по умолч. HIGH_PULL и NORM_OPEN)
// GButton btn(пин);          // с привязкой к пину и без указания типа (по умолч. HIGH_PULL и NORM_OPEN)
// GButton btn(пин, тип подключ.);    // с привязкой к пину и указанием типа подключения (HIGH_PULL / LOW_PULL) и без указания типа кнопки (по умолч. NORM_OPEN)
// GButton btn(пин, тип подключ., тип кнопки);      // с привязкой к пину и указанием типа подключения (HIGH_PULL / LOW_PULL) и типа кнопки (NORM_OPEN / NORM_CLOSE)
// GButton btn(BTN_NO_BTN_PIN, тип подключ., тип кнопки); // без привязки к пину и указанием типа подключения (HIGH_PULL / LOW_PULL) и типа кнопки (NORM_OPEN / NORM_CLOSE)

int value = 0;

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

  butt1.setDebounce(50);        // настройка антидребезга (по умолчанию 80 мс)
  butt1.setTimeout(300);        // настройка таймаута на удержание (по умолчанию 500 мс)
  butt1.setClickTimeout(600);   // настройка таймаута между кликами (по умолчанию 300 мс)

  // HIGH_PULL - кнопка подключена к GND, пин подтянут к VCC (BTN_PIN --- КНОПКА --- GND)
  // LOW_PULL  - кнопка подключена к VCC, пин подтянут к GND
  // по умолчанию стоит HIGH_PULL
  butt1.setType(HIGH_PULL);
  butt1.setTickMode(AUTO);

  // NORM_OPEN - нормально-разомкнутая кнопка
  // NORM_CLOSE - нормально-замкнутая кнопка
  // по умолчанию стоит NORM_OPEN
  butt1.setDirection(NORM_OPEN);
}

void loop() {  // обязательная функция отработки. Должна постоянно опрашиваться

  if (butt1.isClick()) Serial.println("Click");         // проверка на один клик
  if (butt1.isSingle()) Serial.println("Single");       // проверка на один клик
  if (butt1.isDouble()) Serial.println("Double");       // проверка на двойной клик
  if (butt1.isTriple()) Serial.println("Triple");       // проверка на тройной клик

  if (butt1.hasClicks())                                // проверка на наличие нажатий
    Serial.println(butt1.getClicks());                  // получить (и вывести) число нажатий

  if (butt1.isPress()) Serial.println("Press");         // нажатие на кнопку (+ дебаунс)
  if (butt1.isRelease()) Serial.println("Release");     // отпускание кнопки (+ дебаунс)
  if (butt1.isHold()) {                                    // если кнопка удерживается
    Serial.print("Holding ");                            // выводим пока удерживается
    Serial.println(butt1.getHoldClicks());                // можно вывести количество кликов перед удержанием!
  }
  if (butt1.isHolded()) Serial.println("Holding");        // проверка на удержание
  //if (butt1.state()) Serial.println("Hold");          // возвращает состояние кнопки

  if (butt1.isStep()) {                                 // если кнопка была удержана (это для инкремента)
    value++;                                            // увеличивать/уменьшать переменную value с шагом и интервалом
    Serial.println(value);                              // для примера выведем в порт
  }
}
 

KastonL

✩✩✩✩✩✩✩
14 Сен 2020
9
0
@Roden, Но при использовании этого скетча, всё нормально.
C++:
int val;

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
val = digitalRead(4);
Serial.println(val);
delay(50);
}
А если отдельно посмотреть приметы ?
Объясните пожалуйста что вы имеете ввиду??
 

Вложения

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

★★★★★★★
14 Авг 2019
4,263
1,302
Москва
А схему и фото подключения кнопки ?
Хотя каких только чудес не бывает.
Сегодня с Soni666 выясняли что за беда у него с шаговиком, и так пробовали и эдак. А все равно если делает 1000 шагов в одну сторону и 1000 обратно, то в нулевую точку не приходит. Шаговик работает громко и "нервно" - дергается. При этом точно такой же скетч у меня работает без нареканий. Вылечилось все... заменой ардуины. Вот что то с ней не то было и все.
 

KastonL

✩✩✩✩✩✩✩
14 Сен 2020
9
0
ну так не используй ее, если все и так работает
Ну как бы мне нужно не только одиночные нажатия отрабатывать, а я не настолько хороший кодер((

А схему и фото подключения кнопки ?
Хотя каких только чудес не бывает.
Сегодня с Soni666 выясняли что за беда у него с шаговиком, и так пробовали и эдак. А все равно если делает 1000 шагов в одну сторону и 1000 обратно, то в нулевую точку не приходит. Шаговик работает громко и "нервно" - дергается. При этом точно такой же скетч у меня работает без нареканий. Вылечилось все... заменой ардуины. Вот что то с ней не то было и все.
Ну я пробовал менять всё что только можно и кнопку и ардуинку
 
Изменено:

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

★★★★★★★
14 Авг 2019
4,263
1,302
Москва
Объясните пожалуйста что вы имеете ввиду??
Примеры из библиотеки. Уже проехали - на нем как раз и ошибка.
В вашем скетче, который работает, не вижу как определен пин, вход-выход, пулл ап или иначе.
 

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

★★★★★★★
14 Авг 2019
4,263
1,302
Москва
Ля... совсем забыл , что кнопка сенсорная :D Пардон, я не делал с ней библиотеку GBатон :) Там наверняка можно то же сделать, но нужно покопаться в настройках.

Но вопрос меня зацепил... полезу за кнопкой. Интересно блин!
 

KastonL

✩✩✩✩✩✩✩
14 Сен 2020
9
0
На сколько я помню Гайвер делал с этой кнопкой лампу, я поставил теже настройки кнопки но всё тщетно

Но вопрос меня зацепил... полезу за кнопкой. Интересно блин!
Надеюсь хоть вы чем нибудь сможете помочь, уже 5 день над ней сижу безрезультатно((
 

Roden

✩✩✩✩✩✩✩
19 Апр 2019
31
5
@Roden, Но при использовании этого скетча, всё нормально.
C++:
int val;

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
val = digitalRead(4);
Serial.println(val);
delay(50);
}
Если digitalRead возвращает 1 - значит ты кнопку подключил к 5 вольт.
Подключи её к GND
 

KastonL

✩✩✩✩✩✩✩
14 Сен 2020
9
0
Методом научного тыка все заработало при объявлении кнопки вот таким образом
GButton butt1(BTN_PIN, HIGH_PULL, NORM_CLOSE);
Спасибо ОГРОМНОЕ, на сколько я помню до этого тоже пробовал комбинацию HIGH_PULL и NORM_CLOSE ну да ладно, спасибо за уделённое время🙏🙏