# Desktop Python teaching example. Numerical inputs are illustrative.
target, speed, integral, previous = 0.1, 0.0, 0.0, None
dt, kp, ki, kd = 0.1, 3.0, 2.0, 0.05
for step in range(80):
    error = target - speed
    integral = max(-0.2, min(0.2, integral + error * dt))
    derivative = 0.0 if previous is None else -(speed - previous) / dt
    raw = kp * error + ki * integral + kd * derivative
    command = max(0.0, min(1.0, raw))
    previous = speed
    speed += 0.2 * (0.3 * command - speed)
    print(step, speed, integral, raw, command)
