GameEngine public test

LIVE PPG FFT

Published Jun 22, 2026 · Build 2026.06.22-gameengine

Live pulse waveform -- BPM waiting for PPG packets
Breath phase Warming
PPG baseline proxy -
Actual FPS 0 render loop warming
RAF-
Render-
FFT-
Sample-
Buffer-
Serialidle
Start here Pick your board
  1. 1 Pick source Choose Arduino or XIAO. Next
  2. 2 Connect USB Press Connect USB. Wait
  3. 3 Hold sensor Wait for live PPG. Wait
LIVE USB ONLY FFT warming serial idle no packets GameEngine 60 fps 20s time USB 922k
20s view · 14s FFT
Y-36 T38 Z1.06
Raw ADC-
ADC range-
Signal-
Packets-
Pulse FFT-
Fused BPM-
IBI-
Breath-
Breath IBI-
Confidence-
Arduino UNO R4 WiFi setup PulseSensor purple -> A0 · upload sketch · select Arduino 115k · Connect USB

Wiring: purple signal to A0, red to 5V, black to GND.

Upload: in Arduino IDE choose Arduino Renesas UNO Boards -> Arduino UNO R4 WiFi, select the correct port, paste the sketch, then Upload.

Connect: close Serial Monitor, choose Arduino 115k here, then Connect USB.

Stream: sketch prints 200 Hz lines as ppg,ms,raw. No browser flashing needed.

Arduino IDE sketch
const int PULSE_PIN = A0;
const unsigned long SAMPLE_US = 5000; // 200 Hz
unsigned long nextSampleUs = 0;

void setup() {
  Serial.begin(115200);
  delay(400);
  Serial.println("version,Arduino UNO R4 WiFi PPG A0 2026-06-22");
  Serial.println("header,kind,ms,raw");
  nextSampleUs = micros();
}

void loop() {
  unsigned long now = micros();
  if ((long)(now - nextSampleUs) < 0) return;
  nextSampleUs += SAMPLE_US;

  int raw = analogRead(PULSE_PIN);
  Serial.print("ppg,");
  Serial.print(millis());
  Serial.print(",");
  Serial.println(raw);
}
Live-only analyzer waiting for real PPG USB packets.

GameEngine XIAO firmware

SignalLab GameEngine 0.3.1 streams 200 Hz PulseSensor packets at 921600 baud.

Use desktop Chrome, Edge, or Brave with USB serial support. Open this page over HTTPS, or use localhost while developing.

After install, close this panel, reconnect USB if the browser asks, then press Connect USB.