Как можно ограничить чувствительность емкостных сенсоров?
У меня есть классическая игровая площадка 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, которое не имеет сенсорного восприятия. Но то, что я догадался (показано в коде), не работает. Если есть более явный способ указать, что контакты ввода-вывода должны действовать как обычные контакты, без емкостного сенсорного восприятия, я, безусловно, хотел бы знать.
@j0h, 👍0
Обсуждение2 ответа
Возможно, это не лучший способ найти решение, но я копался в репозитории Adafruit_CircuitPalyground и нашел макрос для емкостной сенсорной чувствительности.
Макрос:
#define CAP_THRESHOLD 300 // Порог для емкостного касания (выше = менее чувствительно).
Находится здесь: https://github.com/adafruit/Adafruit_CircuitPlayground/s search ?utf8=%E2%9C%93&q=CAP_THRESHOLD&type=
Я читаю больше и пытаюсь найти библиотеки для емкостного сенсорного экрана. Может быть гораздо лучшее решение, но на данный момент определение CAP_THRESHOLD работает достаточно хорошо.
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
. Вы также можете добавить и изменить второй аргумент, чтобы изменить количество выборок.
- Сколько датчиков может поддерживать один модуль Arduino?
- Какой тип разъема использует система GROVE?
- Как получить ненулевой выход из HX711 и ячейки загрузки?
- Определение относительно точной скорости с помощью ИДУ
- Использовать выводы PWM в качестве обычных цифровых входов/выходов?
- Получить значения акселерометра от BNO055 с помощью Единой библиотеки датчиков adafruit
- Невозможно использовать аналоговые контакты в качестве цифровых входов
- Почему контакт должен быть установлен как вход, если он может считывать ввод, когда он установлен как выход?
Пожалуйста, отредактируйте свой вопрос, чтобы включить номера деталей и ссылки на описания деталей. Также рекомендуется включить [минимальный, полный и проверяемый пример](http://stackoverflow.com/help/mcve) кода, чтобы показать, какие библиотеки вы используете для чтения датчиков., @James Waldby - jwpat7
Как вы делаете емкостное зондирование? Библиотеки? Код? Эта информация до сих пор отсутствует., @Edgar Bonet
Я не делаю этого в коде, аппаратное обеспечение делает это автоматически. Я так и не понял как его отключить. Я надеялся, что, не имея его в коде, функциональность не будет активной, но, похоже, все было наоборот., @j0h
Вы написали: «_Я этого не делаю, в коде аппаратное обеспечение делает это автоматически_». Неправильный. Эта плата основана на ATmega32u4, которая изначально не поддерживает распознавание касаний. Я _могу_ обнаружить касание с помощью соответствующего кода/библиотеки, но оно не может сделать это только аппаратным способом., @Edgar Bonet
Тогда как мне получить функциональность емкостного касания, если мой код ее не использует. Почему он просто не отключен? Я здесь для ответов, ребята, основывая свои вопросы на наблюдениях. Если бы я знал заранее, я бы не спрашивал., @j0h