Motor persiana DI·O (frequencia 433mhz)+ESP8266+sensor de lluvia

Hola muy buenas tardes, tengo este proyecto que estoy llevando a cabo y que ya tengo bastante avanzado por cierto, pero estoy intentando crear una variable para el sensor de lluvia, para que si el sensor de lluvia detecta lluvia el valor de la variable sea “1” y el arduino sepa que el sensor de lluvia ya a enviado el orden de bajada a la persiana y no lo envíe de nuevo ya que de lo contrario estando la persiana abajo cada 3 minutos me estará enviando para que baje la persiana. Y de lo contrario si el sensor de lluvia no detecta agua encima de el valor se reestablezca a “0” y vuelva a estar a la espera de que vuelva a llover.
Si alguien me puede echar una mano le estare muy agradecido ya que mi nivel es bajo y me lio bastante con las variables…

Mi codigo es este:

#include <SoftwareSerial.h>
#include <NewRemoteTransmitter.h>
SoftwareSerial BT1(7, 6); // RX | TX
String W =" ";
char w ;
#define DEBUG true
int rainSensePin= 0; // analog pin 0 - sensor i/p
int alertPin= 8; // digital pin 8 - alert o/p
int curCounter= 0; // current counter - goes up by 1 every second while sensing


NewRemoteTransmitter transmitter(16714474, 11, 267, 3);


 
void setup(){
   Serial.begin(9600);
   BT1.begin(9600);
   pinMode(alertPin, OUTPUT);
   pinMode(rainSensePin, INPUT);
  
  
  sendData("AT+RST\r\n",2000,DEBUG); // resetea el  modulo
  sendData("AT+CWMODE=1\r\n",1000,DEBUG); // configure el modulo con AP y Estación al mismo tiempo
  String idstring = ("\"missid\"");                               // enter ssid here Note the format
  String keystring = ("\"mipassword\"");             //enter key here    "            "
  String connectstring = "AT+CWJAP=";                // AT command start
         connectstring += idstring;                        // add in the ssid
         connectstring += ",";                               //put in the comma 
         connectstring += keystring;                      // add the key
         connectstring += "\r\n";                           // add the cr lf
     
  sendData(connectstring,5000,DEBUG);             // send it as connectstring.
  sendData("AT+CIFSR\r\n",6000,DEBUG); // Este comandos nos indica la configuración ip que ha tomado nuestro módulo
  sendData("AT+CIPMUX=1\r\n",2000,DEBUG); // Configura multiples coneciones
  sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // Inicializa el servidor web
}
 

void loop()
 { 

  int rainSenseReading = analogRead(rainSensePin);
   Serial.println(rainSenseReading); // use this for serial monitoring if available
   delay(10);  // no espero mucho porque si no bloque puerto serie
   // check to see how long it is raining at the threshold level
   // rain strength value from 0 - 1023
   // heavy rain -to- no rain.
   if (curCounter >= 30)
  {               delay (180000);
                  transmitter.sendUnit(0, true);
                   Serial.println("Bajando 100% por lluvia");
  }
   // If raining is continuing for x amount of time raise an alert
   // When raining is no longer detected, reset the counter
   if (rainSenseReading <300){ // while raining at threshold level - see text
      curCounter++; // increment sensing counter
   }
   
   else if (rainSenseReading >300) { // if not raining at threshold level
      digitalWrite(alertPin, LOW); // don't raise an alert
      curCounter = 0; // reset the counter to 0
   }
 
 
  
  if (BT1.available())                // Lo que entra por WIFI à Serial
         { w = BT1.read() ;
           Serial.print(w);
           W = W + w ;                    // Vamos montando un String con lo que entra
         }
      if (Serial.available())             // Lo que entra por Serial à WIFI
         {  char s = Serial.read();
            BT1.print(s);
         }
      if ( w == '\n')                     // Sin han pulsado intro
         { if ( W.indexOf("P2") > 0 )    // Comprobamos si P2 esta incluido en el string
               {   transmitter.sendUnit(0, true);
                   Serial.println("Bajando 100%");
                   // Espera 16 sg
                   delay(16000);
                   //Vuelvo a enviar comando para detener la persiana pasados 16 segundos
                   transmitter.sendUnit(0, true);
                   Serial.println("Ya ha bajando al 100%");
               }

          { if ( W.indexOf("P7") > 0 )    // Comprobamos si P7 esta incluido en el string
               {   transmitter.sendUnit(0, true);
                   Serial.println("Bajando 75%");
                   // Espera 14 sg
                   delay(14000);
                   //Vuelvo a enviar comando para detener la persiana pasados 14 segundos
                   transmitter.sendUnit(0, true);
                   Serial.println("Ya ha bajando al 75%");
               }

          { if ( W.indexOf("P11") > 0 )    // Comprobamos si P4 esta incluido en el string
               {    transmitter.sendUnit(0, true);
                    Serial.println("Bajando 50%");
                    // Espera 11 sg
                    delay(11000);
                    //Vuelvo a enviar comando para detener la persiana pasados 11 segundos
                    transmitter.sendUnit(0, true);
                    Serial.println("Ya ha bajando al 50%");
               }

          { if ( W.indexOf("P6") > 0 )    // Comprobamos si P6 esta incluido en el string
               {     transmitter.sendUnit(0, true);
                     Serial.println("Bajando 25%");
                     // Espera 5 sg
                     delay(5000);
                     //Vuelvo a enviar comando para detener la persiana pasados 5 segundos
                     transmitter.sendUnit(0, true);
                     Serial.println("Ya ha bajando al 25%");
               }
  
          { if ( W.indexOf("P1") > 0 )    // Comprobamos si P1 esta incluido en el string
               {     transmitter.sendUnit(0, false);
                     Serial.println("Subiendo 100%");
                     // Espera 16 sg
                     delay(16000);
                     //Vuelvo a enviar comando para detener la persiana pasados 16 segundos
                     transmitter.sendUnit(0, false);
                     Serial.println("Ya ha subido al 100%");
               }

          { if ( W.indexOf("P3") > 0 )    // Comprobamos si P3 esta incluido en el string
               {      transmitter.sendUnit(0, false);
                      Serial.println("Subiendo 50%");
                      // Espera 11 sg
                      delay(11000);
                      //Vuelvo a enviar comando para detener la persiana pasados 11 segundos
                      transmitter.sendUnit(0, false);
                      Serial.println("Ya ha llegado al 50%");
               }
          { if ( W.indexOf("P5") > 0 )    // Comprobamos si P5 esta incluido en el string
               {      transmitter.sendUnit(0, false);
                      Serial.println("Subiendo 25%");
                      // Espera 5 sg
                      delay(5000);
                      //Vuelvo a enviar comando para detener la persiana pasados 5 segundos
                      transmitter.sendUnit(0, false);
                      Serial.println("Ya ha llegado al 25%");
               }

          { if ( W.indexOf("P8") > 0 )    // Comprobamos si P8 esta incluido en el string
               {      transmitter.sendUnit(0, false);
                      Serial.println("Subiendo 75%");
                      // Espera 14 sg
                      delay(14000); 
                      //Vuelvo a enviar comando para detener la persiana pasados los 14 segundos
                      transmitter.sendUnit(0, false);
                      Serial.println("Ya ha llegado al 75%");
               }
        
    W = "" ;  w = ' ' ;                    // Limpiamos las variables
         }
         }}}}}}}}



          
String sendData(String command, const int timeout, boolean debug)
{
    String cadena = "";
    
    BT1.print(command); // enviar el carácter leído al modulo
    
    long int time = millis();
    
    while( (time+timeout) > millis())
    {
      while(BT1.available())
      {
        
        // Muestra los Datos de salida del modulo por el seguimiento de la serie
        char c = BT1.read(); //Lee el proximo caracter
        cadena+=c;
      }  
    }
    
    if(debug)
    {
      Serial.print(cadena);
    }
    
    return cadena;
}

Gracias de antemano.
Saludos

define esto como global

bool flagBajoPersiana = true;   // 1 persiana baja 0 persina alta

y luego

   if (!flagBajoPersina && curCounter >= 30)   { 
      delay (180000);
      transmitter.sendUnit(0, true);
      Serial.println("Bajando 100% por lluvia");
      flagBajoPersina = true;     // Persiana baja
   }
   
   // If raining is continuing for x amount of time raise an alert
   // When raining is no longer detected, reset the counter
   if (rainSenseReading < 300){ // while raining at threshold level - see text
      curCounter++; // increment sensing counter
   }
   
   else if (rainSenseReading >300) { // if not raining at threshold level
      digitalWrite(alertPin, LOW); // don't raise an alert
      curCounter = 0; // reset the counter to 0
      flagBajoPersina = false;     // habilito el flagBajoPersiana para bajar si llueve.
                                   // ahora no llueve xq rainSenseReading >300
   }

Me dice que no lo he declarado: ‘flagBajoPersina’ was not declared in this scope
Y así es como he añadido la variable bool:

#include <SoftwareSerial.h>
#include <NewRemoteTransmitter.h>
SoftwareSerial BT1(7, 6); // RX | TX
String W =" ";
char w ;
#define DEBUG true
int rainSensePin= 0; // analog pin 0 - sensor i/p
int alertPin= 8; // digital pin 8 - alert o/p
int curCounter= 0; // current counter - goes up by 1 every second while sensing
bool flagBajoPersiana = true;   // 1 persiana baja 0 persina alta


NewRemoteTransmitter transmitter(16714474, 11, 267, 3);

 
void setup(){
   Serial.begin(9600);
   BT1.begin(9600);
   pinMode(alertPin, OUTPUT);
   pinMode(rainSensePin, INPUT);
   
   
  
  
  sendData("AT+RST\r\n",2000,DEBUG); // resetea el  modulo
  sendData("AT+CWMODE=1\r\n",1000,DEBUG); // configure el modulo con AP y Estación al mismo tiempo
  String idstring = ("\"missid\"");                               // enter ssid here Note the format
  String keystring = ("\"mipassword\"");             //enter key here    "            "
  String connectstring = "AT+CWJAP=";                // AT command start
         connectstring += idstring;                        // add in the ssid
         connectstring += ",";                               //put in the comma 
         connectstring += keystring;                      // add the key
         connectstring += "\r\n";                           // add the cr lf
     
  sendData(connectstring,5000,DEBUG);             // send it as connectstring.
  sendData("AT+CIFSR\r\n",6000,DEBUG); // Este comandos nos indica la configuración ip que ha tomado nuestro módulo
  sendData("AT+CIPMUX=1\r\n",2000,DEBUG); // Configura multiples coneciones
  sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // Inicializa el servidor web
}
 

void loop(){

 
  if (!flagBajoPersina && curCounter >= 30)   { 
      delay (180000);
      transmitter.sendUnit(0, true);
      Serial.println("Bajando 100% por lluvia");
      flagBajoPersina = true;     // Persiana baja
   }
   
   // If raining is continuing for x amount of time raise an alert
   // When raining is no longer detected, reset the counter
   if (rainSenseReading < 300){ // while raining at threshold level - see text
      curCounter++; // increment sensing counter
   }
   
   else if (rainSenseReading >300) { // if not raining at threshold level
      digitalWrite(alertPin, LOW); // don't raise an alert
      curCounter = 0; // reset the counter to 0
      flagBajoPersina = false;     // habilito el flagBajoPersiana para bajar si llueve.
                                   // ahora no llueve xq rainSenseReading >300
   }
 
 
  
  if (BT1.available())                // Lo que entra por WIFI à Serial
         { w = BT1.read() ;
           Serial.print(w);
           W = W + w ;                    // Vamos montando un String con lo que entra
         }
      if (Serial.available())             // Lo que entra por Serial à WIFI
         {  char s = Serial.read();
            BT1.print(s);
         }
      if ( w == '\n')                     // Sin han pulsado intro
         { if ( W.indexOf("P2") > 0 )    // Comprobamos si P2 esta incluido en el string
               {   transmitter.sendUnit(0, true);
                   Serial.println("Bajando 100%");
                   // Espera 16 sg
                   delay(16000);
                   //Vuelvo a enviar comando para detener la persiana pasados 16 segundos
                   transmitter.sendUnit(0, true);
                   Serial.println("Ya ha bajando al 100%");
               }

          { if ( W.indexOf("P7") > 0 )    // Comprobamos si P7 esta incluido en el string
               {   transmitter.sendUnit(0, true);
                   Serial.println("Bajando 75%");
                   // Espera 14 sg
                   delay(14000);
                   //Vuelvo a enviar comando para detener la persiana pasados 14 segundos
                   transmitter.sendUnit(0, true);
                   Serial.println("Ya ha bajando al 75%");
               }

          { if ( W.indexOf("P11") > 0 )    // Comprobamos si P4 esta incluido en el string
               {    transmitter.sendUnit(0, true);
                    Serial.println("Bajando 50%");
                    // Espera 11 sg
                    delay(11000);
                    //Vuelvo a enviar comando para detener la persiana pasados 11 segundos
                    transmitter.sendUnit(0, true);
                    Serial.println("Ya ha bajando al 50%");
               }

          { if ( W.indexOf("P6") > 0 )    // Comprobamos si P6 esta incluido en el string
               {     transmitter.sendUnit(0, true);
                     Serial.println("Bajando 25%");
                     // Espera 5 sg
                     delay(5000);
                     //Vuelvo a enviar comando para detener la persiana pasados 5 segundos
                     transmitter.sendUnit(0, true);
                     Serial.println("Ya ha bajando al 25%");
               }
  
          { if ( W.indexOf("P1") > 0 )    // Comprobamos si P1 esta incluido en el string
               {     transmitter.sendUnit(0, false);
                     Serial.println("Subiendo 100%");
                     // Espera 16 sg
                     delay(16000);
                     //Vuelvo a enviar comando para detener la persiana pasados 16 segundos
                     transmitter.sendUnit(0, false);
                     Serial.println("Ya ha subido al 100%");
               }

          { if ( W.indexOf("P3") > 0 )    // Comprobamos si P3 esta incluido en el string
               {      transmitter.sendUnit(0, false);
                      Serial.println("Subiendo 50%");
                      // Espera 11 sg
                      delay(11000);
                      //Vuelvo a enviar comando para detener la persiana pasados 11 segundos
                      transmitter.sendUnit(0, false);
                      Serial.println("Ya ha llegado al 50%");
               }
          { if ( W.indexOf("P5") > 0 )    // Comprobamos si P5 esta incluido en el string
               {      transmitter.sendUnit(0, false);
                      Serial.println("Subiendo 25%");
                      // Espera 5 sg
                      delay(5000);
                      //Vuelvo a enviar comando para detener la persiana pasados 5 segundos
                      transmitter.sendUnit(0, false);
                      Serial.println("Ya ha llegado al 25%");
               }

          { if ( W.indexOf("P8") > 0 )    // Comprobamos si P8 esta incluido en el string
               {      transmitter.sendUnit(0, false);
                      Serial.println("Subiendo 75%");
                      // Espera 14 sg
                      delay(14000); 
                      //Vuelvo a enviar comando para detener la persiana pasados los 14 segundos
                      transmitter.sendUnit(0, false);
                      Serial.println("Ya ha llegado al 75%");
               }
        
    W = "" ;  w = ' ' ;                    // Limpiamos las variables
         }
         }}}}}}}}



          
String sendData(String command, const int timeout, boolean debug)
{
    String cadena = "";
    
    BT1.print(command); // enviar el carácter leído al modulo
    
    long int time = millis();
    
    while( (time+timeout) > millis())
    {
      while(BT1.available())
      {
        
        // Muestra los Datos de salida del modulo por el seguimiento de la serie
        char c = BT1.read(); //Lee el proximo caracter
        cadena+=c;
      }  
    }
    
    if(debug)
    {
      Serial.print(cadena);
    }
    
    return cadena;
}

surbyte:
define esto como global

bool flagBajoPersiana = true;   // 1 persiana baja 0 persina alta

y luego

   if (!flagBajoPersina && curCounter >= 30)   { 

delay (180000);
     transmitter.sendUnit(0, true);
     Serial.println(“Bajando 100% por lluvia”);
     flagBajoPersina = true;     // Persiana baja
  }
 
  // If raining is continuing for x amount of time raise an alert
  // When raining is no longer detected, reset the counter
  if (rainSenseReading < 300){ // while raining at threshold level - see text
     curCounter++; // increment sensing counter
  }
 
  else if (rainSenseReading >300) { // if not raining at threshold level
     digitalWrite(alertPin, LOW); // don’t raise an alert
     curCounter = 0; // reset the counter to 0
     flagBajoPersina = false;     // habilito el flagBajoPersiana para bajar si llueve.
                                  // ahora no llueve xq rainSenseReading >300
  }

Y no te diste cuenta que el error es porque yo escribi
flagBajoPersina en lugar de flagBajoPersiana?

Madre mia que mal esta uno a esas horas, llevas toda la razón del mundo.
Supongo que hoy mas fresco me abría dado cuenta, pero ayer cansado ya la verdad que no me di cuenta y por mas que insistiera no me hubiese dado cuenta.
Lo siento y muchas gracias por tu ayuda! esta tarde probare haber que tal se comporta.
Yo creo que el siguiente inconveniente que me voy a encontrar y creo que sera el ultimo sera cuando pare de llover y el sensor todavía este mojado. Creo que le voy a dar unos grados de inclinación al sensor para que no acumule agua y no se quede estanca en el sensor. Por ahora no se me ocurre otra manera de hacerlo. Pero bueno eso ya a base de pruebas iré puliendo. De nuevo gracias y disculpas @Surbyte!

surbyte:
Y no te diste cuenta que el error es porque yo escribi
flagBajoPersina en lugar de flagBajoPersiana?

Y no esperes a que llueve.
Has la prueba con el sensor sin comandar nada y mira en el monitor serie como se comporta.
O prende apaga un led
Usa una manguera con regador para controla la lluvia y verás que funciona del mismo modo.
Y podras ver como ajustarlo.