[SOLUCIONADO] Proyecto de hidroponia manejada con serial

Buenos días a todos!

El mismo es un proyecto de hidroponia automatizada. Decidí que lo mas conveniente seria poder manejar las distintas opciones desde la PC conectada al Arduino. Para el mismo, utilizo dos sensores, un DHT11 y un sensor de humedad de suelo, y aparte, una bomba de agua. Estoy utilizando un Arduino Mega, todo va conectado a los puertos digitales, excepto la analógica del DTHT11.

La idea del nuevo código es la siguiente:

Cuando pulso "1" debe sensar y arrojar dichos datos en el serial. Al pulsar "2" enciende una bomba de agua.

Bien, con el uso de millis() y mejorando mi código, lo convertí en este:

#include 

#define DHTPIN 2     // Pin donde está conectado el sensor

#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);
int sensor_pin = A0;
int output_value ;
bool flag = true;
int val;
int m;

void setup() {
  Serial.begin(9600);
  Serial.println("Sistema iniciado, espere tres segundos minimo para continuar.");
  dht.begin();
  pinMode(13, OUTPUT);
}

long tiempoUltimaLectura=0;; //Para guardar el tiempo de la última lectura
void loop() {
  if (flag) {
      Serial.println("Presione 1 si solo desea sensar, 2 si desea encender la bomba o 3 si desea desconectar: ");
      flag = false;
  }
  m=1;
  while(Serial.available()){
    val=Serial.read();
    if (val != '\n' && val != '\r') {
    if (val=='1'){
    //---------Lecturas del sensor-------------------------
    if(millis()-tiempoUltimaLectura>2000) {
      for (int i = 0; i < 5; i++){
      float h = dht.readHumidity(); //Leemos la Humedad
      float t = dht.readTemperature(); //Leemos la temperatura en grados Celsius
      float f = dht.readTemperature(true); //Leemos la temperatura en grados Fahrenheit
      //--------Envio las lecturas por el puerto serial-------------
      Serial.print("Humedad: ");
      Serial.print(h);
      Serial.print("%t ");
      Serial.print("Temperatura: ");
      Serial.print(t);
      Serial.print("°C ");
      Serial.print(f);
      Serial.println("°F ");
      tiempoUltimaLectura=millis(); //actualizamos el tiempo de la última lectura
      
      output_value= analogRead(sensor_pin);
      output_value = map(output_value,550,0,0,100);
      delay(500);

      if(output_value < 50)
      {
      Serial.println("Hay humedad menor a 50%."); 
      }
     
      if(output_value > 50)
      {
      Serial.println("Hay humedad mayor a 50% : ");
      Serial.println(output_value); 
      }
      delay(500);
    }
    }
  //----Fin de las lecturas ------------------------
    }
    if (val=='2'){
      digitalWrite(13, HIGH); 
      delay(10000);              
      digitalWrite(13, LOW);    
      delay(500);
      } 
    if (val=='3'){
      Serial.println("Sistema finalizado.");
      while (m=1){
      }
    }
      Serial.println("¿Desea modificar algun parametro?");
  }
  flag = true;
}
}

Por favor lee las Normas del foro y edita tu post para que podamos ver el código. Usa etiquetas para código . Mira en las normas como se hace

Bien! Supongo que ahí esta corregido. Espero si alguien puede ayudarme con este lio.

Tu problema son los delays, no se puede construir un programa complejo usándolos, deberías reescribir tu programa utilizando la función millis(9

Bien, por lo que entiendo. La diferencia entre los delay() y los millis(), es que el primero bloquea el programa y el otro no. Pero, al cambiarlos en mi caso, esto no generara que el Arduino sense e intente enviar información una sobre otra hacia el serial?

Porque lo haces mal. Para entender como usarlos ve a

Ve a Documentación => Indice de temas tutoriales => millis() y también lee máquina de estados.

LUego de entenderlo nos comentas y te diremos como modificarlo o intentalo por tu cuenta a ver como va.

Bien, ahí modifique el código y plantee mis nuevos inconvenientes. Gracias por la ayuda.