Equações matemáticas

Estou usando uma equação com os dados de um sensor de umidade e temperatura, porém observei que ao aplicar operações matemáticas utilizando os dados como variáveis, o sistema não utiliza as casas decimais e isso gera erros no resultado. Minha dúvida é: Como monto equações como esta na linguagem C++?

=1,21.10.((7,45.Temp)/(234,7+Temp)).(1-0,01.Umidade)+0,21.Temp-2,3

In C language, you must use "." as the decimal separator and "*" as the multiplication operator.

=1.21*10*((7.45*Temp)/(234.7+Temp))*(1-0.01*Umidade)+0.21*Temp-2.3

Por algum motivo os asteriscos não apareceram aqui, mas no programa está escrito conforme você falou:
Serial.print(1.2110*((7.45event.temperature)/(234.7+event.temperature))(1-(0.01event.relative_humidity))+((0.21event.temperature)-2.3));*
O problema é que as casas decimais são ignoradas no cálculo da equação quando escrevo desta forma.

Notice how your post swaps between normal and italicised font? It's because you didn't use code tags. I used code tags, as you can see.

Then you need to post your complete code. Use code tags!

Entendi, no IDE está escrito corretamente.

Mas o meu problema é que a equação está sendo calculada ignorando as casas decimais.

Está calculando assim: 1.10.((7.Temp)/(234+Temp)).(1-0.Umidade)+0.Temp-2

//----------------Inclui as bibliotecas do codigo----------------
 
#include <Adafruit_Sensor.h>                                    // Inclui a biblioteca Adafruit_Sensor para facilitar o controle do sensor de temperatura e umidade
 
#include <DHT.h>                                                // Inclui a biblioteca DHT para facilitar o controle do sensor de temperatura e umidade
 
#include <DHT_U.h>                                              // Inclui a biblioteca DHT_U para facilitar o controle do sensor de temperatura e umidade
 
//----------------Define as constantes que a biblioteca necessita
 
#define DHTTYPE    DHT11                                        // Define DHTTYPE como DHT11
 
//----------------Declara as variaveis do codigo----------------
 
int pinoDHT = 2;                                                // Declara a variável pinoDHT e atribui o valor 2 a ela
 
DHT_Unified dht(pinoDHT, DHTTYPE);                              // Declara a variável dht para utilizar as funcoes de biblioteca Servo
 
//----------------Funcao executada uma vez na inicializacao do sistema----------------
 
void setup() {
 
    Serial.begin(9600);                                           // Inicializa a comunicação serial
 
  dht.begin();                                                  // Inicializa o sensor de temperatura e umidade
 
}
 
//----------------Funcao executada repetidamente enquanto o sistema estiver ligado----------------
 
void loop() {
 
  delay(30000);                                                  // Aguarda 1500 milissegundos (1,5 segundos)
 
  sensors_event_t event;                                        // Cria uma variável temporaria para a leitura das mensagens enviadas pelo sensor
 
  dht.temperature().getEvent(&event);                           // Faz a leitura da temperatura
 
                                                    // Caso contrário (temperatura e um numero), executa as instrucoes entre chaves
 
    Serial.print(F("Temperatura: "));                           // Escreve o texto entre aspas no monitor serial
 
    Serial.print(event.temperature);                            // Escreve o valor de event.temperature no monitor serial
 
    Serial.println(F("°C"));                                    // Escreve o texto entre aspas no monitor serial e passa para a próxima linha
 
  
 
  dht.humidity().getEvent(&event);                              // Faz a leitura da umidade
 
 
 
    Serial.print(F("Umidade: "));                               // Escreve o texto entre aspas no monitor serial
 
    Serial.print(event.relative_humidity);                      // Escreve o valor da umidade no monitor serial
 
    Serial.println(F("%"));                                     // Escreve o texto entre aspas no monitor serial e passa para a próxima linha

    //Formula
 
    Serial.print(F("Evapotranspiracao: "));                               // Escreve o texto entre aspas no monitor serial
 
    Serial.print(1.21*10*((7.45*event.temperature)/(234.7+event.temperature))*(1-(0.01*event.relative_humidity))+((0.21*event.temperature)-2.3));                      // Escreve o valor da umidade no monitor serial
 
    Serial.println(F("mm/dia"));                                     // Escreve o texto entre aspas no monitor serial e passa para a próxima linha
   
 
    
   
 
}

This code should use decimal places.

Can you share serial monitor output? (Again, use code tags.)

16:28:33.076 -> Temperatura: 27.60°C
16:28:33.076 -> Umidade: 78.00%
16:28:33.111 -> Evapotranspiracao: 19.03mm/dia

O problema é que o resultado de "Evapotranspiração" deveria ser 5,582772551mm/dia

Try this:

//----------------Inclui as bibliotecas do codigo----------------
 
#include <Adafruit_Sensor.h>                                    // Inclui a biblioteca Adafruit_Sensor para facilitar o controle do sensor de temperatura e umidade
 
#include <DHT.h>                                                // Inclui a biblioteca DHT para facilitar o controle do sensor de temperatura e umidade
 
#include <DHT_U.h>                                              // Inclui a biblioteca DHT_U para facilitar o controle do sensor de temperatura e umidade
 
//----------------Define as constantes que a biblioteca necessita
 
#define DHTTYPE    DHT11                                        // Define DHTTYPE como DHT11
 
//----------------Declara as variaveis do codigo----------------
 
int pinoDHT = 2;                                                // Declara a variável pinoDHT e atribui o valor 2 a ela
 
DHT_Unified dht(pinoDHT, DHTTYPE);                              // Declara a variável dht para utilizar as funcoes de biblioteca Servo
 
//----------------Funcao executada uma vez na inicializacao do sistema----------------
 
void setup() {
 
    Serial.begin(9600);                                           // Inicializa a comunicação serial
 
  dht.begin();                                                  // Inicializa o sensor de temperatura e umidade
 
}
 
//----------------Funcao executada repetidamente enquanto o sistema estiver ligado----------------
 
void loop() {
 
  delay(30000);                                                  // Aguarda 1500 milissegundos (1,5 segundos)
 
  sensors_event_t event_t, event_h;                                        // Cria uma variável temporaria para a leitura das mensagens enviadas pelo sensor
 
  dht.temperature().getEvent(&event_t);                           // Faz a leitura da temperatura
 
                                                    // Caso contrário (temperatura e um numero), executa as instrucoes entre chaves
 
    Serial.print(F("Temperatura: "));                           // Escreve o texto entre aspas no monitor serial
 
    Serial.print(event_t.temperature);                            // Escreve o valor de event.temperature no monitor serial
 
    Serial.println(F("°C"));                                    // Escreve o texto entre aspas no monitor serial e passa para a próxima linha
 
  
 
  dht.humidity().getEvent(&event_h);                              // Faz a leitura da umidade
 
 
 
    Serial.print(F("Umidade: "));                               // Escreve o texto entre aspas no monitor serial
 
    Serial.print(event_h.relative_humidity);                      // Escreve o valor da umidade no monitor serial
 
    Serial.println(F("%"));                                     // Escreve o texto entre aspas no monitor serial e passa para a próxima linha

    //Formula
 
    Serial.print(F("Evapotranspiracao: "));                               // Escreve o texto entre aspas no monitor serial
 
    Serial.print(1.21*10*((7.45*event_t.temperature)/(234.7+event_t.temperature))*(1-(0.01*event_h.relative_humidity))+((0.21*event_t.temperature)-2.3));                      // Escreve o valor da umidade no monitor serial
 
    Serial.println(F("mm/dia"));                                     // Escreve o texto entre aspas no monitor serial e passa para a próxima linha
   
 
    
   
 
}

Muito Obrigado!! Funcionou perfeitamente!!
Percebi algumas diferenças na linha 35 event_t e event_h.

Se não for pedir demais, se você puder explicar onde estava o erro eu agradeço enormemente.

I'm not completely certain about this. But I suspect that line 49 is over-writing the temperature that was written to event.temperature in line 37. I think sensors_event_t might be a union type which can hold temperature or relative_humidity values but not both at the same time.

My change was to declare 2 separate variables event_t and event_h, so each can hold a separate value.

I was correct:

typedef struct {
...
  union {
...
    float temperature; /**< temperature is in degrees centigrade (Celsius) */
...
    float relative_humidity; /**< relative humidity in percent */
...
  };                ///< Union for the wide ranges of data we can carry
} sensors_event_t;

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