When you simulate a switch turning on, it turns on. Simulate it turning off, and it turns off. In the real world a switch turning on is actually a chaotic mess of stuttering contact and breaks in contact. It's all over the shop. The one and only thing it isn't, is on or off. It's everything except on or off.
It's called switch bounce, and I never saw it when I did my first demo video with the cardboard fish (it's true, that wasn't a real fish, that was just an actor), because the program was doing some linear thing where it moved onto the next bit that was a pause.
With the new chip, the bit that is pausing is different from the bit that's looking for fish pressing levers, and that's different from the bit reporting how many feeds they have had. All this means that a single lever press can be counted as a stack of them.
The the thing that makes me feel best about wasting three days on trying to solve this, is this bit from the last line of my code....
'TODO: work something out to counter switch bounce if required
I made a note of it ages ago, because I read about it and thought it might be an issue some time down the track.
Some days I'm smarter than I am on other days.
The days all look the same from the outside, but there is something different about them.
120 things in 20 years rarely Electronics - Sanity and switch bounce