-
Notifications
You must be signed in to change notification settings - Fork 9
Description
How can I use a variable of type sn16, un8, un16 sns32? I need it to obtain temperature or current data but I don't get any data. I need help as soon as possible.
#include "VEDirect.h"
#include <WiFi.h>
const char* ssid = "jack"; // Nombre de tu red WiFi
const char* password = "j.120387"; // Contraseña de tu red WiFi
unsigned long lastConnectionTime = 0;
const unsigned long connectionInterval = 10000;
// Constantes para los pines del VE Direct Plug
//const int VE_DIRECT_RX = 2; // Conecta al pin TX1 del Arduino
//const int VE_DIRECT_TX = 3; // Conecta al pin RX1 del Arduino
// Declaración de la instancia de VEDirect y las variables globales
void mpptCallback(uint16_t id, int32_t value);
VEDirect mppt(Serial1, mpptCallback);
uint16_t batteryVoltage = 0;
sns32 batteryCurrent = 0;
int32_t batteryPower = 0;
sns32 batteryTemperature = 0;
int32_t panelPower = 0;
uint16_t panelCurrent = 0;
uint16_t panelMaximumVoltage = 0;
uint16_t panelVoltage = 0;
sns16 chargerTemperature = 0;
void setup() {
Serial.begin(115200);
mppt.begin();
connectToWiFi();
}
void loop() {
// Temporizador para enviar ping cada segundo
static unsigned long secondsTimer = 0;
mppt.update();
unsigned long currentMillis = millis();
if (currentMillis - secondsTimer > 1000L) {
secondsTimer = currentMillis;
mppt.ping(); // Envía ping cada segundo
}
// Verificar si la conexión WiFi está activa
if (WiFi.status() != WL_CONNECTED) {
Serial.println("Conexión WiFi perdida. Intentando reconectar...");
connectToWiFi();
}
}
// Función de retorno de llamada para procesar los datos recibidos
void mpptCallback(uint16_t id, int32_t value) {
// Actualiza las variables globales según el ID recibido
switch (id) {
case VEDirect_kBatteryVoltage: // un16
batteryVoltage = value * 0.01;
Serial.print(F("Voltaje Batería: "));
Serial.println(batteryVoltage);
break;
case VEDirect_kBatteryCurrent: // sns32
batteryCurrent = value * 0.001;
Serial.print(F("Corriente Batería: "));
Serial.println(batteryCurrent);
break;
case VEDirect_kBatteryPower: // un32
batteryPower = value * 0.01;
Serial.print(F("Potencia Batería: "));
Serial.println(batteryPower);
break;
case VEDirect_kBatteryTemperature: // sns32
batteryTemperature = value * 0.01;
Serial.print(F("Temperatura Batería: "));
Serial.println(batteryTemperature);
break;
case VEDirect_kPanelCurrent: // un16
panelCurrent = value * 0.1;
Serial.print(F("Corriente Panel: "));
Serial.println(panelCurrent);
break;
case VEDirect_kPanelPower: // un32
panelPower = value * 0.01;
Serial.print(F("Potencia Panel: "));
Serial.println(panelPower);
break;
case VEDirect_kPanelVoltage: // un16
panelVoltage = value * 0.01;
Serial.print(F("Voltaje Panel: "));
Serial.println(panelVoltage);
break;
case VEDirect_kPanelMaximumVoltage: // un16
panelMaximumVoltage = value * 0.01;
Serial.print(F("Voltaje Máximo Panel: "));
Serial.println(panelMaximumVoltage);
break;
case VEDirect_kChargerTemperature: // sns16
chargerTemperature = value * 0.01;
Serial.print(F("Temperatura Cargador: "));
Serial.println(chargerTemperature);
break;
// Agregar otros casos según sea necesario
default:
// Manejar otros IDs si es necesario
break;
}
}
void connectToWiFi() {
Serial.println();
Serial.print("Conectando a la red WiFi ");
Serial.println(ssid);
WiFi.begin(ssid, password);
unsigned long startTime = millis();
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
if (millis() - startTime > 10000) {
Serial.println("Fallo al conectar. Reintentando...");
return;
}
}
Serial.println("");
Serial.println("Conexión WiFi establecida");
Serial.print("Dirección IP: ");
Serial.println(WiFi.localIP());
}
#ifndef VEDIRECT_H_
#define VEDIRECT_H_
#include "Arduino.h"
#include "ved.h"
#define VEDirect_kBatteryVoltage (0x2002)
#define VEDirect_kBatteryCurrent (0x200A)
#define VEDirect_kBatteryPower (0x2027)
#define VEDirect_kBatteryTemperature (0x2003)
#define VEDirect_kPanelPower (0xEDBC)
#define VEDirect_kPanelVoltage (0xEDBB)
#define VEDirect_kPanelCurrent (0xEDBD)
#define VEDirect_kPanelMaximumVoltage (0xEDB8)
#define VEDirect_kChargerTemperature (0xEDDB)
typedef int16_t sns16;
typedef int32_t sns32;
typedef void (*receiveCallback)(uint16_t id, int32_t value);
class VEDirect {
public:
VEDirect(HardwareSerial &serial, receiveCallback receive);
void begin();
void update();
size_t set(uint16_t id, int32_t value);
size_t get(uint16_t id);
size_t ping();
size_t restart();
private:
HardwareSerial &serialPort;
receiveCallback rxCallback;
ved_t rxBuffer;
};
#endif // VEDIRECT_H_