A ver, te cuento un poco por encima...
todo lo que pongas antes del void loop, son por decirlo de alguna manera, cosas que solo se van a ejecutar una vez, antes de correr el programa. Por ejemplo, declarar las variables, las entradas y salidas de tus pines, etc...
Luego viene el void setup, eso es la "puesta en marcha", aquí tienes que meter todo lo que quieres que se arranque, o se inicie, antes de empezar con el programa en si. Por ejemplo, darle un valor a una variable para que al iniciar el programa, ésta se inicie con un valor predeterminado (por ejemplo, darle HIGH al pin 13 y que arranque el programa con el led encendido, o poner un servo en posición 0 grados...). También iniciarás, si conviene, el Serial, el LCD, en general todo aquello que necesites arrancar una sola vez.
Luego viene el void loop, esto lo que hace es ejecutar todas las órdenes que le metas una y otra vez, a miles de ciclos por segundo. Aquí pondrás todo el programa, leer el estado de un pin para ver si se ha pulsado un botón, las lecturas de los pines análogicos, todo.
Básicamente esta es la estructura de un código, luego hay una serie de funciones que "pausan el loop", o realizan una función diferente y luego continúa donde se había quedado...
Conviene que leas y estudies un poco los ejemplos que te vienen, a efectos de entender qué y porqué está cada cosa en cada sitio...
Respecto a lo de que se reinicia tu programa continuamente, verás que has declarado unas variables dentro del loop, recuerda que esto va dando vueltas y ejecutando todo lo que encuentre, así que a cada vuelta, las variables las está poniendo a cero. Salvo que ese sea tu cometido, mete las variables en el setup, fuera del loop. De ese modo, cada ve que el loop se reinicie, la variable tendrá el valor que le hayas dicho la última vez, no las pondrá a cero.
Espero haberte ayudado, suerte y a seguir!