в обучалках к ардуино вроде было написано так, что чуть ли не везде можно объявлять

если например рассмотреть попроще
boolean pin5 = digitalRead(5); тупо следит за состоянием пина, и если где-то в цикле дальше состояние поменяется, то она тоже как бы должна поменяться
вот полностью если пицот не видел еще
#include <Servo.h>
Servo servoX;
unsigned long time_x = millis();
unsigned long time_z = millis();
void setup()
{
servoX.attach(6);
servoY.attach(7);
servoX.write(90);
servoY.write(90);
Serial.begin(9600);
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
}
void loop()
{
while (Serial.available() > 0)
{
int cmd = Serial.read();
int x = servoX.read();
boolean pin3 = digitalRead(3);
boolean pin5 = digitalRead(5);
boolean timer_z = (millis() - time_z > 500);
if (millis() - time_x > 1000 && pin3) {
digitalWrite(3, LOW); }
switch (cmd)
{
case 'Z'
if (!pin5 && timer_z) {
digitalWrite (5, HIGH);
time_z = millis();}
else if (pin5 && timer_z) {
digitalWrite (5, LOW);
time_z = millis();}
break;
case 'X':
time_x = millis();
digitalWrite(3, HIGH);
break;
case 'R':
if (x < 180) { servoX.write(x + 1); }
break;
case 'L':
if (x > 0) { servoX.write(x - 1); }
break;
}
delay (20)
}
}