Arduino WebSlider Voorbeeld - Dual Slider Bedieningsinterface Tutorial
Het WebSlider voorbeeld biedt twee onafhankelijke slider bedieningspanelen die toegankelijk zijn via een webbrowser. Ontworpen voor Arduino Uno R4 WiFi en DIYables STEM V4 IoT educatief platform met verbeterde analoge mogelijkheden, precisiebesturingsfuncties, en ingebouwde educatieve modules voor het leren van PWM en analoge elektronica. Elke slider biedt waarden van 0-255, waardoor ze perfect zijn voor PWM-besturing, helderheidsaanpassing, motorsnelheidsbesturing, en elke toepassing die analoog-achtige besturingswaarden vereist.
Dual Sliders: Twee onafhankelijke slider bedieningspanelen (0-255 bereik elk)
Realtime Waarden: Directe waarde-updates via WebSocket communicatie
PWM Compatibel: 8-bit waarden (0-255) perfect voor analogWrite() functies
Visuele Feedback: Realtime waarde-weergave voor elke slider
Vooraf Ingestelde Knoppen: Snelle toegang tot veelgebruikte waarden
Touch & Muis Ondersteuning: Werkt op desktop, tablet, en mobiele apparaten
Responsief Ontwerp: Past zich aan aan verschillende schermformaten
Waarde Persistentie: Sliders onthouden laatste positie bij pagina herlaadbeurt
Platform Uitbreidbaar: Momenteel geïmplementeerd voor Arduino Uno R4 WiFi, maar kan worden uitgebreid voor andere hardware platforms. Zie
DIYables_WebApps_ESP32
Of u kunt de volgende kits kopen:
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.
Volg deze instructies stap voor stap:
Verbind het Arduino Uno R4/DIYables STEM V4 IoT board met uw computer via een USB-kabel.
Start de Arduino IDE op uw computer.
Selecteer het juiste Arduino Uno R4 board (bijvoorbeeld Arduino Uno R4 WiFi) en COM-poort.
Navigeer naar het Libraries icoon in de linker balk van de Arduino IDE.
Zoek naar "DIYables WebApps", vind vervolgens de DIYables WebApps bibliotheek door DIYables
Klik op de Install knop om de bibliotheek te installeren.


#include <DIYablesWebApps.h>
const char WIFI_SSID[] = "YOUR_WIFI_SSID";
const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";
UnoR4ServerFactory serverFactory;
DIYablesWebAppServer webAppsServer(serverFactory, 80, 81);
DIYablesHomePage homePage;
DIYablesWebSliderPage webSliderPage;
int slider1Value = 64;
int slider2Value = 128;
void setup() {
Serial.begin(9600);
delay(1000);
Serial.println("DIYables WebApp - Web Slider Example");
webAppsServer.addApp(&homePage);
webAppsServer.addApp(&webSliderPage);
webAppsServer.setNotFoundPage(DIYablesNotFoundPage());
if (!webAppsServer.begin(WIFI_SSID, WIFI_PASSWORD)) {
while (1) {
Serial.println("Failed to start WebApp server!");
delay(1000);
}
}
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
Serial.println("Slider 1: " + String(slider1) + ", Slider 2: " + String(slider2));
});
webSliderPage.onSliderValueToWeb([]() {
webSliderPage.sendToWebSlider(slider1Value, slider2Value);
Serial.println("Web client requested values - Sent: Slider1=" + String(slider1Value) + ", Slider2=" + String(slider2Value));
});
}
void loop() {
webAppsServer.loop();
delay(10);
}
const char WIFI_SSID[] = "YOUR_WIFI_NETWORK";
const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";
DIYables WebApp - Web Slider Example
INFO: Added app /
INFO: Added app /web-slider
DIYables WebApp Library
Platform: Arduino Uno R4 WiFi
Network connected!
IP address: 192.168.0.2
HTTP server started on port 80
Configuring WebSocket server callbacks...
WebSocket server started on port 81
WebSocket URL: ws://192.168.0.2:81
WebSocket server started on port 81
==========================================
DIYables WebApp Ready!
==========================================
📱 Web Interface: http://192.168.0.2
🔗 WebSocket: ws://192.168.0.2:81
📋 Available Applications:
🏠 Home Page: http://192.168.0.2/
🎚️ Web Slider: http://192.168.0.2/web-slider
==========================================
Als u niets ziet, herstart het Arduino board.
Noteer het weergegeven IP-adres en voer dit adres in de adresbalk van een webbrowser op uw smartphone of PC in.
Voorbeeld: http://192.168.0.2
U ziet de homepage zoals in onderstaande afbeelding:
Of u kunt ook direct toegang krijgen tot de pagina via het IP-adres gevolgd door /web-slider. Bijvoorbeeld: http://192.168.0.2/web-slider
Probeer de twee sliders te bewegen om analoge waarden (0-255) te besturen en bekijk de realtime feedback in de Serial Monitor.
Configureer initiële slider posities:
int slider1Value = 64;
int slider2Value = 128;
De slider interface biedt:
Slider 1: Eerste bedieningsslider met waarde-weergave (0-255)
Slider 2: Tweede bedieningsslider met waarde-weergave (0-255)
Waarde Weergave: Realtime numerieke waarden voor beide sliders
Voorinstelling Knoppen: Snelle toegang tot veelgebruikte waarden (0%, 25%, 50%, 75%, 100%)
Klik en Sleep: Klik op slider handgreep en sleep om waarde aan te passen
Klik Positie: Klik ergens op slider baan om naar die waarde te springen
Fijne Besturing: Gebruik kleine muisbewegingen voor precieze aanpassing
Aanraken en Slepen: Raak slider handgreep aan en sleep naar nieuwe positie
Tik Positie: Tik op slider baan om waarde in te stellen
Soepele Besturing: Vinger slepen zorgt voor soepele waardeveranderingen
Elke slider biedt:
Minimum Waarde: 0 (0% - volledig uit)
Maximum Waarde: 255 (100% - maximale intensiteit)
Resolutie: 256 discrete stappen (8-bit precisie)
PWM Compatibiliteit: Direct gebruik met analogWrite() functie
void setup() {
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
Serial.println("Slider 1: " + String(slider1) + ", Slider 2: " + String(slider2));
});
}
const int LED1_PIN = 9;
const int LED2_PIN = 10;
void setup() {
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
analogWrite(LED1_PIN, slider1Value);
analogWrite(LED2_PIN, slider2Value);
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
analogWrite(LED1_PIN, slider1);
analogWrite(LED2_PIN, slider2);
Serial.println("LED1 Helderheid: " + String(slider1) +
", LED2 Helderheid: " + String(slider2));
});
}
#include <Servo.h>
Servo servo1, servo2;
void setup() {
servo1.attach(9);
servo2.attach(10);
servo1.write(map(slider1Value, 0, 255, 0, 180));
servo2.write(map(slider2Value, 0, 255, 0, 180));
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
int angle1 = map(slider1, 0, 255, 0, 180);
int angle2 = map(slider2, 0, 255, 0, 180);
servo1.write(angle1);
servo2.write(angle2);
Serial.println("Servo1: " + String(angle1) + "°, Servo2: " + String(angle2) + "°");
});
}
const int MOTOR1_PWM = 9;
const int MOTOR1_DIR1 = 2;
const int MOTOR1_DIR2 = 3;
const int MOTOR2_PWM = 10;
const int MOTOR2_DIR1 = 4;
const int MOTOR2_DIR2 = 5;
void setup() {
pinMode(MOTOR1_PWM, OUTPUT);
pinMode(MOTOR1_DIR1, OUTPUT);
pinMode(MOTOR1_DIR2, OUTPUT);
pinMode(MOTOR2_PWM, OUTPUT);
pinMode(MOTOR2_DIR1, OUTPUT);
pinMode(MOTOR2_DIR2, OUTPUT);
digitalWrite(MOTOR1_DIR1, HIGH);
digitalWrite(MOTOR1_DIR2, LOW);
digitalWrite(MOTOR2_DIR1, HIGH);
digitalWrite(MOTOR2_DIR2, LOW);
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
analogWrite(MOTOR1_PWM, slider1);
analogWrite(MOTOR2_PWM, slider2);
int speed1Percent = map(slider1, 0, 255, 0, 100);
int speed2Percent = map(slider2, 0, 255, 0, 100);
Serial.println("Motor1: " + String(speed1Percent) + "%, " +
"Motor2: " + String(speed2Percent) + "%");
});
}
const int RED_PIN = 9;
const int GREEN_PIN = 10;
const int BLUE_PIN = 11;
void setup() {
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
int redValue = slider1;
int blueValue = slider2;
int greenValue = (slider1 + slider2) / 2;
analogWrite(RED_PIN, redValue);
analogWrite(GREEN_PIN, greenValue);
analogWrite(BLUE_PIN, blueValue);
Serial.println("RGB - R:" + String(redValue) +
" G:" + String(greenValue) +
" B:" + String(blueValue));
});
}
class SliderSmoother {
private:
int currentValue = 0;
int targetValue = 0;
unsigned long lastUpdate = 0;
const int SMOOTH_RATE = 5;
public:
void setTarget(int target) {
targetValue = target;
}
int getCurrentValue() {
return currentValue;
}
bool update() {
if (millis() - lastUpdate > 10) {
bool changed = false;
if (currentValue < targetValue) {
currentValue = min(currentValue + SMOOTH_RATE, targetValue);
changed = true;
} else if (currentValue > targetValue) {
currentValue = max(currentValue - SMOOTH_RATE, targetValue);
changed = true;
}
lastUpdate = millis();
return changed;
}
return false;
}
};
SliderSmoother smoother1, smoother2;
void setup() {
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
smoother1.setTarget(slider1);
smoother2.setTarget(slider2);
});
}
void loop() {
server.loop();
bool changed1 = smoother1.update();
bool changed2 = smoother2.update();
if (changed1 || changed2) {
analogWrite(9, smoother1.getCurrentValue());
analogWrite(10, smoother2.getCurrentValue());
}
}
void setupThresholdControl() {
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
const int LOW_THRESHOLD = 85;
const int MEDIUM_THRESHOLD = 170;
if (slider1 < LOW_THRESHOLD) {
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
} else if (slider1 < MEDIUM_THRESHOLD) {
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
} else {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
}
analogWrite(9, slider2);
});
}
const int PRESETS[][2] = {
{0, 0},
{64, 128},
{128, 128},
{255, 128},
{255, 255}
};
void applyPreset(int presetNumber) {
if (presetNumber >= 0 && presetNumber < 5) {
slider1Value = PRESETS[presetNumber][0];
slider2Value = PRESETS[presetNumber][1];
analogWrite(9, slider1Value);
analogWrite(10, slider2Value);
webSliderPage.sendToWebSlider(slider1Value, slider2Value);
Serial.println("Voorinstelling toegepast " + String(presetNumber) +
": " + String(slider1Value) + ", " + String(slider2Value));
}
}
void setupPresetSystem() {
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
analogWrite(9, slider1);
analogWrite(10, slider2);
});
}
void loop() {
server.loop();
static bool lastButton = false;
bool currentButton = digitalRead(7);
if (currentButton && !lastButton) {
static int currentPreset = 0;
applyPreset(currentPreset);
currentPreset = (currentPreset + 1) % 5;
}
lastButton = currentButton;
}
const int LED_STRIP_PIN = 6;
const int NUM_LEDS = 30;
void setupLEDStrip() {
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
uint8_t brightness = slider1;
uint8_t hue = slider2;
Serial.println("LED Strip - Helderheid: " + String(brightness) +
", Tint: " + String(hue));
});
}
const int FAN1_PIN = 9;
const int FAN2_PIN = 10;
void setupFanControl() {
pinMode(FAN1_PIN, OUTPUT);
pinMode(FAN2_PIN, OUTPUT);
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
int fan1Speed = (slider1 > 50) ? map(slider1, 50, 255, 100, 255) : 0;
int fan2Speed = (slider2 > 50) ? map(slider2, 50, 255, 100, 255) : 0;
analogWrite(FAN1_PIN, fan1Speed);
analogWrite(FAN2_PIN, fan2Speed);
Serial.println("Ventilator1: " + String(map(fan1Speed, 0, 255, 0, 100)) + "%, " +
"Ventilator2: " + String(map(fan2Speed, 0, 255, 0, 100)) + "%");
});
}
const int VOLUME1_PIN = 9;
const int VOLUME2_PIN = 10;
void setupAudioControl() {
pinMode(VOLUME1_PIN, OUTPUT);
pinMode(VOLUME2_PIN, OUTPUT);
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
slider1Value = slider1;
slider2Value = slider2;
float volume1 = pow(slider1 / 255.0, 2) * 255;
float volume2 = pow(slider2 / 255.0, 2) * 255;
analogWrite(VOLUME1_PIN, (int)volume1);
analogWrite(VOLUME2_PIN, (int)volume2);
Serial.println("Volume1: " + String((int)volume1) +
", Volume2: " + String((int)volume2));
});
}
1. Sliders reageren niet
Controleer WebSocket verbinding in browser console
Verifieer netwerkverbinding tussen apparaat en Arduino
Ververs browserpagina om verbinding te resetten
Controleer Serial Monitor voor verbindingsfouten
2. Waarden bereiken niet volledige bereik
Verifieer slider bereik instellingen in web interface
Controleer voor waarde mapping problemen in callback functie
Test met verschillende browsers of apparaten
3. Schokkerige of inconsistente besturing
Implementeer waarde afvlakking voor geleidelijke veranderingen
Controleer voor netwerk latentie problemen
Voeg debouncing toe voor snelle waardeveranderingen
4. PWM uitgang werkt niet
Verifieer dat pins PWM ondersteunen (controleer Arduino pinout)
Zorg ervoor dat analogWrite() wordt aangeroepen met juiste pin nummers
Controleer hardware verbindingen en belasting vereisten
Voeg uitgebreide debugging toe:
void debugSliderValues(int slider1, int slider2) {
Serial.println("=== Slider Debug ===");
Serial.println("Slider 1: " + String(slider1) + " (" + String(map(slider1, 0, 255, 0, 100)) + "%)");
Serial.println("Slider 2: " + String(slider2) + " (" + String(map(slider2, 0, 255, 0, 100)) + "%)");
Serial.println("PWM Pin 9: " + String(slider1));
Serial.println("PWM Pin 10: " + String(slider2));
Serial.println("===================");
}
Kamerverlichting helderheidsbesturing
RGB kleurmenginterface
LED strip animatiesnelheidsbesturing
Podiumverlichting intensiteitsbesturing
Volume besturingsinterface
Toon/equalizer besturing
Geluidseffect intensiteit
Muziek visualisatie besturing
Klimaatbesturing (verwarming/koeling intensiteit)
Raamjaloezie positiebesturing
Irrigatiesysteem stroombesturing
Slimme apparaat helderheid/volume
Gebruik sliders voor snelheidslimieten en joystick voor richting:
int maxSpeed = 255;
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
maxSpeed = slider1;
});
webJoystickPage.onJoystickValueFromWeb([](int x, int y) {
int scaledX = map(x, -100, 100, -maxSpeed, maxSpeed);
int scaledY = map(y, -100, 100, -maxSpeed, maxSpeed);
controlRobot(scaledX, scaledY);
});
Gebruik sliders om PWM te besturen en digitale pins voor aan/uit:
webSliderPage.onSliderValueFromWeb([](int slider1, int slider2) {
if (webDigitalPinsPage.getPinState(2)) {
analogWrite(9, slider1);
} else {
analogWrite(9, 0);
}
if (webDigitalPinsPage.getPinState(3)) {
analogWrite(10, slider2);
} else {
analogWrite(10, 0);
}
});
Na het beheersen van het WebSlider voorbeeld, probeer:
WebJoystick - Voor 2D directionele besturing
WebDigitalPins - Voor discrete aan/uit besturing
WebMonitor - Voor debugging slider waarden
MultipleWebApps - Combineren van sliders met andere besturingspanelen