unit Temperature1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, iBTMEXPW, ExtCtrls, ComCtrls, Menus, StdCtrls, Grids, jpeg, TeEngine,
  Series, TeeProcs, Chart;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Close1: TMenuItem;
    SaveAs1: TMenuItem;
    Save1: TMenuItem;
    Print1: TMenuItem;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Button1: TButton;
    StringGrid2: TStringGrid;
    Chart2: TChart;
    Timer3: TTimer;
    procedure Button2Click(Sender: TObject);
    public
    { Public declarations }
     SHandle : longint;
     StateBuf : array[0..5120] of smallint;
     CRC8,CRC16 : Word;
     Done : boolean;
  end;
  Const
  LEVEL_SET  = 1;
  LEVEL_STRONG_PULL_UP = $01;
  PRIMED_BYTE =  2;
  PRIMED_NONE =  0;
  LEVEL_NORMAL =  $00;


var
  Form1: TForm1;
 rom,rom1,rom2 : array[0..8] of smallint;
implementation

{$R *.dfm}


procedure TForm1.Timer3Timer(Sender: TObject) ;
{$J+}
const
  j : integer = 0;
{$J-}
var
 tsht,tsht1, i, l, tmp1 : smallint;
 cr,cpc, tmpf,tmp : Extended;
 rbuf : array[0..9] of smallint ;
 st : longint;
 a,b,c,d: real;
 str, str1: string;
 romstr: string;
  h,g: integer;
 CRCByte,flag,z1,z2,CRC3: Byte;
 PortNum,PortType:smallint;

begin
   TMRom(SHandle,@stateBuf,@rom2);
   if (($20 and $7F )= (rom2[0] and $7F)) then
       begin
          for i := 7 downto 0 do
          romstr := romstr + IntToHex(ROM2[i],2);
        Label9.caption := 'Serial ROM ID :  ' + romstr;
        end;
      TMReadDefaultPort(@PortNum, @PortType);
   SHandle := TMExtendedStartSession(PortNum,PortType,NIL);
If (TMAccess(Shandle,@StateBuf)= 1) then
  begin
  CRC16 :=0;
  /////
  flag := TMTouchByte(SHandle,$55);
  CRCByte := flag;                            /////////55
  CRC16 := TMCRC(1, @CRCByte,CRC16 , 1);
  ///////
  flag := TMTouchByte(SHandle,$08);          /////////08
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  ///////
   flag := TMTouchByte(SHandle,$00);
   CRCByte := flag;                                 /////00
   CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  ////////
  flag := TMTouchByte(SHandle,$00);                //////00
   CRCByte := flag;
   CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  ////////
   flag := TMTouchByte(SHandle,$FF);
   CRCByte := flag;
   CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
   ////////////
   flag := TMTouchByte(SHandle,$FF);
   CRCByte := flag;
   CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  ////////////
  flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  ////////
  flag := TMTouchByte(SHandle,$01);                  //////01
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  ///////
   flag := TMTouchByte(SHandle,$FF);
   CRCByte := flag;
   CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
   ////////////
   flag := TMTouchByte(SHandle,$FF);
   CRCByte := flag;
   CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
   ////////////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  ////////
  flag := TMTouchByte(SHandle,$00);
  CRCByte := flag;                                 ///////00
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
   ///////
   flag := TMTouchByte(SHandle,$FF);
   CRCByte := flag;
   CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
   ////////////
   flag := TMTouchByte(SHandle,$FF);
   CRCByte := flag;
   CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
   ////////////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  //////
   flag := TMTouchByte(SHandle,$01);                 ///////01
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
   /////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  /////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  /////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);

   ///////
   flag := TMTouchByte(SHandle,$00);               ////////00
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
   /////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  /////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  /////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
   /////
   flag := TMTouchByte(SHandle,$01);         /////////01
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  /////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  /////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  /////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);

     ///////
   flag := TMTouchByte(SHandle,$00);         /////////00
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  /////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  /////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  /////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
   /////
   flag := TMTouchByte(SHandle,$01);           ///////01
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  /////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  /////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  /////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  /////
   flag := TMTouchByte(SHandle,$00);          ////////00
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  ///////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
   /////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  /////
    flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  //////
  flag := TMTouchByte(SHandle,$01);           ///////01
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
  /////
   flag := TMTouchByte(SHandle,$FF);
  CRCByte := flag;
  CRC16 := TMCRC(1, @CRCByte, CRC16, 1);

  /////
   flag := TMTouchByte(SHandle,$FF);
   CRCByte := flag;
   CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
   /////
   flag := TMTouchByte(SHandle,$FF);
   CRCByte := flag;
   CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
    ////////////
    flag := TMTouchByte(SHandle,$AA);
    CRCByte := flag;
    CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
    //////
     flag := TMTouchByte(SHandle,$00);
    CRCByte := flag;
    CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
     //////
     flag := TMTouchByte(SHandle,$00);
    CRCByte := flag;
    CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
    ////////
    CRC16:=0;
     flag := TMTouchByte(SHandle,$3C);
    CRCByte := flag;
    CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
    /////
    flag := TMTouchByte(SHandle,$0F);
    CRCByte := flag;
    CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
    ////////
    flag := TMTouchByte(SHandle,$00);
    CRCByte := flag;
    CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
    ////////
    flag:= TMTouchByte(SHandle,$FF);
    CRCByte := flag;
    CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
    ////////
    flag:= TMTouchByte(SHandle,$FF);
    CRCByte := flag;
    CRC16 := TMCRC(1, @CRCByte, CRC16, 1);
    st := GetTickCount + 1000;
    g:=1 ;
   for i := 0 to 7 do
          begin
            rbuf[i]:= TMTouchByte(Shandle, $FF);
            CRCByte := Byte(rbuf[i]); { the byte to run through CRC8 routine }
            CRC16 := TMCRC(1, @CRCByte, CRC16, 1);

            if ((i+1) mod 2 =0) then
            begin
            tsht:=rbuf[i]*256 or rbuf[i-1];
            StringGrid2.Cells[g,j] :=FloatToStr(Tsht)+'  '+FloatToStr(rbuf[i-1]);
            g:=g+1;
            end;
        end;
        flag:= TMTouchByte(Shandle, $FF);
        CRCByte := flag; { the byte to run through CRC8 routine }
        CRC16 := TMCRC(1, @CRCByte, CRC16, 1);


  j:=j+1;
  TMEndSession(Shandle);
  Done := True;

end;
end;



procedure TForm1.Button2Click(Sender: TObject);//// часовой интервал таймера

var
    b: integer;
begin
 Timer3.Enabled := True;
 b:= StrToInt(Form1.Edit2.Text);
  Timer1.Interval:=b*1000;
end;

end.