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