Управление питанием на сенсорах TP223

Суть - есть Ардуино Уно к ней подключены три реле которые управляются сенсорными кнопками TP223 в режиме нажатия. По техзаданию кнопки должны перестать управлять реле при нажатии дольше 12 секунд. Но как мы не бились сенсор продолжает управлять реле даже в режиме отключения хотя щелчок по времени происходит. Мосфет тоже не помог. Посоветуйте вектор решения? Програмно возможно отключить данный сенсор?

Пожалуйста, покажите код, который вы используете, и схему схемы.

// Настройка пинов
#define SW1 2
#define SW2 3
#define SW3 4
#define D1 5
#define D2 6
#define D3 7
#define RL1 8
#define RL2 9
#define RL3 10
#define SENSOR_POWER_PIN 11 // Пин для управления питанием сенсоров через BC337

unsigned long sensorPressStartTime = 0; // Время начала нажатия
bool alarmMode = false;                // Флаг режима Alarm Mode
unsigned long alarmStartTime = 0;      // Время начала Alarm Mode

void setup() {
    // Настройка пинов для сенсоров (вход)
    pinMode(SW1, INPUT);
    pinMode(SW2, INPUT);
    pinMode(SW3, INPUT);

    // Настройка пинов для светодиодов и реле (выход)
    pinMode(D1, OUTPUT);
    pinMode(D2, OUTPUT);
    pinMode(D3, OUTPUT);
    pinMode(RL1, OUTPUT);
    pinMode(RL2, OUTPUT);
    pinMode(RL3, OUTPUT);

    // Настройка пина для управления питанием сенсоров
    pinMode(SENSOR_POWER_PIN, OUTPUT);
    digitalWrite(SENSOR_POWER_PIN, HIGH); // Включить питание сенсоров

    // Включение режима ожидания
    setSafeMode();
}

void loop() {
    // Если Alarm Mode активен, проверяем его длительность
    if (alarmMode) {
        if (millis() - alarmStartTime >= 6000) { // Alarm Mode длится 6 секунд
            alarmMode = false;                   // Выходим из Alarm Mode
            digitalWrite(SENSOR_POWER_PIN, HIGH); // Включаем питание сенсоров
            setSafeMode();
        }
        return; // Пока Alarm Mode активен, остальные действия пропускаются
    }

    // Чтение состояния сенсоров
    bool sw1State = digitalRead(SW1);
    bool sw2State = digitalRead(SW2);
    bool sw3State = digitalRead(SW3);

    // Если любая кнопка нажата
    if (sw1State || sw2State || sw3State) {
        // Если только что началось нажатие
        if (sensorPressStartTime == 0) {
            sensorPressStartTime = millis();
        }

        // Проверка длительности нажатия
        if (millis() - sensorPressStartTime > 12000) {
            activateAlarmMode(); // Активируем Alarm Mode после 12 секунд
            return;
        }

        // Управление реле и светодиодами в зависимости от сенсора
        if (sw1State) {
            activateRelay(D1, RL1);
            deactivateRelay(D2, RL2);
            deactivateRelay(D3, RL3);
        } else if (sw2State) {
            activateRelay(D2, RL2);
            deactivateRelay(D1, RL1);
            deactivateRelay(D3, RL3);
        } else if (sw3State) {
            activateRelay(D3, RL3);
            deactivateRelay(D1, RL1);
            deactivateRelay(D2, RL2);
        }
    } else {
        // Если кнопка отпущена
        sensorPressStartTime = 0; // Сбрасываем время нажатия
        setSafeMode();            // Возвращаемся в Safe Mode
    }
}

void setSafeMode() {
    // Включить все светодиоды, выключить реле
    digitalWrite(D1, HIGH);
    digitalWrite(D2, HIGH);
    digitalWrite(D3, HIGH);
    digitalWrite(RL1, LOW);
    digitalWrite(RL2, LOW);
    digitalWrite(RL3, LOW);
}

void activateAlarmMode() {
    alarmMode = true;                     // Устанавливаем флаг Alarm Mode
    alarmStartTime = millis();            // Запоминаем время начала Alarm Mode
    digitalWrite(SENSOR_POWER_PIN, LOW);  // Выключаем питание сенсоров
    digitalWrite(D1, LOW);                // Выключаем все светодиоды
    digitalWrite(D2, LOW);
    digitalWrite(D3, LOW);
    digitalWrite(RL1, LOW);               // Выключаем все реле
    digitalWrite(RL2, LOW);
    digitalWrite(RL3, LOW);
}

void activateRelay(int ledPin, int relayPin) {
    // Включить светодиод и реле
    digitalWrite(ledPin, HIGH);
    digitalWrite(relayPin, HIGH);
}

void deactivateRelay(int ledPin, int relayPin) {
    // Выключить светодиод и реле
    digitalWrite(ledPin, LOW);
    digitalWrite(relayPin, LOW);
}

Код вставил. Вчера коллега сказал что в сенсорах TP223 примитивная микруха и она не регулируется никак.

Вы также должны разместить электрическую схему.

Справочно

TP223B чип шестиногий

Куда этот return; помещает ваш код? Внутри loop() или в начале кода?

        // Проверка длительности нажатия
        if (millis() - sensorPressStartTime > 12000) {
            activateAlarmMode(); // Активируем Alarm Mode после 12 секунд
            return;
        }

Прерывает выполнение текущей итерации функции loop()

Он оставляет (if condition), но куда он возвращается? Начало loop()?