I've made a small array for 3 brightness settings to be toggled by holding the button. I've preserved the original "auto mode" via 3 button presses in 2 seconds, and added an "off" mode when pressed 5 times in 2 seconds. Personally I like the GPIO 0 as a button pin because it makes these projects insanely easy and cheap, but to each his own.
Micros overflows every ~71.5 minutes. This can cause the newTime value to get stuck at a very high value while Micros rolls back to 0. When this happens the while condition in the sample loop is not met for a very long time. Changing the while condition to check for the difference between the two unsigned longs prevents this possibility (a negative outcome is not possible as there is no sign).