If you need this then you need to be able to break out of a loop from a command in the interrupt service routine. You can not do this. You can only jump out of a loop when you check something and if you are going to check the state of the flag of the switches you might as well check the switches at the same time.

Now what you need to do is to write the whole program as a state machine, using the blink without delay technique. Look at that technique, it is as simple as it can get. Then grow it to cover your sequence.

So what you do it look at the milis timer and decide what you want to do next to advance the sequence, to look at the switches and so on.

As a final point you are altering the brightness of the LEDs by applying PWM to the shift register's output enable. This will always change the brightness of all the LEDs that are on, that is all the LEDs that have a one in the shift register. All the other LEDs will be off. So I think you can not get what you want with your current hardware setup. As I understand it you want one LED to fade up with some of the others being on and the rest being off.

That is correct, I have 4 LEDs which need lighting up one at a time, these stay on but once it receives the interrupt from the button it shifts to the opposite and starts the loop with the last 4 LEDs each one fading up at a time.

If this is not possible, can you send me a wiring diagram to achieve what I need.

If you want to do it with hardware then you need another chip. There are lots of chips you can use for this but it is extra expense and some of the chips are surface mount only so you need good soldering skills.

ok so an update, thanks for you advice, everything is running swimmingly although I do ask for your help once again.

So have two buttons that both need the option to be pressed twice, what I am after is setting a shift register to run the LSB outputs which produces 4 led's lit, then pressing the same button runs the method for MSB outputs to be lit, the things is I have set a boolean value to show when the button is pressed and when its not but can't for the life of me work out why its not doing what I want.

It would help with a better description of what you want.There is a difference between a button being pressed and a button being pressed for a second time. You don't seem to be making that distinction on your code, do you need to?What you want to think of is transitions, to detect a button pressed and button released. I think the just pressed is giving you the wrong thing to think about. It is that you need to detect and use that to trigger what you want to do.

That is clearer, thanks. What you need is a state machine diagram. http://en.wikipedia.org/wiki/State_diagramDraw what you want to implement and then just monitor the switches for the appropriate transitions. Having that will make the coding easy. As it is your code is a jumble of logic that won't implement what you want.