Сенсорный датчик и потенциометр - Нужна помощь

Я использую Arduino Nano с емкостным сенсорным датчиком и потенциометром. Я пытаюсь заставить свой код различать три разных состояния программы.

  • Один из них-это когда мой сенсорный датчик НЕ трогают.
  • Два-это когда к моему сенсорному датчику прикасаются.
  • А три - это когда прикасаются к моему сенсорному датчику И одновременно перемещают потенциометр.

У меня возникают проблемы со вторым состоянием программы, когда я просто касаюсь фейдера, но не двигаю потенциометр. Состояние программы 1 отлично работает, но состояние программы 3 активируется даже тогда, когда данные с потенциометра не поступают.

Вот код. А идеи?

#include <CapacitiveSensor.h>
#define rxPin 4
#define txPin 1

const byte touchSend = 2;
const byte touchReceive = 7;

byte minimumCp = 200; // Поднять, если фейдер слишком чувствителен (0-16383)

bool touched = false; //Трогается ли фейдер в данный момент?

CapacitiveSensor touchSensor = CapacitiveSensor(touchReceive, touchSend);

void setup() {
  touchSensor.set_CS_AutocaL_Millis(0xFFFFFFFF);
  pinMode(rxPin, INPUT );
  pinMode(txPin, OUTPUT); 
  Serial.begin(57600);
}
void loop() {
  int faderPos = analogRead(A7);
  int lastfaderValue;
  int totalCp =  touchSensor.capacitiveSensor(30);
  if (totalCp <= minimumCp) {  // Не трогать фейдер
      touched = false;
      Serial.println("Not Touching Fader"); 
      delay(15);}
  if ((faderPos == lastfaderValue) && (totalCp > minimumCp)) { // Касание фейдера
      touched = true; 
      Serial.println("Touching Fader, NOT Moving"); 
      delay(15);}
  if ((faderPos != lastfaderValue) && (totalCp > minimumCp)) { //Касание фейдера и перемещение
      touched = true; 
      Serial.println("Touching Fader, Moving"); 
      delay(15);}
  lastfaderValue = faderPos; }

, 👍2

Обсуждение

Ваше lastfaderValue всегда равно faderPos., @hcheung

Каждый раз, когда вы вводите "loop", вы сравниваете входные данные банка с произвольным значением, которое вы считаете последним значением банка, но поскольку оно локально для " loop`, это не так. Возможно, вы не предполагали, что это будет локальная переменная. Я бы добавил, что вам, вероятно, также понадобится минимальная дельта банка, так как одновременное чтение может не сообщать одно и то же значение, даже если оно не перемещается., @Dave Newton


1 ответ


2

Я все понял.

У меня было целое число lastfaderValue не в том месте. Он работает, когда я помещаю его в начало кода (перед настройкой).

Я также добавил допуск, так что потенциометр все еще может слегка колебаться, когда я к нему не прикасаюсь.

Теперь работает хорошо.

,