Vertical Slider

The Horizontal Slider, upright. Same value, same range, same settings — it just takes a narrow column instead of a wide row, which is what a level, a volume or a lift wants.
What it does
It writes the value between the signal’s minimum and maximum as the thumb moves, continuously or by steps. Everything the horizontal slider does, vertically.
When to use it
- A volume or a level — the eye reads up = more on a vertical track.
- Several channels side by side — three vertical sliders make a mixer.
- A narrow spot on the grid — two columns wide, as tall as you like.
Set it up
- Give the signal its range — Set the signal’s Minimum and Maximum first, under Format on the device’s signal: they are the two ends of the track.
- Place it — Tap + on the dashboard and choose Vertical Slider under Controllers. Make it tall: the longer the track, the finer the control.
- Wire it to the signal — Tap the slider, open the Data tab, tap + Add a target and pick the signal. Close the settings, tap ▶, and drag.
Settings
Tap the widget in edit mode: the sheet opens with a live preview at the top, then two tabs — Data for what it reads or writes, Appearance for how it looks.
Data — what it writes
Targets
| Setting | Type | Default | What it controls |
|---|---|---|---|
| Targets | list of signals | empty — No target yet. The tap goes nowhere. | The signal the widget writes to. Accepts an Integer or Decimal signal. Minimum and maximum come from the signal’s format. The picker lists nothing else. + Add a target for a second device: every target gets the value. |
Step
| Setting | Type | Default | What it controls |
|---|---|---|---|
| Step | Continuous / a number | Continuous | Continuous, or the thumb snaps to multiples. |

Appearance — how it looks
Title
| Setting | Type | Default | What it controls |
|---|---|---|---|
| Title text | text | empty | A title above the widget. Empty means no title. |
| Alignment | Left / Center / Right | Center | Where the title sits. |
Display
| Setting | Type | Default | What it controls |
|---|---|---|---|
| Value | toggle | on | Show the current value next to the thumb, with the signal’s unit. |
Colors
| Setting | Type | Default | What it controls |
|---|---|---|---|
| Filled part | colour | theme accent | The track from the start to the thumb. |
| Track | colour | theme | The rest of the track. |
| Thumb | colour | white | The knob. |

States
- Dragging — the value streams to the device. Released — the last value stays.
- Device offline — with
ISignaland Restore, the position comes back on reconnect.
Arduino device code
The address is all the device knows — I4 here; use the one the app gave your signal. In the sketch, the block receives the value:
IVerticalSlider(I4, float v) { … };
Complete sketch — Cloud
Paste it into the Arduino IDE, put your Wi-Fi and the token the app gave you, upload.
#include <InstantIoT.h>
const char* WIFI_SSID = "MyWiFi";
const char* WIFI_PASS = "MyPassword";
const char* DEVICE_TOKEN = "PASTE_TOKEN_HERE";
IVerticalSlider(I4, float v) { // 0 – 100 in the app
setVolume(v);
};
void setup() {
Serial.begin(115200);
InstantIoT.begin(WiFiLink(WIFI_SSID, WIFI_PASS), Cloud(DEVICE_TOKEN));
}
void loop() {
InstantIoT.loop();
}
Other connections
The widget block never changes. Only the begin() line says how the device reaches the app:
| Connection | begin() |
Devices |
|---|---|---|
| Cloud over Wi-Fi (above) | InstantIoT.begin(WiFiLink("MyWiFi", "secret"), Cloud(DEVICE_TOKEN)); |
ESP32 family, ESP8266, UNO R4 WiFi, MKR WiFi 1010, Nano 33 IoT, UNO WiFi Rev2 |
| Cloud over Ethernet | InstantIoT.begin(EthernetLink(), Cloud(DEVICE_TOKEN)); |
any board + an Ethernet shield |
| Direct — the device’s own Wi-Fi | InstantIoT.begin(AccessPoint("MyESP32", "12345678")); |
every board with Wi-Fi |
| Direct — Bluetooth LE | InstantIoT.begin(BLELink("MyESP32")); — #include <NimBLEDevice.h> first |
ESP32 family (not the S2) |
| Direct — Bluetooth Classic | InstantIoT.begin(BluetoothLink("MyESP32")); |
the original ESP32, Android only |
| Direct — a Bluetooth module (HC-05, HM-10) | InstantIoT.begin(SerialLink(Serial1)); — or SerialLink(13, 15) on ESP8266, SerialLink(10, 11) on UNO / Nano |
every board, radio or not |
| Your own InstantIoT Server (open source, at home) | InstantIoT.begin(WiFiLink("MyWiFi", "secret"), MyServer("192.168.1.42", DEVICE_TOKEN)); |
same as Cloud |
Direct needs no token: the phone is at the other end of the wire. See Connect for TLS, timeouts and what to do when it does not connect.
ISignaldoes the same job — and survives a restart.ISignal(I4, float v)runs with exactly the same value asIVerticalSlider(I4, float v): the widget block is the readable form,ISignalthe generic one, and you can use either. The difference shows when the device reconnects: with Restore after a restart on the signal, the Cloud sends the last value again and only theISignalblock runs — a position is a state —ISignal(I4, float v)with Restore on brings it back after a restart. See One block for everything.
Notes
- Resize it tall: the longer the track, the finer the control under the finger.
- Same signal, two sliders — one horizontal on page 1, one vertical on page 2 — both show the same value.
Next
→ Horizontal Slider — the same, across → Vertical Level — to show a level rather than set it