Measure Dispensed Water, repeat with push button

What's all this about

	if (digitalRead(5)==LOW)
	{
		val = digitalRead(startpin);
		digitalWrite(5, val);
	}

What is pin 5 for? It is much easier to understand if you use names like you have with startpin

Why are you attaching and detaching the interrupt? It would be more usual to attach it in setup() and never detach it.

I need the program to repeat AFTER a pushbutton is pressed, instead of the delay, but I'm not sure how to achieve this.

You need a variable to keep track of the state of the system. The states seem to be waiting, starting and running ('W', 'S' and 'R'). If it is waiting then when you push the button it will change to starting. When it is starting it will turn on the relay and change to running. When it is finished running it will turn off the relay and change to waiting.

At the moment your button directly controls the machine, whereas it should really only change the state variable - and then only if it is in the waiting state.

...R