The normal way to read the button is to read the input pin status in a loop and handle debouncing at the same time.
However, if you want to sleep most of the time, polling is not an option. Instead, you can use interrupts, like pin change interrupt (PCINTxx).
So …
[more]