DLL с внешними функциями простейшего вида.
Добавить свои функции прописав их в тексте, требуются базовые знания Pascal/Delphi, откомпилировать в Delphi и задать необходимые функции в конфигурации к программе.
library GraphFunc;
uses
SysUtils,
Classes,
Math;
Const
Vdd = 5;
{$R *.res}
//преобразование АЦП в вольты ADC_Value - значение АЦП, DigitCap - разрядность АЦП
function ADC_To_Volt(ADC_Value, DigitCap, Param_3: Word): Real; stdcall;
var
MaxValue: LongWord;
begin
MaxValue := 1 shl DigitCap;
Result := Vdd/MaxValue*ADC_Value + 1/(MaxValue*2);
end;
//значение давления в килопаскалях для датчика MPXAZ ADC_Value - значение АЦП, DigitCap - разрядность АЦП
function ADC_To_kPa(ADC_Value, DigitCap, Param_3: Word): Real; stdcall;
begin
Result := (ADC_To_Volt(ADC_Value, DigitCap, 0) + 5*0.095)/(5*0.009);
end;
//значение высоты ADC_Value - значение АЦП, DigitCap - разрядность АЦП, Zero - значение АЦП на земле
function ADC_To_Height(ADC_Value, DigitCap, Zero_Value: Word): Real; stdcall;
const
//p0 := 101.325; //давление на уровне моря
a = 0.00366; //температурный коэффициент объёмного расширения воздуха
t = 20.0;
var
p, p0: Real;
begin
p0 := ADC_To_kPa(Zero_Value, DigitCap, 0);
p := ADC_To_kPa(ADC_Value, DigitCap, 0);
Result := 18400*(1 + a*t)*log10(p0/p);
end;
//значение ускорения для датчика MMA2202, ADC_Value - значение АЦП, DigitCap - разрядность АЦП, Zero - значение АЦП при нулевом ускорении
function ADC_To_Accel(ADC_Value, DigitCap, Zero_Value: Word): Real; stdcall;
var
AccelVolt, ZeroAccelVolt: Real;
begin
AccelVolt := ADC_To_Volt(ADC_Value, DigitCap, 0);
ZeroAccelVolt := ADC_To_Volt(Zero_Value, DigitCap, 0);
Result := (AccelVolt - ZeroAccelVolt)/0.04;
end;
{Директива exports указывает, какие функции будут экспортированы этой DLL}
exports
ADC_To_Volt,
ADC_To_kPa,
ADC_To_Height,
ADC_To_Accel;
begin
end.