Measuring camera flash lag with an Arduino

I own a Fujifilm X-T4 mirrorless camera, along with a Godox TT600 flash and a Godox XPro-F radio trigger.

I dabble in dance photography, which requires very precise timings of the shutter release to catch the apex of jumps or things like that. With some practice though, it becomes easier to nail the shot most of the time.

However, I noticed that when I used the Godox flash and trigger, I often missed the shot. Indeed, it seemed like the flash was causing a very slight lag in the shutter response, not huge, but definitely there, and enough to ruin a shot.

So, my first instinct was to Google this issue, and sure enough, a few people already complained about this on various forums. This also gave me some insight into what was the probable cause of the delay: TTL. In case you don’t know what TTL is, it is a mode whereby the flash power is automatically adjusted to give a desired exposure. This works by firing a “pre-flash” when the shutter button is pressed, but before taking the shot. By observing how much of the pre-flash came back “through-the-lens” (TTL), the camera can easily compute the actual flash power to set for the actual shot to get the desired exposure.

You can read more about TTL on Wikipedia. But the key point to remember here is that TTL involves doing things before taking the shot, and this takes time.

The solution… not

I don’t need TTL. I always set my flash power manually. Actually, the TT600 flash doesn’t even support TTL, meaning it won’t actually fire a pre-flash.

TTL and Manual flash modes on the camera

When the TT600 is mounted on the camera directly, the camera correctly sees the flash as a manual-only flash and sets itself to Manual (M) flash mode. In this mode, I cannot feel any increased delay.

But when the XPro-F trigger is mounted on the camera, the camera forcibly sets itself to TTL mode and M mode cannot be selected; even though the trigger is only associated to the manual-only TT600 flash and the flash power is manually set on the trigger. In that configuration, I can feel the increased delay.

A simple way to force the trigger to M mode is to block all the pins but the middle one on the flash hot shoe. All you need is a piece of tape or paper with a small hole in the middle. This prevents the camera and trigger to communicate and negotiate smart modes like TTL and whatnot. But it still triggers fine. Now, M mode can be chosen on the camera and there is no delay.

So, problem solved? Leave that piece of paper in the hot shoe and call it a day? Not so fast. I don’t need TTL, but I do need a feature called High Speed Sync (HSS), which requires a working smart connection between camera and trigger. Dang.

Measuring the lag

On the forums where people complained about the problem, I saw some claims that Godox fixed it via a firmware update in another one of their triggers, the older X1T-F, via an obscure “custom function”.

It was cheap enough, so I bought it. But I also wanted to be sure that the problem was indeed fixed, that there was no additional delay when using the X1T-F. I was not happy with just “feeling” the delay. And also I was curious as to exactly how much of a delay it was. And also I saw this as an opportunity to finally use the Arduino kit I bought 10 years ago.

So I set about constructing a device to actually measure it. What I came up with involves using the Arduino to electronically trigger the camera, then watch for the flash, and compute the time between the two.

S(leeve), R(ing) and T(ip)

To trigger the camera, I used its 2.5 mm jack remote port. Shorting the ring or tip (which are kept at a positive voltage by the camera) with the sleeve (kept at ground) respectively causes focusing or shutter release.

To electronically short those parts of the cable, I used some standard transistors.

Now, for the flash detection, I used a phototransistor. Photoresistors (also called LDR) are cheaper and more common in hobbyist electronic kits like the one I had, but they’re kind of slow to react to light, so they wouldn’t have picked up a short flash burst, or if they did, they would have introduced some lag of their own and skewed the measurement.

This is what I came up with.

The schematic…
…turned into a breadboard prototype on the computer…
…and a real prototype!

The idea is that when the button is pressed, the following sequence runs:

  1. shorts the jack’s Sleeve and Ring to trigger autofocus
  2. waits a bit to give the camera the chance to focus and be ready to take the shot
  3. shorts the jack’s Sleeve and Tip to trigger the shutter
  4. waits to detect the flash
  5. sends the time difference between steps 3 and 4 to the computer via the serial interface
The whole setup

The code is pretty straightforward:

The results

I tested a few different configurations:

  • Direct flash: the flash is directly attached to the camera without any wireless magic
  • XPro-F: the XPro-F trigger is mounted on the camera normally
  • XPro-F (dumb): the XPro-F mounted on the camera with a piece of paper to only allow the middle pin to make contact
  • X1T-F (cf11=0): the X1T-F trigger with the custom function 11 set to 0 (the default)
  • X1T-F (cf11=2): the X1T-F trigger with the custom function 11 set to 2
  • X1T-F (dumb): the X1T-F mounted with only the middle pin

In the XPro-F and X1T-F (cf11=0) configurations, the camera sets itself to TTL mode. In all the other configurations, it sets itself to Manual mode.

I measured each configuration 10 times, and there are the results:

You can see that all configurations where the camera is set to Manual mode have a 80 ms lag, while all the configurations where it’s in TTL mode have a 200 ms lag.


I was able to confirm that the Godox triggers cause an increased lag in shutter-release-to-flash response, most certainly due to their forcing of TTL mode, even when this mode is not needed.

I was able to measure that lag, which is 120 ms on top of the 80 ms base lag, or in other words, it multiplies it by two and a half. That’s indeed well into “annoyingly sluggish” territory. Which for me turns into “missing shots”.

My small Godox family

The only exception is the X1T-F trigger when configured with the custom function 11 set to 2, which makes the camera go to Manual mode. Things like HSS still work perfectly. This is what I will use for my photography from now on. I guess I won’t be able to blame the camera when I miss a shot now…

Still, I am a bit annoyed because I had to buy a new trigger, and a previous model compared to the XPro-F that I had. It is not only frustrating to use the older, less ergonomic X1T-F, but also it doesn’t really inspire confidence for the future if I’m stuck with it and never able to upgrade to future triggers.

But importantly, this custom function proves that it is technically possible for a trigger to negotiate Manual or TTL mode at will. This happens on-the-fly when you change the cf11. The trigger should do it automatically:

  • if all of the flash units’ power levels are set manually, the trigger should negotiate Manual mode with the camera to benefit from the smallest lag possible
  • if one or more of the flash units are set to TTL, only then should the trigger negotiate TTL mode with the camera

Godox, please fix your firmware.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store