If it didn’t step back up, it’s probably still in the green zone on that middle graph. To avoid constant bouncing, it has a window of a few degrees where it won’t step up or down. If it gets above the window it steps down, and if it gets below the window it steps up, but if it stays in that zone, it won’t make any changes.
The MCU’s temperature units seem a bit odd. It gives me a reading of 74 for room temperature (70 F?), 87 if I hold a hair dryer on it at its hottest setting for a few minutes (135 F?), and 62 after resting in the freezer (10 F?). That seems to be something like 4 to 6 degrees F per thermal unit, and the no-change window is 2 of those units.
By default, it’s:
- 79 or more: step down (95 F?)
- 78: do nothing (90 F?)
- 77: do nothing (85 F?)
- 76 or less: step up (80 F?)
That could mean it needs to cool by 15 degrees F before it’ll step back up… which is a bit much. This is probably made worse by how slowly the heat transfers to the driver. Basically, the ceiling gets set a bit low in order to start the step-down sooner, but then when it later stabilizes it might end up too low.
Oh, and the readings differ by at least 5 thermal units between different MCUs of the same type. So, the hardcoded default is likely to be off by 25 F (or maybe more) due to manufacturing variances. I set the initial value to work just right on one light, then tried another identical light with identical code and it thought room temperature was “overheating”.
Anyway, I’d suggest reflashing it if you can, with the window set to maybe 1 unit instead of 2. That’s the minimum to avoid constant adjustments but small enough to make it step up easier. IIRC, I tried this and found it still adjusted too much, but your mileage may vary. Look for this part:
if ((temp < maxtemp - 2) && (actual_level < output)) {
actual_level ++;
}