Then it sounds like you need to keep the previous result of digitalRead(heatbutton) in a variable and run your "run once" code when you see a transition from low to high.
Then it sounds like you need to keep the previous result of digitalRead(heatbutton) in a variable and run your "run once" code when you see a transition from low to high.