     Serial.print(read_analog(3));Serial.print(" ");
     Serial.print(read_analog(0));Serial.println();
   } else if (c == 's') {
-    int nscans = Serial.parseInt();
+    // XXX we don't use parseInt beause it takes a second to complete waiting
+    // for more user input
+    uint16_t nscans = 0;
+    while (c != '.') {
+      c = Serial.read();
+      if (c >= '0') {
+        c -= '0';
+        nscans *= 10;
+        nscans += c;
+      }
+    }
     scan_channels(nscans);
   } else if (c == 'p') {
     for (int idx = 0; idx < writepos; idx += 4) {

  Waits for BUSY to go high
  */
inline void wait_busy() {
  while(digitalRead(_BUSY) == LOW) {
    digitalWrite(_LED, ~digitalRead(_BUSY));
  }
}

/**


  while (nscans) {
    if (trigcnt>=_DIVIDER) {
      trigcnt -= _DIVIDER;
      if (writepos < _BUF_SIZE) {
        buf[writepos+0] = read_analog(1);
        buf[writepos+1] = read_analog(2);
