LabWindows/CVI

cancel
Showing results for 
Search instead for 
Did you mean: 

Code to display data from an ACS712 in LabWindows,Acs712 that is part of a lithium-ion battery charger

hello all.We made a charger for lithium ion batteries using, among others, ACS712, Arduino Uno and LCD 16X2. I would like to display the data read by the Acs 712 sensor also in labwindows.Through trials we arrived at the next skeleton of code. How can I fill in this code to achieve what I want?
This is my code:
#include <rs232.h>
#include <utility.h>
#include <cvidef.h>
#include <userint.h>
#include <nidaqmx.h> // sau alt header corespunz?tor pentru hardware-ul dvs.
#include <cvirte.h> // Incluziunea headerului CVI runtime corespunz?tor

#define sensorInput A0 // Num?rul corect al canalului analogic pentru tensiune
#define CV_current 0.8 // Valoarea corect? pentru curent în modul CV
#define PANEL_NUMERIC_VOLTAGE 2 // Înlocui?i cu ID-ul corect pentru controlul numeric
#define PANEL_NUMERIC_CURRENT 3 // Înlocui?i cu ID-ul corect pentru controlul numeric
#define PANEL_PROGRESS_BAR 4 // Înlocui?i cu ID-ul corect pentru bara de progres
double batt_cap = 2000.0; // Capacitatea bateriei în mAh
double currentReading = 0.0;
double voltageReading = 0.0;
double chargeLevel = 0.0; // Procentul de înc?rcare a bateriei

int panelHandle; // Declara?i variabila panelHandle aici
const char *PANEL = "Proiect.uir";
int numericControl = 1; // Înlocui?i cu ID-ul corect pentru controlul numeric

// Func?ia care cite?te datele seriale ?i le afi?eaz?
void ReadSerialData(int panel, int control, int event, void *callbackData, int eventData1, int eventData2)
{
char buffer[256];
int bytesRead_serial = 0;
int serialPort = 1; // Sau num?rul portului serial corespunz?tor pe care dori?i s?-l utiliza?i
// Citirea datelor primite pe portul serial
bytesRead_serial = ComRdTerm(serialPort, buffer, sizeof(buffer), 1);

if (bytesRead_serial > 0)
{
// Conversia buffer-ului la un num?r, dac? este necesar
int sensorValue = atoi(buffer);

// Afi?a?i valoarea în controlul numeric din interfa?a utilizator
SetCtrlVal(panelHandle, 1, sensorValue);
// Update the voltage and current controls with sensor data
// Update the voltage and current controls with sensor data
SetCtrlVal(panelHandle, 2, sensorValue); // Assuming sensorValue holds the sensor data
SetCtrlVal(panelHandle, 3, currentReading); // Update currentReading with the current sensor data


}
}

// Func?ia de citire a tensiunii ?i curentului
void ReadVoltageCurrent()
{
TaskHandle taskHandle = 0; // Ini?ializa?i taskHandle

// Crea?i un task DAQmx pentru intrarea analogic?
DAQmxCreateTask("", &taskHandle);

// Ad?uga?i un canal de intrare analogic? (ajusta?i dup? nevoie)
DAQmxCreateAIVoltageChan(taskHandle, "A0", "", DAQmx_Val_Cfg_Default, -10.0, 10.0, DAQmx_Val_Volts, NULL);

// Citi?i datele de tensiune
DAQmxReadAnalogScalarF64(taskHandle, 10.0, &voltageReading, NULL);

// Închide?i task-ul
DAQmxClearTask(taskHandle);

// Converti?i tensiunea în curent (ajusta?i dup? nevoie)
currentReading = voltageReading / 1000.0;

// Calcula?i nivelul de înc?rcare ?i actualiza?i controalele
// Calcul procent de înc?rcare (adaptat la pragurile dvs.)
if (currentReading <= 0.1 * batt_cap / 1000.0) // Aici ajusta?i pragurile ?i capacitatea bateriei
{
chargeLevel = 0.0;
}
else if (currentReading >= CV_current)
{
chargeLevel = 100.0;
}
else
{
chargeLevel = ((currentReading - 0.1 * batt_cap / 1000.0) / (CV_current - 0.1 * batt_cap / 1000.0)) * 100.0;
}

// Actualiza?i controalele pentru tensiune, curent ?i nivelul de înc?rcare
SetCtrlVal(panelHandle, PANEL_NUMERIC_VOLTAGE, voltageReading);
SetCtrlVal(panelHandle, PANEL_NUMERIC_CURRENT, currentReading);
SetCtrlVal(panelHandle, PANEL_PROGRESS_BAR, chargeLevel);
}

int main(int argc, char *argv[])
{
int serialPort;
if (InitCVIRTE(0, argv, 0) == 0)
return -1;

// Crea?i un panou pentru afi?are
panelHandle = LoadPanel(0, "Proiect.uir", 1); // 1 corespunde înc?rc?rii unui dialog

// Configura?i portul serial pentru citirea datelor de la Arduino

int result;

// Deschide?i portul serial
result = OpenComConfig("A0", 9600, 0, 8, 1, 512, 512, &serialPort);

if (result < 0)
{
// A ap?rut o eroare la deschiderea portului serial
// Gestiunea erorilor aici
CloseCom(serialPort); // Închide?i portul serial în caz de eroare
return -1;
}

// Ini?ializa?i citirea datelor seriale
result = InstallComCallback(serialPort, LWRS_RXCHAR, 0, 0, ReadSerialData, 0);
if (result < 0)
{
// A ap?rut o eroare la instalarea handler-ului de citire
// Gestiunea erorilor aici
CloseCom(serialPort); // Închide?i portul serial în caz de eroare
return -1;
}

// Trimite?i un caracter pentru a ini?ia citirea datelor
char characterToSend = 'R';
result = ComWrt(serialPort, &characterToSend, 1);

if (result < 0)
{
// A ap?rut o eroare la trimiterea datelor seriale
// Gestiunea erorilor aici
CloseCom(serialPort); // Închide?i portul serial în caz de eroare
return -1;
}

// Rula?i interfa?a utilizatorului
RunUserInterface();

// Închide?i portul serial când închide?i aplica?ia
CloseCom(serialPort);

// Ini?ializa?i senzorul ?i alte set?ri
// ...

while (1)
{
// Citi?i ?i actualiza?i datele
ReadVoltageCurrent();
int conditionToExit = 0; // Defini?i ?i ini?ializa?i conditionToExit

// Aici pute?i ad?uga logica pentru oprirea sau avertizarea, dac? este necesar

// Verifica?i dac? trebuie s? încheia?i bucla ?i programul
if (conditionToExit) // Exemplu: dac? un anumit buton este ap?sat sau alt criteriu este îndeplinit
break;
}

// ...

// Închide?i panoul
DiscardPanel(panelHandle);

// Elibera?i resursele LabWindows CVI ?i ie?i?i din program
QuitUserInterface(0); // Exit the LabWindows CVI user interface

return 0;
}

I have this erors after runing this code:NON-FATAL RUN-TIME ERROR: "ProiectMain.c", line 95, col 19, thread id 11236: The callback function, PANEL_NUMERIC_VOLTAGE, specified in the UIR file, is not a known function. If you are using an external compiler, you must include the UIR callbacks object or source file in the executable or DLL.
FATAL RUN-TIME ERROR: "ProiectMain.c", line 102, col 14, thread id 11236: The program has caused a 'General Protection' fault at 0x645891C5.

Download All
0 Kudos
Message 1 of 2
(1,149 Views)

Duplicated post: see the original discussion here and please reply there in order to have a unique discussion on this item.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 Kudos
Message 2 of 2
(1,141 Views)