TTP223 высокая чувствительность

pavelkq
Offline
Зарегистрирован: 23.10.2015

Купил такие вот китайские кнопочки, собрал схемку, написал программку. Происходят "чудеса". 

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

2. Если мы находимся в бесконечном цикле ожидания нажатия кнопки:

while (!digitalRead(lamp1Btn) && !digitalRead(lamp2Btn)) delay(100);

, то все кнопки работают нормально (не считая проблемы №1). Причём это касается не только этих двух опрашиваемых кнопок, но и других двух (это видно по светодиодам на самих кнопках). Но когда программа опрашивает кнопки другим способом:

void loop()
{
  for (k = 14; k <= 17; k++) {
    if (digitalRead(k)) { // узнаём состояние кнопок
      Serial.print("Key ");
      Serial.println(k); //выводик номер пина нажатой кнопки
      switch (k) {
        case jaw1Btn: //выполняется, когда нажата кнопка ящика 1
          moto(1);
          break;
        case jaw2Btn: //выполняется, когда нажата кнопка ящика 2
          moto(0);
          break;
        case lamp1Btn: //выполняется, когда нажата кнопка ночника 1
          lamp(1);
          break;
        case lamp2Btn: //выполняется, когда нажата кнопка ночника 2
          lamp(0);
          break;
      }//switch
    } // end if
  } // end for
} // end void

, происходит "залипание" кнопок. Пишу простейший код по срабатыванию кнопки "jaw1Btn":

void moto(bool m)
{
  delay(5000);
  Serial.print("Motor ");
  Serial.print(m);
  Serial.println(" stop.");
  Serial.println("Waiting...");
} // end void

На этом месте светодиод на кнопке продолжает гореть даже если я на 2 метра ухожу от схемы. Время "залипания" разное. Доходит даже до 10 секунд. В чём может быть проблема?

pavelkq
Offline
Зарегистрирован: 23.10.2015

Переписал опрос кнопок примитивно до предела, и всё равно "залипают"((

void loop()
{
    if (digitalRead(17)) moto(1);
    if (digitalRead(14)) moto(0);
    if (digitalRead(15)) lamp(1);
    if (digitalRead(16)) lamp(0);
} // end void

 

pavelkq
Offline
Зарегистрирован: 23.10.2015

Обнаружилась совсем странная штука. У меня используются модули управления двигателями L298N. Их 2 штуки: один используется прямо для двигателей, а второй - для светодиодных светильников и летны. 

Пишу простой скетч:

void setup()
{
    pinMode(17, INPUT);
    pinMode(13, OUTPUT); // 1 контакт L298N управления светодиодной лентой
}
void loop()
{
  if (digialRead(17)) digitalWrite(13,1);
  else digitalWrite(13,0);
}

В итоге, кнопка залипает (под нагрузкой). Если же инветрировать нажатие

(if (!digitalRead...))

, то не залипает(без нагрузки). Пробовал подключать модуль через резистор, не помогло. Причём, если саму ленту отключить от модуля управления, а сам модуль оставить подключенным, то всё работает хорошо. В чём проблема?

П.С. Питание модулей - от источника 12 воль. Питание кнопок от Ардуино, через USB. Минус, разумеется, общий. Пробовал запитать Ардуинку и кнопки от модулей, ничего не меняется.

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

как вы этого добились? Они дальше 3 мм не срабатывают, а мне наоборот - нужно срабатывание на 16-18 мм.

Какое расстояние проводов от кнопки до Arduino?

pavelkq
Offline
Зарегистрирован: 23.10.2015

Они прямо из пакета сразу так и работали. Сначала собрал на коленках. Припаял к контакту кнопки небольшой проводок (4 см в длину). Эксперементировал с большими кнопками. Обматал этот проводок вокруг ножниц (без электирческого контакта). Срабатывание было надёжное при касании ножниц. Сейчас на этом же провдке припаял красивую пуговицу (5мм в диаметре), которая и выполняет роль кнопки. Самая дальняя кнопка (и самая глючная) где-то 50 см до Arduino. Я уже думал, что блок питания вносит помехи, пробовал его убрать. Не помогло. Пробовал зажигать светодиодную ленту прямо от блока питания, думая, что в ней глюк. Нет, при таком включении "залипания" нет. Сегодня буду разбирать всю схему и прокаладывать проводку заново. Экранировать вроде нечего, везде постоянный ток. Попробую еще просто заменить глючную (дальнюю) кнопку (может заводской брак).

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

50 см - это очень много, у меня уже на 25 начинали самопроизвольно нажиматься. И тут вина не кнопки, а входы Arduino очень чувствительные.

pavelkq
Offline
Зарегистрирован: 23.10.2015

Прочитал вашу тему. У меня металлических частей вообще нет. Только блок питания и провода. Остальное всё деревянное. (Кстати, как вы решили проблему?) Расстояние от кнопки до TTP223 у меня не более 3-4 см. А вот от TTP223 до Arduino уже 50 см. Это может быть проблемой?

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

причину у себя удалось локализовать - виноват был именно длинный шлейф от модуля кнопок до контроллера. Сам порт Arduino ловил наводки, даже с подтяжками. Укоротили - все заработало как часики.