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

**URL:** <https://forum.arduino.cc/t/tp223/1345579>\
**Category:** Русский\
**Created:** [January 22, 2025, 10:22am UTC](https://forum.arduino.cc/t/tp223/1345579 "2025-01-22T10:22:34Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![sonic\_554](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/sonic_554/32/1178874_2.png) [@sonic\_554](https://forum.arduino.cc/u/sonic_554)\
**Post date:** [January 22, 2025, 10:22am UTC](https://forum.arduino.cc/t/tp223/1345579/1 "2025-01-22T10:22:34Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![xfpd](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/xfpd/32/1120236_2.png) [@xfpd](https://forum.arduino.cc/u/xfpd)\
**Post date:** [January 22, 2025, 5:20pm UTC](https://forum.arduino.cc/t/tp223/1345579/2 "2025-01-22T17:20:28Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![sonic\_554](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/sonic_554/32/1178874_2.png) [@sonic\_554](https://forum.arduino.cc/u/sonic_554)\
**Post date:** [January 23, 2025, 5:12am UTC](https://forum.arduino.cc/t/tp223/1345579/3 "2025-01-23T05:12:24Z")

</div>

```arduino
// Настройка пинов
#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);
}

```

---

<div class="post-metadata">

**Author:** ![sonic\_554](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/sonic_554/32/1178874_2.png) [@sonic\_554](https://forum.arduino.cc/u/sonic_554)\
**Post date:** [January 23, 2025, 5:15am UTC](https://forum.arduino.cc/t/tp223/1345579/4 "2025-01-23T05:15:06Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![xfpd](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/xfpd/32/1120236_2.png) [@xfpd](https://forum.arduino.cc/u/xfpd)\
**Post date:** [January 23, 2025, 6:00am UTC](https://forum.arduino.cc/t/tp223/1345579/5 "2025-01-23T06:00:52Z")

</div>

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

> [@sonic\_554](#):
>
> TP223

Справочно

> **[TTP223.pdf](https://files.seeedstudio.com/wiki/Grove-Touch_Sensor/res/TTP223.pdf)**
>
> 280.73 KB

---

<div class="post-metadata">

**Author:** ![sonic\_554](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/sonic_554/32/1178874_2.png) [@sonic\_554](https://forum.arduino.cc/u/sonic_554)\
**Post date:** [January 23, 2025, 6:23am UTC](https://forum.arduino.cc/t/tp223/1345579/6 "2025-01-23T06:23:13Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![sonic\_554](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/sonic_554/32/1178874_2.png) [@sonic\_554](https://forum.arduino.cc/u/sonic_554)\
**Post date:** [January 23, 2025, 6:39am UTC](https://forum.arduino.cc/t/tp223/1345579/7 "2025-01-23T06:39:56Z")

</div>

![WhatsApp Image 2025-01-23 at 09.39.16](https://europe1.discourse-cdn.com/arduino/original/4X/6/b/b/6bb742095bf6b87f582508fcd566193c06181cdb.jpeg)

---

<div class="post-metadata">

**Author:** ![xfpd](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/xfpd/32/1120236_2.png) [@xfpd](https://forum.arduino.cc/u/xfpd)\
**Post date:** [January 23, 2025, 2:32pm UTC](https://forum.arduino.cc/t/tp223/1345579/8 "2025-01-23T14:32:14Z")

</div>

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

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

```

---

<div class="post-metadata">

**Author:** ![sonic\_554](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/sonic_554/32/1178874_2.png) [@sonic\_554](https://forum.arduino.cc/u/sonic_554)\
**Post date:** [January 23, 2025, 8:05pm UTC](https://forum.arduino.cc/t/tp223/1345579/9 "2025-01-23T20:05:02Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![xfpd](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/xfpd/32/1120236_2.png) [@xfpd](https://forum.arduino.cc/u/xfpd)\
**Post date:** [January 23, 2025, 9:01pm UTC](https://forum.arduino.cc/t/tp223/1345579/10 "2025-01-23T21:01:31Z")

</div>

> [@sonic\_554](#):
>
> loop()

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

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [July 22, 2025, 9:02pm UTC](https://forum.arduino.cc/t/tp223/1345579/11 "2025-07-22T21:02:25Z")

</div>

Closed on July 22, 2025, 9:02pm UTC

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.
