detener will

Hola amigos, les cuento mi problema, tengo un arduino mega conectada con una shild ethernet, lo que estoy realizando es controlar las luces de la casa, hasta allí todo bien, el problema es que quiero que las luces hagan una secuencia automática y aleatoria, el problema que nose como salir del will para dejar todo apagado.

 //Automatico
           if (readString.indexOf("Autoon") >0){
          
              
              while (randomNumber2 < 20000)    // testea si es menor que 200
                    {
                     randomNumber2 = random(1000,9000); //elige el tiempo estimado
                    randomNumber = random(1, 8);   
                    
                  
                   Serial.println(randomNumber2);
                   Serial.println(randomNumber);
                   delay(randomNumber2); 

                   //aca deberia de detener el while con el Autooff
                                     
                  }
                 
                 
               
           }


       if (readString.indexOf("Autooff") > 0){
           
          
                    digitalWrite(7, LOW); //Encender Dormitorio
                    digitalWrite(6, LOW); //Encender Baño
                    digitalWrite(5, LOW); //Encender Living
                    digitalWrite(4, LOW); //Encender cocina
                    digitalWrite(3, LOW); //Encender patio trasero
                    digitalWrite(2, LOW); //Encender patio delantero
                    //apago todo
 
                  }

PD: LLevo 2 meses recién aprendiendo esto de arduino y me llama mucho la atención de seguir aprendiendo.

Saludos y gracias.

Sería que cada fin de while verifiques si hay datos nuevos. Si el comando “Autooff” es recibido, se ejecutará la instrucción break para salir del ciclo.

PD: si intencionalmente quieres provocar un ciclo infinito, sería más simple así:

while (1)

Ok entiendo que se tiene que realizar una verificación para poder llevar el break y terminar todo, pero nose como insertarlo, seria algo así lo que pienso.

 //Automatico
           if (readString.indexOf("Autoon") >0){
         
              
              while (randomNumber2 < 20000)    // testea si es menor que 200
                    {
                     randomNumber2 = random(1000,9000); //elige el tiempo estimado
                    randomNumber = random(1, 8);   
                    
                  
                   Serial.println(randomNumber2);
                   Serial.println(randomNumber);
                   delay(randomNumber2); 

                   //aca deberia de detener el while con el Autooff

                   if (cual condicion)   {
                    // break;
                     
                   }
                       
                                     
                  }    
           }


       if (readString.indexOf("Autooff") > 0){
           
                     digitalWrite(7, LOW); //Encender Dormitorio
                    digitalWrite(6, LOW); //Encender Baño
                    digitalWrite(5, LOW); //Encender Living
                    digitalWrite(4, LOW); //Encender cocina
                    digitalWrite(3, LOW); //Encender patio trasero
                    digitalWrite(2, LOW); //Encender patio delantero
                    Serial.println("Automatico off");
 
                  }

Gracias por responder.

if (cual condicion)
if (readString.indexOf("Autooff")

readString se actualiza con el puerto serie supongo, así que también se debe insertar el proceso de recibir y todo.

tampoco funciona :o

//Automatico
           if (readString.indexOf("Autoon") >0){
         
              
              while (randomNumber2 < 20000)    // testea si es menor que 20000
                    {
         andomNumber2 = random(1000,9000); //elige el tiempo estimado que estara prendida la ampolleta
       randomNumber = random(1, 8);   //elige cual salida se va a activar en donde la 1 esta libre.
                    
                  
                   Serial.println(randomNumber2);
                   Serial.println(randomNumber);
                   delay(randomNumber2); 

                   //aca deberia de detener el while con el Autooff pero no me funciona
                   if  (readString.indexOf("Autooff") ==0){ //no me funciona esta linea
                   Serial.println("afuera del del while");
                   }
                       
                                     
                  } 
                     
           }


       if (readString.indexOf("Autooff") > 0){
        
                    digitalWrite(7, LOW); //Encender Dormitorio
                    digitalWrite(6, LOW); //Encender Baño
                    digitalWrite(5, LOW); //Encender Living
                    digitalWrite(4, LOW); //Encender cocina
                    digitalWrite(3, LOW); //Encender patio trasero
                    digitalWrite(2, LOW); //Encender patio delantero
                    Serial.println("Automatico off");
 
                  }

Pasa de largo la rutina, incluso si coloco

 if (readString.indexOf("Autooff") > 0){
        
                    digitalWrite(7, LOW); //Encender Dormitorio
                    digitalWrite(6, LOW); //Encender Baño
                    digitalWrite(5, LOW); //Encender Living
                    digitalWrite(4, LOW); //Encender cocina
                    digitalWrite(3, LOW); //Encender patio trasero
                    digitalWrite(2, LOW); //Encender patio delantero
                    Serial.println("Automatico off");
 
                  }

lo que me muestra el serial es:

2095  //elige el tiempo estimado que estara prendida la ampolleta
4       //elige cual salida se va a activar en donde la 1 esta libre.
8454  //elige el tiempo estimado que estara prendida la ampolleta
5       //elige cual salida se va a activar en donde la 1 esta libre.
1289
7
5905
5
5123
1

y de aqui se queda pegado sin poder hacer nada, de echo me bloquea todas las otras salidas, se secuencia sigue y sigue, si le coloco off al modo automatico, no me toma la instrucción.

Si quieres que salga cuando Autooff==0, usa esto:

//Automatico
if (readString.indexOf("Autoon") >0)
{
 while(readString.indexOf("Autooff")!=0)
 {
 randomNumber2 = random(1000,9000); //elige el tiempo estimado que estara prendida la ampolleta
 randomNumber = random(1, 8);   //elige cual salida se va a activar en donde la 1 esta libre.
 Serial.println(randomNumber2);
 Serial.println(randomNumber);
 delay(randomNumber2);
 }
}

if (readString.indexOf("Autooff") > 0)
{
 digitalWrite(7, LOW); //Encender Dormitorio
 digitalWrite(6, LOW); //Encender Baño
 digitalWrite(5, LOW); //Encender Living
 digitalWrite(4, LOW); //Encender cocina
 digitalWrite(3, LOW); //Encender patio trasero
 digitalWrite(2, LOW); //Encender patio delantero
 Serial.println("Automatico off");
}

Si por el contrario te he entendido mal y quieres salir con Autooff>0, usa este otro:

//Automatico
if (readString.indexOf("Autoon") >0)
{
    while(readString.indexOf("Autooff")==0)
    {
        randomNumber2 = random(1000,9000); //elige el tiempo estimado que estara prendida la ampolleta
        randomNumber = random(1, 8);   //elige cual salida se va a activar en donde la 1 esta libre.
        Serial.println(randomNumber2);
        Serial.println(randomNumber);
        delay(randomNumber2);
    }
}

if (readString.indexOf("Autooff") > 0)
{
    digitalWrite(7, LOW); //Encender Dormitorio
    digitalWrite(6, LOW); //Encender Baño
    digitalWrite(5, LOW); //Encender Living
    digitalWrite(4, LOW); //Encender cocina
    digitalWrite(3, LOW); //Encender patio trasero
    digitalWrite(2, LOW); //Encender patio delantero
    Serial.println("Automatico off");
}

Ya comentaras.

Hola Alfaville Gracias por querer ayudarme, pero no logro salir del siclo al momento de seleccionar Autoon sigue y sigue.

//Automatico
if (readString.indexOf("Autoon") >0)
{
 while(readString.indexOf("Autooff")!=0)
 {
 randomNumber2 = random(1000,9000); //elige el tiempo estimado que estara prendida la ampolleta
 randomNumber = random(1, 8);   //elige cual salida se va a activar en donde la 1 esta libre.
 Serial.println(randomNumber2);
 Serial.println(randomNumber);
 delay(randomNumber2);
 }
}

if (readString.indexOf("Autooff") > 0)
{
 digitalWrite(7, LOW); //Encender Dormitorio
 digitalWrite(6, LOW); //Encender Baño
 digitalWrite(5, LOW); //Encender Living
 digitalWrite(4, LOW); //Encender cocina
 digitalWrite(3, LOW); //Encender patio trasero
 digitalWrite(2, LOW); //Encender patio delantero
 Serial.println("Automatico off");
}

También probé la otra opción que me dio

//Automatico
if (readString.indexOf("Autoon") >0)
{
	while(readString.indexOf("Autooff")==0)
	{
		randomNumber2 = random(1000,9000); //elige el tiempo estimado que estara prendida la ampolleta
		randomNumber = random(1, 8);   //elige cual salida se va a activar en donde la 1 esta libre.
		Serial.println(randomNumber2);
		Serial.println(randomNumber);
		delay(randomNumber2);
	}
}

if (readString.indexOf("Autooff") > 0)
{
	digitalWrite(7, LOW); //Encender Dormitorio
	digitalWrite(6, LOW); //Encender Baño
	digitalWrite(5, LOW); //Encender Living
	digitalWrite(4, LOW); //Encender cocina
	digitalWrite(3, LOW); //Encender patio trasero
	digitalWrite(2, LOW); //Encender patio delantero
	Serial.println("Automatico off");
}

Pero no parte el siclo cuando le coloco Autoon

Gracias a todos.