From a quick look, you need to re-think how you are reading and 'debouncing' the buttons. There are lots of resources available to give you some information on debouncing. You would be much better off doing the read & debounce task in a timed interrupt.

I really like this routine for debouncing. It is quick and very efficient, and it really does work.
You will need to modify it to suit your monitored inputs.
I have used modified versions of this one several times using Timer1 at around 5 to 10 milliSeconds

I could help with this if you really need it, but you will learn a lot more by working it out yourself.
As you are using delay() a lot during your sketch, that approach will not work very well for debouncing.