Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   ayuda con un codigo (https://www.clubdelphi.com/foros/showthread.php?t=70524)

gaston260 26-10-2010 03:41:42

codigo para usar con sensor de temperatura y humedad no funciona ni muestra nada
 
1 Archivos Adjunto(s)
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 :

Código Delphi [-]
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 !.

Casimiro Notevi 26-10-2010 03:44:56

Hola gaston260, por favor, recuerda poner títulos decriptivos a las preguntas, gracias por tu colaboración.

Neftali [Germán.Estévez] 26-10-2010 10:58:57

Antes de meterte en temas de programación, utiliza por ejemplo, el HyperTerminal de Windows. Con eso podrás saber si recibes datos correctamente por el puerto serial y en qué formato los revives. Con él también podrás probar diferentes configuraciones para el puerto (sin tener que preocuparte de otros temas).
Cuando ya tengas lecturas correctas, puedes comenzar a programar.

Haz la prueba y coloca aquí una muestra de las lecturas que obtienes.

gaston260 27-10-2010 01:10:55

Hola muchas gracias ! nunca use el HyperTerminal de windows pero ya me pongo a buscar informacion ! , te explico mejor lo que estoy tratando de hacer ! ; Tengo un circuito que es el que adjunte y va al puerto serie ya lo probe con un software y me da lecturas correctas a mi entender pero yo quiero tener mi codigo para modelarlo a mi antojo , pasa que no entiendo nada de puertos serie y el codigo que encontre no funciona , creo que puede estar echo para comunicarse con un pic pero no estoy seguro aunque tambien creo que si mi circuito funciona con un programa tambien puede funcionar con este codigo y como no se nada de puertos ni de protocolos I2c que es el que usa mi sensor estoy muy limitado probablemente neftali o alguien sepa en donde puedo encontrar toda la informacion que necesito para usar el puerto serie y con el protocolo I2c voy a ver donde consigo informacion !.

el hiperterminal de windows esta ubicado en :

Menú inicio -> Programas -> Accesorios -> Comunicaciones -> Hyperterminal

o tambien

Ejecutar, y poner gpedit.msc

saludos y ya estare molestando de nuevo :) !.


La franja horaria es GMT +2. Ahora son las 08:00:20.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi