Bouzy,
The problem is that you calculate the value for "reading" only once before you enter "buttonfunc();". Buttonfunc then loops forever, waiting for reading to go HIGH -- which it never will -- and -- yikes! -- calling itself recursively! This is a crash waiting to happen (quickly!). Here's a better suggestion for buttonfunc():
void buttonfunc()
{
while (digitalRead(buttonPin) == HIGH)
; // do nothing!
Serial.println("Starting systems...");
}
Mikal