Tengo una duda con la programación de un control de temperatura utilizando el sensor DS18B20 y TelegramBot, lo que se quiere es que cuando llegue a una cierta temperatura se mande únicamente un solo mensaje, pero este sigue mandando mensajes hasta que la temperatura baja. A continuación el código, les agradecería mucho la ayuda.
#include "token.h"
#include <OneWire.h>
#include <DallasTemperature.h>
const int SensorDataPin = 2;
CTBot miBot;
OneWire oneWire(SensorDataPin);
DallasTemperature sensors(&oneWire);
char mensaje[50];
void setup() {
Serial.begin(115200);
sensors.begin();
Serial.println("Iniciando Bot de Telegram");
miBot.wifiConnect(ssid, password);
miBot.setTelegramToken(token);
if (miBot.testConnection()) {
Serial.println("\n Conectado");
}
else {
Serial.println("\n Problemas Auxilio");
}
}
void loop() {
sensors.requestTemperatures();
float temperature_Celsius = sensors.getTempCByIndex(0);
Serial.print("Temperature: ");
Serial.print(temperature_Celsius);
Serial.println(" ºC");
if (temperature_Celsius>=24){
snprintf(mensaje, 50, "Revisión, temp: %f", temperature_Celsius);
miBot.sendMessage(IDchat, mensaje);
delay(10000);
}
}
Vuelva a publicar su código en las etiquetas de código, por favor. Esa es una de las reglas de uso de este foro.
@byrafael
Un ejemplo de lo que quise decir
#include "CTBot.h"
#include "token.h"
#include <OneWire.h>
#include <DallasTemperature.h>
const int SensorDataPin = 2;
CTBot miBot;
OneWire oneWire(SensorDataPin);
DallasTemperature sensors(&oneWire);
char mensaje[50];
void setup() {
Serial.begin(115200);
sensors.begin();
Serial.println("Iniciando Bot de Telegram");
miBot.wifiConnect(ssid, password);
miBot.setTelegramToken(token);
if (miBot.testConnection()) {
Serial.println("\n Conectado");
}
else {
Serial.println("\n Problemas Auxilio");
}
}
void loop() {
sensors.requestTemperatures();
float temperature_Celsius = sensors.getTempCByIndex(0);
Serial.print("Temperature: ");
Serial.print(temperature_Celsius);
Serial.println(" ºC");
if (temperature_Celsius>=24){
snprintf(mensaje, 50, "Revisión, temp: %f", temperature_Celsius);
miBot.sendMessage(IDchat, mensaje);
delay(10000);
}
}
Esto es etiquetas de código
También debe formatear automáticamente (CTRL+T en su teclado) el código en el IDE de Arduino para facilitar la lectura
Muchas gracias por el aviso.
Prueba este loop:
bool flag;
void loop() {
sensors.requestTemperatures();
float temperature_Celsius = sensors.getTempCByIndex(0);
Serial.print("Temperature: ");
Serial.print(temperature_Celsius);
Serial.println(" ºC");
if (temperature_Celsius >= 24 && !flag) {
snprintf(mensaje, 50, "Revisión, temp: %f", temperature_Celsius);
miBot.sendMessage(IDchat, mensaje);
flag = true;
Serial.println("Mensaje enviado.");
delay(10000); // ¿cual es el motivo?
}
if (temperature_Celsius < 24) {
flag = false;
}
}
1 Like
Surbyte
September 10, 2022, 1:01pm
6
#include "token.h"
#include <OneWire.h>
#include <DallasTemperature.h>
const int SensorDataPin = 2;
CTBot miBot;
OneWire oneWire(SensorDataPin);
DallasTemperature sensors(&oneWire);
char mensaje[50];
bool flag = false;
void setup() {
Serial.begin(115200);
sensors.begin();
Serial.println("Iniciando Bot de Telegram");
miBot.wifiConnect(ssid, password);
miBot.setTelegramToken(token);
if (miBot.testConnection()) {
Serial.println("\n Conectado");
}
else {
Serial.println("\n Problemas Auxilio");
}
}
void loop() {
sensors.requestTemperatures();
float temperature_Celsius = sensors.getTempCByIndex(0);
Serial.print("Temperature: ");
Serial.print(temperature_Celsius);
Serial.println(" ºC");
if (temperature_Celsius>=24){
if (flag) {
snprintf(mensaje, 50, "Revisión, temp: %f", temperature_Celsius);
miBot.sendMessage(IDchat, mensaje);
}
flag = false;
}
else
if (temperature_Celsius < 23.5){
flag = true;
}
}
1 Like
Surbyte
September 10, 2022, 8:25pm
7
El motivo es demorar el envio de mensajes.
Mensaje para el OP (dueño del hilo) : Evita siempre que puedas el uso de delay().
system
Closed
March 9, 2023, 8:26pm
8
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.