Capturing the input can be done using polling (in a task implemented as a state machine) or using an interrupt which sets a flag-variable when the input pin changes state to "button pressed".
The problem here is he is using some GPS code that is using interrupt. And he may have downloaded it from somewhere without actually wanting to dig in and modify it.
You would have to begin to understand it in order to add any additional interrupt handling that would definitely not interfere with anything timing sensitive. At least figure out how to make his interrupt lower priority. Not that checking a button state takes much time unless u screw up.
Of course if his Atmega has pins with IOC flags, he wouldn't even need to do that.
If he can redesign a pcb faster than to learn and write any of this new code.... that doesn't mean he is doing it wrong. He could be really great at designing pcbs, lol.
Or maybe he wrote all his GPS code, himself. And it is so borked and complicated that it is easier for him to leave it alone and work around it!!!
I'm surprised he knows how to figure out interUC communication and control and not interrupts though
Why not? It could be as simple in this case as one pin logic level read and a second line for reset signal. Or even just a read... he could be using the attiny as an array of one shot monostable multivibrators which hold the pin state for greater than the duration of the GPS interrupt.
Or... maybe he just used a preexisting arduino routine for I2C?
Interrupts are actually not that simple to use for button reading; less problems polling them. Switch bounce can give you interrupt bursts - this is fixable, but by the time you have it fixed, polling would be simpler and easier and have a "deterministic behavior" (including not potentially interfering with other functionality running on the same program).
There's a right place and time for everything. I recall an example of a faulty remote doorbell used to illustrate this I/O interrupt "problem." Faulty circuit caused the interrupt to retrigger, making the doorbell restart itself, indefinitely, not even finishing the first note of the song. In a case like this, interrupt was probably used to conserve battery power - to wake the ucontroller from sleep state. And the easy solution (for this "problem" would be for the ISR to turn itself off when it is serviced. And for the main program loop to turn it back on.... after the music/chime was over! Of course this doesn't fix the faulty circuit. So now you get to listen to the whole song over and over. So I dunno why this was ever used as an example in the first place.
Sometimes, interrupts are going to be a precious commodity for doing things that are wayyy faster and timing sensitive than human input. Sometimes ucontrollers are used to detect a doorbell being pressed.
To a lot of us, the button press problem is trivial. And if someone were making 1 million of these things, our knowledge would be valuable. If only these kind of situations were more common. LOL