Monitor Serial no funciona ni hace nada

Estoy intentando hacer una casa inteligente, traté de unir estos dos códigos, el cual el primero sería para un sensor DHT 11 con una pantalla LCD 1602A y módulo I2C que muestre la temperatura y la humedad. El segundo es más sencillo, solo deberían encender o pagar una cadena de 5 leds mediante el monitor serial con las teclas numericas. Estos dos por separado funcionan bien, pero al momento de unirlos el código de los leds se vuelve inservible porque el monitor serial no responde ni muestra ninguna mensaje para poder mandar a encender/apagar los leds. Debo mencionar a que tal vez sea debido a que utilicé una IA para unirlos, ya que no sé mucho de programación

Estos son los que intenté unir:


#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

int SENSOR = 2;

DHT dht(SENSOR, DHT11);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C y dimensiones de la pantalla

void setup() {
  dht.begin();
  lcd.init();             // Inicializar la pantalla
  lcd.backlight();        // Encender la retroiluminación
}

void loop() {
  float humedad = dht.readHumidity();
  float temp = dht.readTemperature();

  // Ajustar el período de muestreo a 2 segundos
  delay(2000);

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(temp);
  lcd.print("C");

  lcd.setCursor(0, 1);
  lcd.print("Humedad: ");
  lcd.print(humedad);
  lcd.print("%");

  // Esperar un momento antes de la siguiente lectura
  delay(1000);
}

El otro

int leds[] = {2, 3, 4, 5, 6}; // Pin numbers for the LEDs
int numLeds = sizeof(leds) / sizeof(leds[0]); // Calculate the number of LEDs

void setup() {
  Serial.begin(9600);
  
  for (int i = 0; i < numLeds; i++) {
    pinMode(leds[i], OUTPUT);
  }
  
  Serial.println("TUTORIALES");
  Serial.println("ENCENDIDO Y APAGADO DE LED POR TECLADO");
  Serial.println("Presiona los números del 1 al 5 para alternar el estado de los LEDs, y 0 para apagar todos los LEDs.");
}

void loop() {
  if (Serial.available() > 0) {
    char letra = Serial.read();
    int ledIndex = letra - '0'; // Convert char to LED index
    
    if (ledIndex >= 0 && ledIndex <= numLeds) {
      if (ledIndex == 0) {
        for (int i = 0; i < numLeds; i++) {
          digitalWrite(leds[i], LOW); // Apagar todos los LEDs
        }
        Serial.println("Todos los LEDs apagados");
      } else if (ledIndex >= 1 && ledIndex <= numLeds) {
        digitalWrite(leds[ledIndex - 1], !digitalRead(leds[ledIndex - 1])); // Alternar estado del LED
        if (digitalRead(leds[ledIndex - 1])) {
          Serial.print("Led ");
          Serial.print(ledIndex);
          Serial.println(" encendido");
        } else {
          Serial.print("Led ");
          Serial.print(ledIndex);
          Serial.println(" apagado");
        }
      }
    }
  }
  
  delay(50); // Pequeño retraso para evitar problemas de lectura del teclado
}

Y cuando lo intenté unir:

#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

int SENSOR = 2;

DHT dht(SENSOR, DHT11);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C y dimensiones de la pantalla

int leds[] = {2, 3, 4, 5, 6}; // Pin numbers for the LEDs
int numLeds = sizeof(leds) / sizeof(leds[0]); // Calculate the number of LEDs

void setup() {
  dht.begin();
  lcd.init();             // Inicializar la pantalla
  lcd.backlight();        // Encender la retroiluminación

  Serial.begin(9600);

  for (int i = 0; i < numLeds; i++) {
    pinMode(leds[i], OUTPUT);
  }

  Serial.println("Guaposaurio Dice Bla Bla Bla TUTORIALES");
  Serial.println("ENCENDIDO Y APAGADO DE LED POR TECLADO");
  Serial.println("Presiona los números del 1 al 5 para alternar el estado de los LEDs, y 0 para apagar todos los LEDs.");
}

void loop() {
  // Código para el sensor DHT y la pantalla LCD
  float humedad = dht.readHumidity();
  float temp = dht.readTemperature();

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(temp);
  lcd.print("C");

  lcd.setCursor(0, 1);
  lcd.print("Humedad: ");
  lcd.print(humedad);
  lcd.print("%");

  // Esperar un momento antes de la siguiente lectura
  delay(1000);

  // Código para controlar los LEDs desde el teclado
  if (Serial.available() > 0) {
    char letra = Serial.read();
    int ledIndex = letra - '0'; // Convert char to LED index

    if (ledIndex >= 0 && ledIndex <= numLeds) {
      if (ledIndex == 0) {
        for (int i = 0; i < numLeds; i++) {
          digitalWrite(leds[i], LOW); // Apagar todos los LEDs
        }
        Serial.println("Todos los LEDs apagados");
      } else if (ledIndex >= 1 && ledIndex <= numLeds) {
        digitalWrite(leds[ledIndex - 1], !digitalRead(leds[ledIndex - 1])); // Alternar estado del LED
        if (digitalRead(leds[ledIndex - 1])) {
          Serial.print("Led ");
          Serial.print(ledIndex);
          Serial.println(" encendido");
        } else {
          Serial.print("Led ");
          Serial.print(ledIndex);
          Serial.println(" apagado");
        }
      }
    }
  }

  delay(50); // Pequeño retraso para evitar problemas de lectura del teclado
}

He hecho una simulación en proteus y en apariencia el código corre bien, tan solo hay dos detalles que comentar:

  • El pin del sensor del DHT y el pin del LED "1" es D2. Por lo tanto cuando quieres leer cosas del DHT lo leeras mal y el led que conectes en el no dejará de parpadear.

  • El delay provoca un retraso innecesario a la hora de encender o apagar el led con lo que la respuesta no es inmediata. Utiliza millis para leer el sensor.

Comprueba que has puesto bien la velocidad de transmisión en el terminal y que no este transmitiendo a una velocidad diferente.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.