Interrupt question for automated Crab Claw

Hi John,

I would love to get rid of Delay().
But in that case, how can I re-write the following line:

delay(distanceCm*distanceCm/20)

I will re-post my code between brackets,
Eibert.

/*
  As long as the Ping))) sensor doesn't detect anything at a distance closer than 200cm:
  - a solenoid is randomly triggered for 1 to 10 times (easy snap sequence);
  - when triggered, the solenoid stays powered for 0,04 seconds, than is turned off for a SHORT period, randomly between 0,05 to 1 second until the next trigger pulse
  - after the last pulse of a sequence, the solenoid is turned off for a LONG period, randomly between 15 minutes (900 sec) and 60 minutes (3600 sec)
  
  As soon as the Ping))) sensor detects an object at a distance of 200cm or closer:
  - the trigger rate of the solenoid is changed depending on detection distance (the shorter the distance, the higher the trigger frequency)
  - the minimum time needed to pull the solenoid core completely into its coil is 40 (0,04 seconds)
  Note: solenoid is connected to LedPin 13.  
  
  Ping))) instructions are based upon http://www.arduino.cc/en/Tutorial/Ping
  (Sketch created by David A. Mellis 3 Nov 2008, modified 30 Aug 2011 by Tom Igoe)
 
 */
 
int pingPin = 2;   // Connect SIG from the Ping))) sensor to Arduino's Digital pin 2
int  ledPin = 13;  // Note: the solenoid is also connected to pin 13
int limitCm = 200; // 
long randOffSHORT = 0;
long randOffLONG  = 0;
long int duration, distanceInches, distanceCm;


void setup()
{
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);      // initialize the digital pin as an output.
}

void loop()
{
  pinMode(pingPin, OUTPUT);     // initialize the pingPin as an OUTPUT.
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);         // a short LOW pulse is given beforehand, to ensure a clean HIGH pulse:
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(5);         // the PING))) is triggered by a HIGH pulse of 5 microseconds.
  digitalWrite(pingPin, LOW);
  pinMode(pingPin, INPUT);      // initialize the pingPin as an INPUT.
  duration = pulseIn(pingPin, HIGH);

  distanceInches = microsecondsToInches(duration);
  distanceCm = microsecondsToCentimeters(duration);

  checkLimit();
  delay(100);
}

void checkLimit()
{
  if (distanceCm > limitCm){         // randomised 'easy snap sequence' is activated
  randOffLONG  = random(900000, 3600000);
  int blinkNumber = random(1, 11);
  
  for (int a = 0; a < blinkNumber; a ++)
  {
    randOffSHORT = random(50, 1000); // Define length of random Off period, in this case between 0,05 and 1 second
    digitalWrite(ledPin, HIGH);      // when ledPin = HIGH, solenoid is activated
    delay(40);                       // 40 millisec is minimum time needed, to pull solenoid core completely into its coil
    digitalWrite(ledPin, LOW);       // turn off LED, un-trigger Solenoid
    delay(randOffSHORT);             // wait for short random period 
  }
    delay(randOffLONG);              // wait for long random period 
  }
  else                             // start of snap frequency that is depending on detection distance
  {
  Serial.println(distanceCm);      // THIS IS THE FUNCTION I WOULD LIKE TO CALL USING AN INTERRUPT, "increase blinking rate depending on detection distance"
  digitalWrite(ledPin, HIGH);      // when ledPin = HIGH, solenoid is activated
  delay(40);                       // 40 millisec is minimum time necessary to pull core completely into coil
  digitalWrite(ledPin, LOW);       // turn off LED, un-trigger Solenoid
  delay(40);                       // safety delay, as 40 millisec is the shortest possible time between triggers
  delay(distanceCm*distanceCm/20); // extra delay; will decrease quickly when approaching sensor
  }
}

long microsecondsToInches(long microseconds)
{
  return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
  return microseconds / 29 / 2;
}