DHT22 - Arduino Modbus

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)