# Delay
Opóźnia zmiany stanu wyjścia w oparciu o czasy opóźnienia włączenia i wyłączenia
Delay
I
O
# Wejścia
| ID | Skrót | Nazwa | Typ | Domyślnie | Opis |
|---|---|---|---|---|---|
input | I | Wejście | BOOLEAN | false | Sygnał wejściowy wyzwalający opóźnione wyjście. |
# Wyjścia
| ID | Skrót | Nazwa | Typ | Domyślnie | Opis |
|---|---|---|---|---|---|
output | O | Wyjście | BOOLEAN | false | Opóźniony sygnał wyjściowy. |
# Konfiguracja
| ID | Nazwa | Typ | Domyślnie | Jednostka | Opis |
|---|---|---|---|---|---|
don | Opóźnienie włączenia | NUMBER | 1 | s | Czas opóźnienia przed włączeniem wyjścia Szczegóły: ≥ 0 |
doff | Opóźnienie wyłączenia | NUMBER | 1 | s | Czas opóźnienia przed wyłączeniem wyjścia Szczegóły: ≥ 0 |
# Stan
| ID | Nazwa | Typ | Domyślnie | Jednostka | Opis |
|---|---|---|---|---|---|
last_input_state | Ostatni stan wejścia | BOOLEAN | false | Przechowuje poprzedni stan wejścia |
# Kod źródłowy
Pokaż kod Volang
channel = input::channel()
value = input::value()
don_ms = math::round(config::get("don") * 1000)
doff_ms = math::round(config::get("doff") * 1000)
// Handle callback execution
extern fn onCallback(value) {
if (value == 1) {
// Delay on callback - set output to true
output::set("output", true)
return
}
if (value == 2) {
// Delay off callback - set output to false
output::set("output", false)
return
}
}
// Handle input changes - detect edges
if (channel == "input") {
last_input_state = state::get("last_input_state")
// Only react to state changes (edges)
if (value != last_input_state) {
state::set("last_input_state", value)
if (value) {
// Input went high - schedule delay on
callback::clear()
if (don_ms > 0) {
callback::set(don_ms, "onCallback", 1)
} else {
// If delay is 0, set output immediately
output::set("output", true)
}
} else {
// Input went low - schedule delay off
callback::clear()
if (doff_ms > 0) {
callback::set(doff_ms, "onCallback", 2)
} else {
// If delay is 0, set output immediately
output::set("output", false)
}
}
}
return
}
