Control de fade in fade out matriz neopixel con esp8266 en IDE de Arduino

Hola amigos, estoy vuelto loco con un problema, espero que puedan ayudarme.
Para una obra de danza, necesito controlar unas matrices neopixel rgb de 8x8 a traves de una aplicación que hice con app inventor, y el micro es un esp8266.
La idea es que al apretar un boton de la app se encienda la matriz y haga un fade in y fade out, y al apretar stop en la app, que esta pare.
Tengo hecho el programa, probe haciendo una sub rutina que haga el fade con millis, pero el esp se resetea al primer ciclo.
Probé con un ciclo for, funciona bien pero no tengo como cortar el ciclo.
Alguna sugerencia?

se los agradeceria muchisimo.

Este es el código base:

#include <ESP8266WiFi.h>
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif

#define PIN D2

int variable = 0;
const char* ssid = "Tiempo";
const char* password = "marcoleta";
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(256, PIN, NEO_GRB + NEO_KHZ800);
void setup() {

 Serial.begin(115200);
 strip.begin();
 strip.setBrightness(150);
 strip.show(); // Initialize all pixels to 'off'
 strip.clear();
 delay(10);

 // prepare GPIO2

 // Connect to WiFi network
 Serial.println();
 Serial.println();
 Serial.print("Connecting to ");
 Serial.println(ssid);

 WiFi.begin(ssid, password);

 while (WiFi.status() != WL_CONNECTED) {
   delay(500);
   Serial.print(".");
 }
 Serial.println("");
 Serial.println("WiFi connected");

 // Start the server
 server.begin();
 Serial.println("Server started");

 // Print the IP address
 Serial.println(WiFi.localIP());



}

void loop() {
 WiFiClient client = server.available();
 if (!client) {
   return;
 }

 // Wait until the client sends some data
 Serial.println("new client");
 while (!client.available()) {
   delay(1);
 }

 // Read the first line of the request
 String req = client.readStringUntil('\r');
 Serial.println(req);
 client.flush();


 if (req.indexOf("/cyan") != -1)
 {
   variable = 1;
 }
 if (variable == 1)
 {

   for (int j = 5; j < 50; j++) //Fade in 1
   {
     for (int i = 0; i < 64; i++)
     {
       strip.setPixelColor(i, 0, j, 0);
       delay(50);
     }
   }

   for (int j = 50; j >= 5; j--) //fade out1
   {
     for (int i = 0; i < 64; i++) {
       strip.setPixelColor(i, 0, j, 0);
       delay(50);

     }
   }
   String req = client.readStringUntil('\r');
   Serial.println(req);
   client.flush();

   if (req.indexOf("/stop") != -1)
   {
     variable = 2;
   }

 }

 if (variable == 2);
 {
   for (int i = 0; i < 64; i++)
   {
     strip.setPixelColor(i, 0, 0, 0);
   }
 }
 delay(5000);
 Serial.println("Chiao");

 /*else {
   Serial.println("invalid request");
   client.stop();
   return;
   }*/

 client.flush();
 String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n\r\n";
 s += "CALUGA CONECTADA";

 client.print(s);
 delay(1);
 Serial.println("Client disonnected");
}

Saludos

JAime