int triggerPin = 2; double uRandom; long expect = 40000; // expectation value of randomnumbers --> trigger delay in microsecs long trigger_delay; void setup() { pinMode(triggerPin, OUTPUT); randomSeed(1234); } void loop() { // comment out the following line // to stop trigger production digitalWrite(triggerPin, LOW); digitalWrite(triggerPin, HIGH); // the next two lines take around 250us.... uRandom = 2147483647. / random(2147483647L) ; trigger_delay = (long)(expect * log(uRandom)); // ... here these 250us are substracted... if (trigger_delay > 250) trigger_delay -= 250; else trigger_delay = 1; while (trigger_delay > 0){ if (trigger_delay > 16383) { delayMicroseconds(16383); trigger_delay -= 16383; } else { delayMicroseconds((unsigned int)trigger_delay); trigger_delay = 0; } } }