Объяснение кода, найденного в интернете
я нашел следующий код онлайн, чтобы прочитать значение сенсорного датчика... у меня возникли трудности с пониманием того, как работает 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;
}
@sharkyenergy, 👍1
Обсуждение1 ответ
Лучший ответ:
Форма комментариев в блоге не является подходящим местом для публикации исходного кода, так как система управления контентом (здесь Wordpress) довольно часто производит некоторые деструктивные преобразования. Например, вот:
Serial.println(“БЛОКИРОВКА на 2 секунды: Нет быстро повторяющихся показаний”);
Wordpress постарался быть “полезным” и заменил ASCII-кавычки (") типографскими кавычками (“ и ”), что делает строку некомпилируемой.
Что же касается строки, о которой вы спрашиваете:
if ((touch_sensor_value (TOUCH_timeSeconds * 1000)))
скорее всего, в нем отсутствует знак "меньше, чем" ( Я не знаю, почему некоторые из этих знаков прошли через фильтр, может быть, это как-то связано с белым пространством вокруг них, но это чистая догадка.
Учитывая, что код был разрушительно искажен, ваши варианты заключаются либо в том, чтобы угадать из контекста, либо в том, чтобы оставить комментарий с просьбой о разъяснении.
Спасибо. < знак не имел бы большого смысла, так как "touch_sensor_value" содержит значение самого датчика, а часть в parentehsis-это время... должно быть, чего-то еще не хватает... Я постараюсь разобраться.. Спасибо!, @sharkyenergy
- Настройки ESP32. Одна ошибка возвращается, все остальные работают.
- Как переопределить автоматическое управление в приложении Blynk?
- Esp32 не подключается к Wi-Fi
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
- Как выбрать альтернативные контакты I2C на ESP32?
- Драйверы для чипа последовательного порта CH9102X
- Как преобразовать форматированный оператор print в строковую переменную?
- ESP32 - "Детектор Браунаута был активирован" при запуске Wi-Fi
Этот код вообще компилируется? между " touch_sensor_value
и
(TOUCH_timeSeconds * 1000)нет оператора. Таким образом, это было бы обработкой как вызов функции, но " touch_sensor_value
- это не функция, а переменная., @chrislСсылка на код?, @Edgar Bonet
@EdgarBonet https://microcontrollerslab.com/esp32-touch-sensor-button-example/ это ниже в комментариях..., @sharkyenergy
@christl это на самом деле то, что мне тоже интересно..., @sharkyenergy