Как можно ограничить чувствительность емкостных сенсоров?

У меня есть классическая игровая площадка Adafruit, и сенсорные панели очень чувствительны. С расстояния сантиметра они срабатывают. Я был бы рад просто иметь регулярные входы или уменьшить чувствительность. Как я могу это сделать?

Чтобы уточнить, вот мой код:

//управление клавиатурой для TuxKart power Glove
#include <Adafruit_CircuitPlayground.h>
#include <Keyboard.h>
#include <Mouse.h>
// устанавливаем номера контактов для пяти кнопок:
const int Fire = 6;
const int Nitro = 9;
const int Eagle = 10;
const int _Esc = 12;

bool slideSwitch;

void setup() { // инициализируем входы кнопок:
  pinMode(Fire, INPUT_PULLUP);
  pinMode(Nitro, INPUT_PULLUP);
  pinMode(Eagle, INPUT_PULLUP);
  pinMode(_Esc, INPUT_PULLUP);

  Serial.begin(9600);
  // инициализируем управление мышью:
  //Мышь.начать();
  Keyboard.begin();
}

void loop() {
  if (!CircuitPlayground.slideSwitch()) {
    return;
  }

  // используйте кнопки для управления клавиатурой:
  if (!digitalRead(Fire) == HIGH) {
    Keyboard.write('KEY_SPACE');
    Serial.println("F");
  }
  if (!digitalRead(Nitro) == HIGH) {
    Keyboard.write('n');
    Serial.println("U");
  }
  if (!digitalRead(Eagle) == HIGH) {
    Keyboard.write(0xB2);
    Serial.println("N");
  }
  if (!digitalRead(_Esc) == HIGH) {
    Keyboard.write(0xB1);
    Serial.println("K");
  }
delay(200);
}

Этот код или любой другой, в котором не указана емкостная чувствительность к касанию, дает контакты с чрезвычайной чувствительностью. Я читал комментарии, в которых говорится, что MCU не поддерживает это изначально. Если бы это было правдой, как бы пины оставались чувствительными?

Мое решение состоит в том, чтобы установить настолько низкую чувствительность, чтобы ею можно было пренебречь. Если емкостное сенсорное распознавание не указано, почему я получаю эту функцию? Почему этот код дает мне емкостное сенсорное восприятие? В идеале, я бы каким-то образом отключил распознавание касания или чтобы контакты просто вели себя нормально, как любое другое устройство на базе Arduino, которое не имеет сенсорного восприятия. Но то, что я догадался (показано в коде), не работает. Если есть более явный способ указать, что контакты ввода-вывода должны действовать как обычные контакты, без емкостного сенсорного восприятия, я, безусловно, хотел бы знать.

, 👍0

Обсуждение

Пожалуйста, отредактируйте свой вопрос, чтобы включить номера деталей и ссылки на описания деталей. Также рекомендуется включить [минимальный, полный и проверяемый пример](http://stackoverflow.com/help/mcve) кода, чтобы показать, какие библиотеки вы используете для чтения датчиков., @James Waldby - jwpat7

Как вы делаете емкостное зондирование? Библиотеки? Код? Эта информация до сих пор отсутствует., @Edgar Bonet

Я не делаю этого в коде, аппаратное обеспечение делает это автоматически. Я так и не понял как его отключить. Я надеялся, что, не имея его в коде, функциональность не будет активной, но, похоже, все было наоборот., @j0h

Вы написали: «_Я этого не делаю, в коде аппаратное обеспечение делает это автоматически_». Неправильный. Эта плата основана на ATmega32u4, которая изначально не поддерживает распознавание касаний. Я _могу_ обнаружить касание с помощью соответствующего кода/библиотеки, но оно не может сделать это только аппаратным способом., @Edgar Bonet

Тогда как мне получить функциональность емкостного касания, если мой код ее не использует. Почему он просто не отключен? Я здесь для ответов, ребята, основывая свои вопросы на наблюдениях. Если бы я знал заранее, я бы не спрашивал., @j0h


2 ответа


0

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

Макрос:

#define CAP_THRESHOLD 300 // Порог для емкостного касания (выше = менее чувствительно).

Находится здесь: https://github.com/adafruit/Adafruit_CircuitPlayground/s search ?utf8=%E2%9C%93&q=CAP_THRESHOLD&type=

Я читаю больше и пытаюсь найти библиотеки для емкостного сенсорного экрана. Может быть гораздо лучшее решение, но на данный момент определение CAP_THRESHOLD работает достаточно хорошо.

,

1

digitalRead(pin) — это неправильный способ чтения емкостных сенсорных вводов.

В файле из примера, на который вы ссылаетесь в ваш ответ, чтение выполняется путем вызова CircuitPlayground.readCap(pin, num_samples), а затем возвращаемое значение сравнивается с пороговым значением.

const uint16_t TOUCH_THRESHOLD = 300;

...

if (CircuitPlayground.readCap(Fire) >= TOUCH_THRESHOLD) {
   Keyboard.write(KEY_SPACE);
   Serial.println('F');
}
...

Вы можете изменить чувствительность, изменив TOUCH_THRESHOLD. Вы также можете добавить и изменить второй аргумент, чтобы изменить количество выборок.

,