Problema con la libreria prothothreads

no funciona mi codigo con esta libreria. Trato que me muestre un mensaje en una lcd y poder manejar el sim800L pero no me da el sim 800 y no hay cambio de mensjaes en la LCD. aca dejo el codigo. El problema que tengo es con los retrasos.

#include <pt.h>
#include <LCD_I2C.h>
#include <DHT.h>
#include <SoftwareSerial.h>

struct pt MensajesLCD;
struct pt Sim800;

LCD_I2C lcd(0x27, 16, 2);
#define DHTPIN 3
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

const int trigger = 8;
const int echo = 9;

SoftwareSerial Sim800_Rx_Tx(10, 11);
char incoming_char;
String SMS_Message;
int flag;

void setup() {
  dht.begin();
  lcd.begin();
  lcd.backlight();
  Serial.begin(9600);
  Sim800_Rx_Tx.begin(9600);
  PT_INIT(&MensajesLCD);
  PT_INIT(&Sim800);
}

void loop() {
 // Informacion(&MensajesLCD);
  RecibeMensaje(&Sim800);
}

void Informacion(struct pt *pt) {
  PT_BEGIN(pt);
  static long t = 0;

  pinMode(trigger, OUTPUT);
  pinMode(echo, INPUT);

  while (true) {
    float Temp = Temperatura();
    float Hum = Humedad();
    
    // Limpiar y actualizar la pantalla con los nuevos datos
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Temp: ");
    lcd.print(Temp);
    lcd.print("    "); // Espacios en blanco para borrar datos antiguos
    lcd.setCursor(0, 1);
    lcd.print("Hum: ");
    lcd.print(Hum);

    t = millis();
    PT_WAIT_UNTIL(pt, (millis() - t) >= 3000);

    float ST = SensacionTermica();
    float Dist = Distancia();
    
    // Limpiar y actualizar la pantalla con los nuevos datos
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("ST: ");
    lcd.print(ST);
    lcd.print("    "); // Espacios en blanco para borrar datos antiguos
    lcd.setCursor(0, 1);
    lcd.print("Distancia: ");
    lcd.print(Dist);

    t = millis();
    PT_WAIT_UNTIL(pt, (millis() - t) >= 3000);
  }
  PT_END(pt);
}

void RecibeMensaje(struct pt *pt) {
  PT_BEGIN(pt);
  long t = 0;
  t = millis();
  PT_WAIT_UNTIL(pt, (millis() - t) >= 12000);

  Sim800_Rx_Tx.println("AT");
  t = millis();
  PT_WAIT_UNTIL(pt, (millis() - t) >= 200);
  Sim800_Rx_Tx.print("AT+CNMI=2,2,0,0,0\r");
  t = millis();
  PT_WAIT_UNTIL(pt, (millis() - t) >= 200);
  Serial.println("SIM800L listo...");

  do {
    if (Sim800_Rx_Tx.available() > 1) {
      incoming_char = Sim800_Rx_Tx.read();
      delay(10);

      if (incoming_char == '#') {
        flag = 1;
        SMS_Message = "";
        while (flag == 1) {
          incoming_char = Sim800_Rx_Tx.read();
          delay(10);
          if (incoming_char != '#') {
            SMS_Message = String(SMS_Message + incoming_char);
          } else {
            flag = 0;
          }
        }

        Serial.println(SMS_Message);
      } else {
        flag = 0;
      }
    }
  } while (true);
  PT_END(pt);
}

float Distancia() {
  digitalWrite(trigger, LOW);
  delayMicroseconds(5);
  digitalWrite(trigger, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger, LOW);
  return pulseIn(echo, HIGH) / 58.2;
}

float Temperatura() {
  return dht.readTemperature();
}

float Humedad() {
  return dht.readHumidity();
}

float SensacionTermica() {
  float Temp = Temperatura();
  float Hum = Humedad();
  if (!isnan(Temp) && !isnan(Hum)) {
    return dht.computeHeatIndex(Temp, Hum, false);
  }
  return 0.00;
}

De antemano agradezco su ayuda Le Saluda Pablo Pisquiy

Sigues con el problema?

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