 const byte HEAD_MIN = 0;
 const byte HEAD_MAX = 82;
 
+// frequency range (A0 through B4)
+const int FREQUENCY_MIN = 27;
+const int FREQUENCY_MAX = 494;
+
 // number of drives
 const byte DRIVE_COUNT = 3;
 
-// starting step control pin
+// starting direction pin
 const byte STARTING_PIN = 2;
-// we assume step control pins occur on evens and direction pins occur on odds
-// (so for drive 1, step control is pin 4 and direction is pin 5)
-
-// head directions (by drive):
+// we assume direction pins occur on evens and step pins occur on odds
+// (so for drive 0, direction is pin 2 and step is pin 3)
+
+// all of the following arrays need to be initialized with DRIVE_COUNT items...
+// this could maybe be avoided with enums or something
+
+// head directions (by drive)
 byte directions[] = {
   LOW,
   LOW,
   LOW
 };
 
-// active periods (by drive):
+// active periods (by drive)
 int periods[] = {
   0,
   0,
   0
 };
 
-// head positions (by drive):
+// head positions (by drive)
 byte positions[] = {
   0,
   0,
   0
 };
 
-// elapsed ticks (by drive):
+// elapsed ticks (by drive)
 // used to know when to step
 int ticks[] = {
   0,

    ticks[drive] = 0;
  }

  // the drives won't go past 0, so that's cool
  for (byte step = HEAD_MIN; step <= HEAD_MAX; step++) {
    for (byte drive = 0; drive < DRIVE_COUNT; drive++) {
      digitalWrite(getDirectionPin(drive), HIGH);

  digitalWrite(d, directions[drive]);
  digitalWrite(s, HIGH);
  digitalWrite(s, LOW);
}

void resetDrive(byte drive) {
  directions[drive] = LOW;
  periods[drive] = 0;
  positions[drive] = 0;
  ticks[drive] = 0;

  for (byte step = HEAD_MIN; step <= HEAD_MAX; step++) {
    digitalWrite(getDirectionPin(drive), HIGH);
    digitalWrite(getStepPin(drive), HIGH);
    digitalWrite(getStepPin(drive), LOW);

    delay(5);
  }
}

// sets everything to a clean starting state
