     // start cooldown counter
     flameCoolDownTime.reset();
 
+    // when the solenoid closes, there's a lot of EMI that disrupts sensors.  Ignore the sensors for a period of time.
+    sensorEmiCooldown.interval( config.flameCoolDownTime + EMI_COOLDOWN ); // add a little more time.
+    sensorEmiCooldown.reset(); // sensing needs to pause.
+    emiInterference = true;
+
     Serial << F("Flame on! ") << fireLevel << F(" mapped [") << config.minFireTime << F(",") << config.maxFireTime << F("]");
     Serial << F(" -> ") << flameTime << F("ms.  Cooldown: ") << config.flameCoolDownTime << F("ms.") << endl;
   }

  // SAFETY: do not move this code after any other code.
  if ( flameOnTime.check() ) { // time to turn the flame off
    flameOff();
    sensorEmiCooldown.reset(); // sensing needs to pause.
  }

  static boolean gameEnableFlag = gameEnabled();
  static boolean systemResetFlag = systemReseted();
  
  // put all sensor code inside of this cooldown check.
  if( sensorEmiCooldown.check() ) {
    // check system enable state
    if ( systemReset.update() ) { // reset state change
      Serial << F("Reset state change.  State: ");

#define DEBOUNCE_TIME 50UL // need a long debounce b/c electrical noise from solenoid.
Bounce systemReset = Bounce(RESET_PIN, DEBOUNCE_TIME);
Bounce gameEnable = Bounce(GAME_ENABLE_PIN, DEBOUNCE_TIME);
boolean gameEnableFlag = true;
boolean systemResetFlag = false;

// luminosity is not equal among LEDs
#define RED_MAX 255 // entry 255 in the gamma lookup
