Объяснение кода, найденного в интернете

я нашел следующий код онлайн, чтобы прочитать значение сенсорного датчика... у меня возникли трудности с пониманием того, как работает 2-секундный тайм-аут на отмеченной линии.. if ((touch_sensor_value (TOUCH_timeSeconds * 1000))) {

touch_sensor_value-это значение, считываемое с сенсорного ввода.. и все остальное?? я не вижу никакого сравнения с чем-либо в скобках, я не могу понять, как работает это условие if...

#define TOUCH_timeSeconds 2
uint64_t now = millis();
unsigned long lastTrigger_TOUCH = 0;
bool startTimer_TOUCH = false;
bool buttonIsPressed = false;

int touch_sensor_value = 0;
//Mux control pins
int s0 = 26;
int s1 = 27;
int s2 = 14;
int s3 = 12;
//State array
int currentState ;
//Mux in “SIG” pin
int SIG_pin = 33; //is touch sensor
void setup()
{
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);

digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);

Serial.begin(115200);
Serial.println(“Multiplexing 1 Touch sensor ESP32 using CD7HC4067 MUX”);

}

void loop() {

for (int i = 0; i < 16; i ++) {
currentState = readMux(i);
touch_sensor_value = touchRead(T9);

if ((touch_sensor_value (TOUCH_timeSeconds * 1000))) {    <-----!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Serial.println(“2 Second LOCK OUT: No rapidly repeating readings”);
buttonIsPressed = false;
startTimer_TOUCH = false;
return;
}

//

}

// delay(1000);
}

int readMux(int channel) {
int controlPin[] = {s0, s1, s2, s3};

int muxChannel[16][4] = {
{0, 0, 0, 0}, //channel 0
{1, 0, 0, 0}, //channel 1
{0, 1, 0, 0}, //channel 2
{1, 1, 0, 0}, //channel 3
{0, 0, 1, 0}, //channel 4
{1, 0, 1, 0}, //channel 5
{0, 1, 1, 0}, //channel 6
{1, 1, 1, 0}, //channel 7
{0, 0, 0, 1}, //channel 8
{1, 0, 0, 1}, //channel 9
{0, 1, 0, 1}, //channel 10
{1, 1, 0, 1}, //channel 11
{0, 0, 1, 1}, //channel 12
{1, 0, 1, 1}, //channel 13
{0, 1, 1, 1}, //channel 14
{1, 1, 1, 1} //channel 15
};

//loop through the 4 sig
for (int i = 0; i < 4; i ++) {
digitalWrite(controlPin[i], muxChannel[channel][i]);
}

//read the value at the SIG pin
int val = analogRead(SIG_pin);

//return the value
return val;
}

, 👍1

Обсуждение

Этот код вообще компилируется? между " touch_sensor_value и (TOUCH_timeSeconds * 1000)нет оператора. Таким образом, это было бы обработкой как вызов функции, но " touch_sensor_value - это не функция, а переменная., @chrisl

Ссылка на код?, @Edgar Bonet

@EdgarBonet https://microcontrollerslab.com/esp32-touch-sensor-button-example/ это ниже в комментариях..., @sharkyenergy

@christl это на самом деле то, что мне тоже интересно..., @sharkyenergy


1 ответ


Лучший ответ:

1

Форма комментариев в блоге не является подходящим местом для публикации исходного кода, так как система управления контентом (здесь Wordpress) довольно часто производит некоторые деструктивные преобразования. Например, вот:

Serial.println(“БЛОКИРОВКА на 2 секунды: Нет быстро повторяющихся показаний”);

Wordpress постарался быть “полезным” и заменил ASCII-кавычки (") типографскими кавычками (“ и ”), что делает строку некомпилируемой.

Что же касается строки, о которой вы спрашиваете:

if ((touch_sensor_value  (TOUCH_timeSeconds * 1000)))

скорее всего, в нем отсутствует знак "меньше, чем" ( Я не знаю, почему некоторые из этих знаков прошли через фильтр, может быть, это как-то связано с белым пространством вокруг них, но это чистая догадка.

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

,

Спасибо. < знак не имел бы большого смысла, так как "touch_sensor_value" содержит значение самого датчика, а часть в parentehsis-это время... должно быть, чего-то еще не хватает... Я постараюсь разобраться.. Спасибо!, @sharkyenergy