Incorrect and No value in Blynk App

Hello, I need help. I am measuring my 22W solar panel’s temperature, voltage, and current, using temperature, voltage, and current sensors. However, the voltage value shown in blynk app is incorrect, and the current value has no value at all. The temperature/humidity value shows just fine. Thank You

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>

#define DHTPIN1 32
#define DHTPIN2 33
#define DHTPIN3 25
#define DHTPIN4 26
#define DHTTYPE DHT11

DHT_Unified dht1(DHTPIN1, DHTTYPE);
DHT_Unified dht2(DHTPIN2, DHTTYPE);
DHT_Unified dht3(DHTPIN3, DHTTYPE);
DHT_Unified dht4(DHTPIN4, DHTTYPE);
uint32_t delayMS;


float aveTemp, panelVoltage, tempThresh = 0, maxPanelVoltage = 22, panelCurrent;
float voltageOffset = 63.3;
bool mitigate_state = false;

char auth[] = "----";
char ssid[] = "-------";
char pass[] = "---------";
BlynkTimer timer;

BLYNK_WRITE(V4)
{
  tempThresh = param.asFloat();
  Serial.print("Changed tempThresh to: ");
  Serial.println(tempThresh);
}

BLYNK_WRITE(V5)
{
  maxPanelVoltage = param.asFloat();
  Serial.print("Changed maxPanelVoltage to: ");
  Serial.println(maxPanelVoltage);
}

BLYNK_WRITE(V6)
{
  voltageOffset = param.asFloat();
  Serial.print("Changed voltageOffset to: ");
  Serial.println(voltageOffset);
}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  // Initialize device.
  pinMode(27, OUTPUT);
  dht1.begin();
  dht2.begin();
  dht3.begin();
  dht4.begin();
  sensor_t sensor1;
  sensor_t sensor2;
  sensor_t sensor3;
  sensor_t sensor4;
  dht1.temperature().getSensor(&sensor1);
  dht1.humidity().getSensor(&sensor1);
  dht2.temperature().getSensor(&sensor2);
  dht2.humidity().getSensor(&sensor2);
  dht3.temperature().getSensor(&sensor3);
  dht3.humidity().getSensor(&sensor3);
  dht4.temperature().getSensor(&sensor4);
  dht4.humidity().getSensor(&sensor4);
  delayMS = sensor1.min_delay / 1000;
  timer.setInterval(1000L, sendData);
  Blynk.begin(auth, ssid, pass);
}

void loop() {
  Blynk.run();
  timer.run();
}

void sendData()
{
  float t = getAveTemp();
  float h = getAveHum();
  float v = getVoltage();
  float i = getCurrent();
  if (t >= tempThresh && mitigate_state == false) {
    mitigate_state = true;
    digitalWrite(27, LOW);
    
  } else if (t < tempThresh - 5 && mitigate_state == true){
    digitalWrite(27, HIGH);
    mitigate_state  = false;
  }
  Blynk.virtualWrite(V0, t);
  Blynk.virtualWrite(V1, h);
  Blynk.virtualWrite(V2, v);
  Blynk.virtualWrite(V3, i);
}


float getVoltage() {
  int adc_value = analogRead(36);
  float voltage = ((adc_value / 1023.0) * maxPanelVoltage);
  if (voltage <= (maxPanelVoltage * 0.2)) {
    voltage = 0.0;
  }
  return voltage;
}


float getCurrent() {
  int rawValue = analogRead(39);
  float voltage = (rawValue / 4096.0) * 3300;
  float amps = ((voltage - 1650) / 185);
  if (amps < 0) {
    amps = 0;
  }
  return amps;
}

float getAveTemp() {
  delay(delayMS);
  sensors_event_t event1;
  sensors_event_t event2;
  sensors_event_t event3;
  sensors_event_t event4;
  dht1.temperature().getEvent(&event1);
  dht2.temperature().getEvent(&event2);
  dht3.temperature().getEvent(&event3);
  dht4.temperature().getEvent(&event4);
  float sumTemp = 0;
  int counter = 0;
  if (isnan(event1.temperature)) {
    Serial.println(F("error for 1!"));
  }
  else {
    sumTemp += event1.temperature;
    counter++;
  }

  if (isnan(event2.temperature)) {
    Serial.println(F("error for 2!"));
  }
  else {
    sumTemp += event2.temperature;
    counter++;
  }

  if (isnan(event3.temperature)) {
    Serial.println(F("error for 3!"));
  }
  else {
    sumTemp += event3.temperature;
    counter++;
  }

  if (isnan(event4.temperature)) {
    Serial.println(F("error for 4!"));
  }
  else {
    sumTemp += event4.temperature;
    counter++;
  }

  return sumTemp / counter;
}


float getAveHum() {
  delay(delayMS);
  sensors_event_t event1;
  sensors_event_t event2;
  sensors_event_t event3;
  sensors_event_t event4;
  dht1.humidity().getEvent(&event1);
  dht2.humidity().getEvent(&event2);
  dht3.humidity().getEvent(&event3);
  dht4.humidity().getEvent(&event4);
  float sumHum = 0;
  int counter = 0;
  if (isnan(event1.relative_humidity)) {
    Serial.println(F("error for 1!"));
  }
  else {
    sumHum += event1.relative_humidity;
    counter++;
  }

  if (isnan(event2.relative_humidity)) {
    Serial.println(F("error for 2!"));
  }
  else {
    sumHum += event2.relative_humidity;
    counter++;
  }

  if (isnan(event3.relative_humidity)) {
    Serial.println(F("error for 3!"));
  }
  else {
    sumHum += event3.relative_humidity;
    counter++;
  }

  if (isnan(event4.relative_humidity)) {
    Serial.println(F("error for 4!"));
  }
  else {
    sumHum += event4.relative_humidity;
    counter++;
  }
  return sumHum / counter;
}

I’d start by adding lots of serial print statements which show the values within your functions, and the values that art returned when those functions are called, then compare this to Blynk.

You should also check how you’ve configured your datastreams, in particular the min/max values. Any data sent to the datastream that are outside of these values will be ignored.

Pete.