       change_state(LAUNCHSTATE_DISARMED);
       break;
   }
-  sketch.countdown = COUNTDOWN_MAX;
-}
-
-void check_continuity() {
+}
+
+void check_continuity(unsigned long now) {
   if (LAUNCHSTATE_FIRING != sketch.launch_state) {
     if (digitalRead(PIN_LAUNCH_VIN)) {
-      sketch.vread_dropouts = 0;
-      if (LAUNCHSTATE_DISARMED == sketch.launch_state) {
+      if (sketch.vread_dropouts > 0) {
+        --sketch.vread_dropouts;
+      } else if (LAUNCHSTATE_DISARMED == sketch.launch_state) {
         change_state(LAUNCHSTATE_ARMED);
-        digitalWrite(PIN_CONT_READ, HIGH);
-      }
-    } else if (++sketch.vread_dropouts < VIN_DROPOUTS_TH) {
-      change_state(LAUNCHSTATE_DISARMED);
-      digitalWrite(PIN_CONT_READ, LOW);
-    }
-  }
-}
-
-void update_7segment() {
+      }
+    } else if (now - sketch.last_tick > FIRE_VOLTAGE_RISE_TIME ) {
+      // always allow time for the voltage to come back up after firing.
+      ++sketch.vread_dropouts;
+      if (sketch.vread_dropouts < VIN_DROPOUTS_TH) {
+        change_state(LAUNCHSTATE_DISARMED);
+      }
+    }
+  }
+}
+
+void update_7segment(unsigned long now) {
   digitalWrite(PIN_SR_ST, LOW);
   switch (sketch.launch_state) {
-    case LAUNCHSTATE_FIRING: {
+    case LAUNCHSTATE_POST_FIRE: {
         shiftOut(PIN_SR_DS, PIN_SR_SH, MSBFIRST, sketch.ssmap[0]);
       }
       break;

#define PIN_LAUNCH_VIN 4
#define PIN_FIRE_IND 0
#define PIN_ARM_IND 6
#define PIN_CONT_READ 7
#define PIN_SR_DS 1
#define PIN_SR_ST 3
#define PIN_SR_SH 2

//                  [ D9] XTAL2/PB1 |     | PA1      [D1] PIN_SR_DS
//                        RESET/PB3 |     | PA2      [D2] PIN_SR_SH
// PIN_LAUNCH_BUTT  [ D8]* INT0/PB2 |     | PA3      [D3] PIN_SR_ST
//        (unused)  [ D7]*      PA7 |     | PA4      [D4] PIN_LAUNCH_VIN
//     PIN_ARM_IND  [ D6]*      PA6 |     | PA5     *[D5] PIN_LAUNCH_FUSE
//                                  +-----+
//                                                                     (*==PWM)
