It would make more sense to me to move the delayMicroseconds() call from the for loop in loop() into triggerHigh(), so that triggerHigh() handled the complete cycle from low to high and back to low.
If you count, you have 121 calls to delayMicroseconds() - 59 in triggerHigh(), because it is called 59 times (for i = 0 to i = 58), 59 calls in the for loop, 2 calls in triggerReference(), plus the one after the call to triggerReference().
I would expect there to be 120 calls to delayMicroseconds().
val makes a really dumb name for a variable that is to hold the number of microseconds to wait between transitions.
Finally, you seem to expect digitalWrite() to complete in zero time. That is not a realistic expectation.