Control de temperatura DS18B20

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

image

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
#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

El motivo es demorar el envio de mensajes.
Mensaje para el OP (dueño del hilo) : Evita siempre que puedas el uso de delay().

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