     Serial.print(" > ");
   }
 
-  v1 += dv + domega * gauge / 1.414;
+  v1 += dv + domega * gauge / 1.414; // assumes square-ish vehicle
   v2 += dv - domega * gauge / 1.414;
 
   v1 = (v1 > 1) ? 1 : ((v1 < -1) ? -1 : v1); // range check
   v2 = (v2 > 1) ? 1 : ((v2 < -1) ? -1 : v2);
 
-  vy = (v1 + v2) / 2;
-  if (vy >= 0) {
-    vx = (v2 - v1) / (2 * (1 - vy));
+  actual_vy = (v1 + v2) / 2;
+  if (actual_vy >= 0) {
+    actual_vx = (v2 - v1) / (2 * (1 - actual_vy));
   } else {
-    vx = (v1 - v2) / (2 * (1 + vy));
-  }
-  actual_vx = (int) round(127 * vx);
-  actual_vy = (int) round(127 * vy);
+    actual_vx = (v1 - v2) / (2 * (1 + actual_vy));
+  }
 }
 
 void every_milli() { // runs once a millisecond, on average

  const float motor = 250;          // rating, W
  const float dt = 1E-3;            // s (time step)
  const float gauge = 1.5;          // x-axis separation of wheels

  const float coefficient = motor / max_speed;

  float max_T1 = coefficient * eff_div_v(abs(v1));
  float max_T2 = coefficient * eff_div_v(abs(v2));

  float vx = ((float) target_vx) / 127;
  float vy = ((float) target_vy) / 127;

  float target_v1;
  float target_v2;

  if (target_vx >= 0) {
    target_v1 = vy + vy * vx - vx;
    target_v2 = vy - vy * vx + vx;
  } else {
    target_v1 = vy + vy * vx + vx;
    target_v2 = vy - vy * vx - vx;
  }

  // v. clumsy control system:
  float T1 = max_T1 * ((target_v1 > v1) ? 1 : -1) / 20; // applied tractions
  float T2 = max_T2 * ((target_v2 > v2) ? 1 : -1) / 20;

  float a = (T1 + T2) / mass;
  float alpha = (T1 - T2) * (gauge / 2) / inertia;

void every_tenth(int tenth) { // runs once every tenth of a second, where tenth = 0..9
  digitalWrite(LED_BUILTIN, tenth == 0 || tenth == 8); // double blink per second

  send_command('x', norm_to_byte(actual_vx)); // send latest info on velocity
  send_command('y', norm_to_byte(actual_vy));
  send_command('l', norm_to_byte(slip_left)); // send latest info on traction / slip
  send_command('r', norm_to_byte(slip_right));
}

void every_second() { // runs once every second
  Serial.println(""); // break the line for human readability in the console
  // fake_car(true);  // this will print out the values (for debugging purposes)
}

void loop() {
