unit Stimulation;
interface
uses Graphics,Forms,
Unit1,Unit2;
type
TStim = class(TObject)
private
protected
public
Status :string;
t0,dtPulse,Interpulse,
StimCurrent,StimRate,
Current,Rate
:double;
NPulses,iPulse :integer;
procedure StartStimulation(t_:double);
procedure Stimulate(t_,dt_:double);
constructor Create;
end;
implementation
uses Equations2;
constructor TStim.Create;
begin
inherited Create;
end;
procedure TStim.StartStimulation(t_:double);
begin
Form2.Visible:=true;
Form2.LineSeries6.Clear;
Status:='On';
t0:=t_;
StimCurrent:=0;
StimRate :=0;
case Form2.ComboBox1.ItemIndex of
0: StimCurrent:=Form2.DDSpinEdit7.Value; {pA}
1: StimRate :=Form2.DDSpinEdit7.Value; {Hz}
end;
dtPulse :=Form2.DDSpinEdit18.Value; {ms}
Interpulse :=Form2.DDSpinEdit1.Value; {ms}
NPulses :=trunc(Form2.DDSpinEdit2.Value);
iPulse:=0;
end;
procedure TStim.Stimulate(t_,dt_:double);
begin
Current:=0;
Rate:=0;
if (Status='On')or(Status='Pulse') then begin
{ Start of pulse }
if abs(trunc((t_-t0 )/Interpulse)*Interpulse+t0 -t_)<dt_ then begin
Status:='Pulse';
iPulse:=iPulse+1;
Form2.Panel1.Color:=clGreen;
Form2.LineSeries6.AddXY(t_,max(StimCurrent,StimRate));
// Application.ProcessMessages;
end;
{ End of pulse }
if abs(trunc((t_-t0-dtPulse)/Interpulse)*Interpulse+t0+dtPulse-t_)<dt_ then begin
Status:='On';
Form2.Panel1.Color:=clRed;
if iPulse=NPulses then begin
Status:='Off';
Form2.Panel1.Color:=clBtnFace;
end;
Form2.LineSeries6.AddXY(t_,max(StimCurrent,StimRate));
Application.ProcessMessages;
end;
{ During the pulse }
if Status='Pulse' then begin
Current:=StimCurrent;
Rate :=StimRate;
end;
end;
end;
end.