Boa noite Pessoal!
Tentei algumas outras alternativas após a dica do float que o bubulindo me forneceu e consegui fazer funcionar, para isso separei em blocos e para cada ação eu chamo um bloco específico para realiza-la, segue abaixo a programação resumida:
#include "DHT.h"
/* DEFINIÇÃO DE CONEXÕES E PARÂMETROS */
/* CONFIGURAÇÃO */
#define NUM_SAMPLES 50
#define DHTTYPE DHT22
//DEFINIÇÃO DE PINOS DE LEITURA DIGITAL
#define DHTPIN 3
DHT dht(DHTPIN, DHTTYPE);
void configure_mb_slave(long baud, char parity, char txenpin);
int update_mb_slave(unsigned char slave, int *regs, unsigned int regs_size);
/* PARÂMETROS MODBUS RTU DE COMUNICAÇÃO, O MESTRE E OS ESCRAVOS DEVEM USAR OS MESMOS PARÂMETROS */
enum {
COMM_BPS = 9600, /* BAUD RATE */
MB_SLAVE = 1, /* ENDEREÇO DO ESCRAVO MODBUS */
PARITY = 'n', /* PARIDADE */
TXEN = 0 /* DEFINIÇÃO DO PINO USADO PARA COLOCAR O DRIVER */
};
/* DEFINIÇÃO ORDENADA DE TODOS OS REGISTROS DE LEITURA E ESCRITA DA COMUNICAÇÃO ENTRE O MESTRE E O ESCRAVO (SCADA E ARDUINO) */
enum {
SENSOR_UMIDADE, /* REGISTRADOR DO SENSOR DE LUMINOSIDADE */
SENSOR_TEMPERATURA, /* REGISTRADOR DO SENSOR DE TEMPERATURA */
MB_REGS /* NUMERO TOTAL DE REGISTRO DO ESCRAVO */
};
int regs[MB_REGS]; /* MAPA MODBUS DO SLAVE */
enum enum_estado{
INICIO,
ES_TEMPERATURA,
ES_UMIDADE,
} ESTADO;
void setup()
{
/* CONFIGURAÇÃO DA COMUNICAÇÃO MODBUS: 9600 BPS, 8N1, RS485 NETWORK */
configure_mb_slave(COMM_BPS, PARITY, TXEN);
}
void loop()
{
switch(ESTADO) {
case ES_TEMPERATURA: {
BLOCO_TEMPERATURA();
break;
}
case ES_UMIDADE: {
BLOCO_UMIDADE();
break;
}
/* VERIFICA SE HÁ SOLICITAÇÃO DO MESTRE - PARA TODOS OS SLAVES*/
update_mb_slave(MB_SLAVE, regs, MB_REGS);
}
}
void BLOCO_INICIO(){
ESTADO = ES_TEMPERATURA;
}
void BLOCO_TEMPERATURA(){
float DHTtemperature = 0;
DHTtemperature = dht.readTemperature();
float TEMP = DHTtemperature * 10;
regs[SENSOR_TEMPERATURA]= TEMP;
ESTADO = ES_UMIDADE;
}
void BLOCO_UMIDADE(){
float DHThumidity;
DHThumidity = dht.readHumidity();
float UMID = DHThumidity * 10;
regs[SENSOR_UMIDADE]= UMID;
ESTADO = INICIO;
}
Em anexo coloquei a programação completa com a programação do Modbus e com comentários.
Agradeço a ajuda e colaboração de todos!
Obrigado,
William Maldonado
SENSOR_DE_TEMPERATURA.txt (17.9 KB)