Here's the code. (not yet tested tho!)
It compiles to 1222 entire bytes and uses a whole 10 bytes of RAM! I love embedded processors
revisions to code: replace the hardcoded LOW/HIGH with constants, as it turns out the relay module is active-low; replace clockCounting with clockStart and == with >= in the comparison, whoops.
Here’s the finished box plugged in and working. Not very exciting looking, but does the job and hopefully will continue to do so for years!
@kirby unplug it, haha. I can use the off switch on the fan itself if I need to turn it off manually.
@kirby you know what, I think tomorrow I’ll change it so pressing it while it’s on does turn it off. Doesn’t hurt to have that option.
@stibbons yeah, it's one of those things that's definitely good practise, but in this case all I need is to distinguish 0-499 ms press from 500+ ms press! The delay(500) does a good enough job of it -- since I don't have any concurrent timers/tasks, I might as well just hang waiting to sample again. If this was high-reliability I would probably debounce & check a minimum bound on the press duration too.