gaston260
26-10-2010, 03:41:42
hola amigos tengo un codigo para usar con un sensor de temperatura y humedad por el puerto serie pero no puedo ver los datos , y la verdad que e estado alejado de la programacion por mucho tiempo y del puerto casi nunca lo e usado pero me seria de mucha utilidad poder usarlo , adjunto el circuito tambien !.
El codigo completo :
unit Finish;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, CPort;
type
TForm1 = class(TForm)
LblStatusCom: TLabel;
ComPort: TComPort;
Timer1: TTimer;
BtnSetting: TButton;
BtnConnect: TButton;
Label1: TLabel;
Label2: TLabel;
LblTemp: TLabel;
LblHumi: TLabel;
Label3: TLabel;
Label4: TLabel;
Timer2: TTimer;
Label5: TLabel;
procedure BtnSettingClick(Sender: TObject);
procedure BtnConnectClick(Sender: TObject);
procedure IntSerialRX(Sender: TObject; Count: Integer);
// procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure IntTim2(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
DataSerial: Integer;
DataSerialTemp: Integer;
FlagRX: Integer;
DataTrans: Integer;
DataSHT: Real;
Temp: Real;
implementation
{$R *.DFM}
procedure TForm1.BtnSettingClick(Sender: TObject);
begin
ComPort.ShowSetupDialog;
end;
procedure TForm1.BtnConnectClick(Sender: TObject);
begin
if ComPort.Connected = true then
begin
ComPort.Close;
LblStatusCom.Caption := ComPort.Port + ' Disconnected';
BtnConnect.Caption := 'Connect';
BtnSetting.Enabled := true;
end
else
begin
ComPort.Open;
LblStatusCom.Caption := ComPort.Port + ' Connected';
BtnConnect.Caption := 'Disconnect';
BtnSetting.Enabled := False;
// timer1.Enabled:=true;
Timer2.Enabled := True;
DataTrans := $01;
end;
end;
procedure TForm1.IntSerialRX(Sender: TObject; Count: Integer);
begin
ComPort.Read(DataSerial,1);
FlagRX := FlagRX + 1;
if (FlagRX = 1) then
begin
DataSerialTemp := DataSerial;
end;
if (FlagRX = 2) then
begin
DataSerialTemp := DataSerialTemp SHL 8;
DataSerialTemp := DataSerialTemp OR DataSerial;
FlagRX := 0;
DataSHT := DataSerialTemp;
//Konversi Temperature dari SHT11
// Celcius = (SOt * d2) + d1
// dengan d2 = 0.01 (14-bit) dan d1 = -40 (VDD = 5Volt)
// Celcius = (ADC_Temp * 0.01) - 40 -- dikalikan dengan 100
// Celcius = (ADC_Temp - 4000)
//Catatan: Faktor konversi pada rumus dikalikan dengan 100 untuk
// memperoleh hasil pengukuran temperature per-100 derajat (0,01)
// dengan adanya pembulatan
if (DataTrans = 1) then
begin
DataSHT := (DataSHT-4000) / 100;
LblTemp.Caption := CurrToStr(DataSHT);
DataTrans := 2;
end
//Konversi Relative Humidity dari SHT11
// Relatitive Humidity (linear)
// RHLin = c1 + (c2 * SORH) + (c3 * SORH^2)
// Untuk pengukuran 12-bit: c1 = -4; c2 = 0,0405 dan c3 = -2,8*10^-6
// RHLin = (ADC_RH * 0,0405) - (ADC_RH^2 * 0,0000028) - 4
else if (DataTrans = 2) then
begin
Temp := DataSHT;
DataSHT := (Temp * 0.0405) - (Temp * Temp * 0.0000028) - 4;
LblHumi.Caption := CurrToStr(DataSHT);
DataTrans := 1;
end
else DataTrans := 1;
Timer2.Enabled := True;
end;
end;
{procedure TForm1.Timer1Timer(Sender: TObject);
begin
timer1.Enabled := False;
end;}
procedure TForm1.FormCreate(Sender: TObject);
begin
Label3.Caption := '%RH';
Label4.Caption := '*C';
end;
procedure TForm1.IntTim2(Sender: TObject);
begin
if ComPort.Connected = True then
begin
ComPort.Write(DataTrans,1);
FlagRX := 0;
end;
Timer2.Enabled := False;
end;
end.
saludos y gracias por su ayuda !.
El codigo completo :
unit Finish;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, CPort;
type
TForm1 = class(TForm)
LblStatusCom: TLabel;
ComPort: TComPort;
Timer1: TTimer;
BtnSetting: TButton;
BtnConnect: TButton;
Label1: TLabel;
Label2: TLabel;
LblTemp: TLabel;
LblHumi: TLabel;
Label3: TLabel;
Label4: TLabel;
Timer2: TTimer;
Label5: TLabel;
procedure BtnSettingClick(Sender: TObject);
procedure BtnConnectClick(Sender: TObject);
procedure IntSerialRX(Sender: TObject; Count: Integer);
// procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure IntTim2(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
DataSerial: Integer;
DataSerialTemp: Integer;
FlagRX: Integer;
DataTrans: Integer;
DataSHT: Real;
Temp: Real;
implementation
{$R *.DFM}
procedure TForm1.BtnSettingClick(Sender: TObject);
begin
ComPort.ShowSetupDialog;
end;
procedure TForm1.BtnConnectClick(Sender: TObject);
begin
if ComPort.Connected = true then
begin
ComPort.Close;
LblStatusCom.Caption := ComPort.Port + ' Disconnected';
BtnConnect.Caption := 'Connect';
BtnSetting.Enabled := true;
end
else
begin
ComPort.Open;
LblStatusCom.Caption := ComPort.Port + ' Connected';
BtnConnect.Caption := 'Disconnect';
BtnSetting.Enabled := False;
// timer1.Enabled:=true;
Timer2.Enabled := True;
DataTrans := $01;
end;
end;
procedure TForm1.IntSerialRX(Sender: TObject; Count: Integer);
begin
ComPort.Read(DataSerial,1);
FlagRX := FlagRX + 1;
if (FlagRX = 1) then
begin
DataSerialTemp := DataSerial;
end;
if (FlagRX = 2) then
begin
DataSerialTemp := DataSerialTemp SHL 8;
DataSerialTemp := DataSerialTemp OR DataSerial;
FlagRX := 0;
DataSHT := DataSerialTemp;
//Konversi Temperature dari SHT11
// Celcius = (SOt * d2) + d1
// dengan d2 = 0.01 (14-bit) dan d1 = -40 (VDD = 5Volt)
// Celcius = (ADC_Temp * 0.01) - 40 -- dikalikan dengan 100
// Celcius = (ADC_Temp - 4000)
//Catatan: Faktor konversi pada rumus dikalikan dengan 100 untuk
// memperoleh hasil pengukuran temperature per-100 derajat (0,01)
// dengan adanya pembulatan
if (DataTrans = 1) then
begin
DataSHT := (DataSHT-4000) / 100;
LblTemp.Caption := CurrToStr(DataSHT);
DataTrans := 2;
end
//Konversi Relative Humidity dari SHT11
// Relatitive Humidity (linear)
// RHLin = c1 + (c2 * SORH) + (c3 * SORH^2)
// Untuk pengukuran 12-bit: c1 = -4; c2 = 0,0405 dan c3 = -2,8*10^-6
// RHLin = (ADC_RH * 0,0405) - (ADC_RH^2 * 0,0000028) - 4
else if (DataTrans = 2) then
begin
Temp := DataSHT;
DataSHT := (Temp * 0.0405) - (Temp * Temp * 0.0000028) - 4;
LblHumi.Caption := CurrToStr(DataSHT);
DataTrans := 1;
end
else DataTrans := 1;
Timer2.Enabled := True;
end;
end;
{procedure TForm1.Timer1Timer(Sender: TObject);
begin
timer1.Enabled := False;
end;}
procedure TForm1.FormCreate(Sender: TObject);
begin
Label3.Caption := '%RH';
Label4.Caption := '*C';
end;
procedure TForm1.IntTim2(Sender: TObject);
begin
if ComPort.Connected = True then
begin
ComPort.Write(DataTrans,1);
FlagRX := 0;
end;
Timer2.Enabled := False;
end;
end.
saludos y gracias por su ayuda !.