# Sequencer
Blok logiczny reprezentujący sekwencję
Sequencer
Fwd
Bwd
Rst
Off
O1
O2
O3
O4
O5
O6
O7
O8
# Wejścia
| ID | Skrót | Nazwa | Typ | Domyślnie | Opis |
|---|---|---|---|---|---|
forward | Fwd | Do przodu | BOOLEAN | false | |
backward | Bwd | Do tyłu | BOOLEAN | false | |
reset | Rst | Resetuj | BOOLEAN | false |
# Wyjścia
| ID | Skrót | Nazwa | Typ | Domyślnie | Opis |
|---|---|---|---|---|---|
off | Off | Wyłączony | BOOLEAN | true | |
o1 | O1 | Wyjście #1 | BOOLEAN | false | |
o2 | O2 | Wyjście #2 | BOOLEAN | false | |
o3 | O3 | Wyjście #3 | BOOLEAN | false | |
o4 | O4 | Wyjście #4 | BOOLEAN | false | |
o5 | O5 | Wyjście #5 | BOOLEAN | false | |
o6 | O6 | Wyjście #6 | BOOLEAN | false | |
o7 | O7 | Wyjście #7 | BOOLEAN | false | |
o8 | O8 | Wyjście #8 | BOOLEAN | false |
# Konfiguracja
| ID | Nazwa | Typ | Domyślnie | Jednostka | Opis |
|---|---|---|---|---|---|
max_index | Maksymalny indeks | NUMBER | 8 |
# Stan
| ID | Nazwa | Typ | Domyślnie | Jednostka | Opis |
|---|---|---|---|---|---|
sequence_index | Indeks sekwencji | NUMBER | 0 |
# Kod źródłowy
Pokaż kod Volang
outputs_count = 8
value = input::value()
// react only on a falling edge / after the pulse
if (value == true) {
return
}
fn reset_all(count) {
i = 1
while (i <= count) {
output::set(str::fmt("o{}", i), false)
i += 1
}
output::set("off", false)
}
fn move(index, steps) {
max_index = config::get("max_index")
new_index = index + steps
if (new_index > max_index) {
new_index = 0
} else if (new_index < 0) {
new_index = max_index
}
state::set("sequence_index", new_index)
return new_index
}
channel = input::channel()
index = state::get("sequence_index")
new_index = index
if (channel == "reset") {
new_index = move(index, -index)
}
if (channel == "forward") {
new_index = move(index, 1)
}
if (channel == "backward") {
new_index = move(index, -1)
}
reset_all(outputs_count)
if (new_index == 0) {
output::set("off", true)
} else {
output::set(str::fmt("o{}", new_index), true)
}
