Te dije que no podía funcionar mal, pero claro funciona mal y por qué?
Porque asi definiste los periodos
unsigned long tiempoAnterior = 0;
int periodo = 40000; // <== MAL DEFINIDO
byte temp = 0;
unsigned long tiempoAnterior2 = 0;
int periodo2 = 40000; // <== MAL DEFINIDO
Deben ser siempre unsigned long para periodo y periodo2.
Había otro leve error que era mas importante que este.. este lo arrastrabas de tu código y luego del switch debemos poner la variable persina = 0 para evitar que repita la secuencia.
En el caso de /arribatodo volvia a cargar millis() en la variable tiempoAnterior
Persiana.ino (6.91 KB)