Deadzone 0.10

Online Gamepad & Wheel Test

No controller detected

Connect your gamepad, joystick, or racing wheel via USB or Bluetooth, then press any button (or turn the wheel).
Browsers only expose controllers after the first user input.

Racing wheels — Logitech G29 / G920 / G923, Thrustmaster, Fanatec, MOZA… — get a dedicated Wheel mode with live steering angle, pedals and paddle shifters.

Press any button to start

About the Online Gamepad & Controller Test

Test Xbox, PlayStation, generic USB controllers, flight sticks and racing wheels straight from the browser: check every button, measure analog stick drift, tune dead zones, verify triggers, hat switches and vibration, and calibrate pedals with live min/max detection. Works with wired and Bluetooth controllers.

Why is my controller not detected?

Browsers only expose a gamepad after you press a button on it — this is a Gamepad API security rule. Connect the controller, press any button, and it should appear. If not, try another USB port, make sure no other program has exclusive access, and check that the controller works in the operating system first.

How do I check for stick drift?

Release both analog sticks and watch their live position readout. A healthy stick returns to values very close to zero; a stick that keeps reporting movement while untouched has drift. Small residual values are normal and are absorbed by the dead zone.

What is a dead zone and how should I set it?

A dead zone is the small region around the stick's center where input is ignored, hiding sensor noise and mild drift. Set it just large enough that the resting stick reads zero. An oversized dead zone makes aiming feel sluggish; too small and the character moves on its own.

Can I test racing wheel pedals here?

Yes. The pedal panel uses live min/max calibration: fully press and release each pedal once and the page learns its real range and orientation automatically, including inverted axes. Note that some wheels, such as the Logitech G920, report nothing on a pedal axis until the pedal is physically touched for the first time.

Does vibration testing work in every browser?

Rumble support depends on the browser and controller. Chromium-based browsers support vibration for most Xbox and PlayStation pads; some generic controllers expose no vibration actuator at all, in which case the test reports it as unavailable.

Privacy: the test runs entirely in your browser — a strict Content-Security-Policy blocks all network requests and nothing is uploaded. Settings are kept in localStorage under the gptest: prefix (deadzone, labelScheme, vibMagnitude, vibDuration, mode, and wheelCfg with per-wheel pedal settings keyed by USB vendor:product ID or the browser’s device ID); the theme is shared across BeogradPC tests in bpc:theme. An exported JSON file contains your browser’s user agent, platform, language and screen size plus controller names and device IDs.

Help — Gamepad Test

Connect your gamepad, joystick, or racing wheel via USB or Bluetooth. Browsers only expose the device after you press a button on it (security requirement). Once detected, the device is identified by its USB vendor/product ID (brand, model and type are shown in the header strip) and appears as a pill in the top toolbar.

Modes:

• Visualizer — schematic gamepad with hit-heatmap (each button color-grades blue→green→cyan→amber→red as you press it more; the stick handles themselves are L3 / R3), analog axes with their role (LX / LY / Steer / Twist…), analog triggers, and a full button grid. A flight stick gets its own drawing: the grip tilts with X / Y, the notch at the grip base turns with the twist axis, the throttle slider fills on the base, the hat switch lights its direction (Chrome axis 9, two-axis hats and D-pad buttons are all understood), trigger and thumb buttons sit on the grip and buttons 4–15 on the base. Labels follow the active label scheme (Xbox / PlayStation / Nintendo / Numeric — cycle via the A/B button in settings).

• Wheel — appears automatically when a racing wheel is detected (Logitech G29 / G920 / G923 / G27 / G25, Thrustmaster T150 / T300 / TMX / T248, Fanatec, MOZA, Simucube…). The wheel illustration rotates live with the steering axis; pick the rotation range (180°–2520°, default 900°) to read the angle in degrees. Pedal bars show clutch / brake / throttle. Press each pedal fully once after connecting — pedal ranges are calibrated live from real movement. Logitech pedals report 0 until first touched; that placeholder 0 is ignored, so an untouched pedal shows “—” instead of a wrong value. In Auto mode the released end of each pedal is learned from where it rests and is locked for the session after one full press and release (holding a pedal down afterwards cannot flip it). Each pedal also has a mode menu: Released = high / low fixes the direction, and Combined (−) / (+) is for wheels that report throttle and brake on one shared axis resting in the centre. ⇅ flips a pedal and stores your choice. If a pedal lands on the wrong bar, run Auto-detect pedals (press each pedal when prompted — it also recognises combined axes and duplicate axes) or pick the axis manually; a pedal you skip loses an axis that a detected pedal now uses. Recalibrate pedals forgets the learned ranges and directions (including ⇅ choices) but keeps the axis assignments and combined modes. Hub buttons and paddle shifters light up with the same heat colors as the visualizer; paddles also count presses. Detection uses USB vendor/product IDs with name-based fallback, so unknown wheels still work.

• Stick gamut — rotate each stick in a full circle. The green outline is the furthest the stick reached in each 5° direction (kept until Reset), blue dots are recent movement (they fade after 8 s), the outer ring is full deflection and the dashed ring the deadzone. Octant coverage counts the 8 directions (centred on up, up-right, right…) reached at ≥ 0.9 deflection. Circularity error is the average distance of the outline from the full-deflection circle, shown once at least 90 % of the directions were swept (0 % = perfect circle; sticks with a square gate read higher).

• Vibration — test the weak (high-freq) and strong (low-freq) motors independently or together; TRIGGERS appears when the controller reports impulse-trigger rumble, and Stop ends a running effect. Magnitude (0–1) and duration (100–3000 ms) are configurable. Chromium and Safari use vibrationActuator; Firefox may only offer the older hapticActuators pulse (one intensity, so weak / strong / both feel the same). “preempted” in the log means a newer effect or Stop replaced it — not a failure. Vibration also stops when the tab is hidden or closed.

• Raw data — pretty-printed Gamepad object snapshot, throttled to 100 ms.

Several controllers: every connected controller is recorded at the same time; the pills in the toolbar choose which one is shown. A controller that reconnects within 60 s (for example after a Bluetooth drop) keeps its session statistics.

Deadzone (top-right slider, 0.00–0.30): sticks use a radial deadzone — a stick reads zero while its distance from the centre is below the threshold (the dashed circle in Stick gamut); other single axes (twist, throttle…) use the same threshold per axis. Triggers, wheel and pedal readings are never filtered, and the JSON export always contains raw, unfiltered values.

Privacy: Everything runs in your browser; the page makes no network requests (strict Content-Security-Policy) and nothing is uploaded. Stored in localStorage under the gptest: prefix: gptest:deadzone, gptest:labelScheme, gptest:vibMagnitude, gptest:vibDuration, gptest:mode (last open tab) and gptest:wheelCfg (per wheel model: rotation range, pedal axes, pedal modes and ⇅ choices — keyed by the USB vendor:product ID or, for unrecognised wheels, the browser’s device ID string). The light/dark theme is shared by all BeogradPC tests in bpc:theme. The Export file contains your browser’s user agent, platform, language and screen size, the controller names, browser device ID strings and USB vendor/product IDs, and the test results.

Reset clears button hit counts, stick gamut data, trigger and simultaneity peaks, vibration logs, wheel statistics and the live pedal calibration for all controllers (including recently disconnected ones); stored settings, pedal axes and pedal modes stay. Export writes a JSON file with system info and, per controller, raw axis values (current, min, max), button hits, stick gamut with circularity, trigger peaks and the vibration log — for wheels also the configuration, each pedal’s effective direction (and whether it is locked), observed axis ranges and peaks. Recently disconnected controllers are listed separately.