#include <Arduino.h>

/* EL UNICO DETALLE que me falta corregir y no logro darle solución es que al presionar la parada de emergencia y volver a iniciar el sistema, si el rango de temperatura está en el medio entre los valores mínimo y máximo de histeresis , el sistema no me hace acción de control , no enciende el horno ni los extractores, solo muestra la temperatura, tengo que esperar a que caiga solo la valor mínimo para que pueda arrancar nuevamente y lo que quiero es que al pulsar la emergencia y la volver a iniciar inmediatamente si los valores de temperatura están en el rango medio (valor mínimo< rango medio<40°) el sistema siga haciendo exactamente los mismo q venía haciendo mates de pararlo,  
Solo me está faltando eso. 
*/

float temperatura   = 0;
int Relepin         = 8;
int extractores     = 7;
int tempPin         = tempPin;

int variableT       = 0;
int flag            = 0;

int vanalog         = 0;
float temp          = 0;
float suma          = 0;
int muestras        = 0;
String datorecibido;
unsigned long lgUpdateTime;

void setup() {
  Serial.begin(9600);
  pinMode(Relepin, OUTPUT);
  pinMode(extractores, OUTPUT);

  digitalWrite(Relepin, HIGH);
  digitalWrite(extractores, HIGH);
  lgUpdateTime = millis();
}

void loop() {
  digitalWrite(Relepin, HIGH);
  // digitalWrite(extractores, HIGH);

  escuchar_bluetooth();
  leertemperatura();
  condiciones();

  // extractores_on_off();
  // temp_intermedia();

  while (flag == 1)   {

    digitalWrite(Relepin, LOW);

    escuchar_bluetooth();
    leertemperatura();
    condiciones();
    // extractores_on_off();
    // temp_intermedia();
  }
}

void leertemperatura() {
  if (millis() - lgUpdateTime > 1000) {// el retraso ser? de 1 segundo
    suma = 0;
    for (muestras = 0; muestras < 10; muestras++)    {
      vanalog = analogRead(tempPin);
      delay(1);
      temp = (float)(vanalog * 0.4887);
      suma = suma + temp;
    }
    temperatura = suma / 10;
    Serial.println(temperatura, 0);
    lgUpdateTime = millis();
  }
}
void escuchar_bluetooth() {

  if (Serial.available())   {
    datorecibido = String("");
    while (Serial.available())  {

      datorecibido = datorecibido + char(Serial.read());
      delay(1);
      variableT = datorecibido.toInt();
    }
  }
}

void condiciones()  {
  if (temperatura <= variableT)   {
    digitalWrite(extractores, HIGH);
    flag = 1;
  }
  else if (temperatura >= 40 || variableT == 0)   {
    digitalWrite(extractores, LOW);
    flag = 0;
  }

  if (variableT == 0)   {
    digitalWrite(extractores, HIGH);
    digitalWrite(Relepin, LOW);
  }
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
pot1:GND
pot1:SIG
pot1:VCC