{
Copyright (c) 2008 Tristan Seifert<seiferttristan@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
}

unit Unit1; 

{$mode delphi}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Spin, Chart, ExtCtrls, EditBtn, TAGraph, Grids,Unit3, Buttons,
  ComCtrls, TASeries, TAEngine, ActnList, Menus,UpDateForm, LazHelpHTML,HTTPSend,serial,iNIfILES;

type

  { TForm1 }

  TForm1 = class(TForm)
    Bevel1: TBevel;
    Button1: TButton;
    Timer2: TTimer;
    UpButton: TButton;
    Button3: TButton;
    Button4: TButton;
    Chart1: TChart;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    Combo1: TComboBox;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    FloatSpinEdit1: TFloatSpinEdit;
    FloatSpinEdit2: TFloatSpinEdit;
    GroupBox1: TGroupBox;
    GroupBox10: TGroupBox;
    GroupBox11: TGroupBox;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    GroupBox5: TGroupBox;
    GroupBox6: TGroupBox;
    GroupBox7: TGroupBox;
    GroupBox8: TGroupBox;
    GroupBox9: TGroupBox;
    Image1: TImage;
    Label1: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    LED14: TShape;
    LED10: TShape;
    LED8: TShape;
    LED12: TShape;
    LED11: TShape;
    LED9: TShape;
    LED13: TShape;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    paintBox1: TPaintBox;
    paintBox2: TPaintBox;
    LED2: TShape;
    LED5: TShape;
    LED6: TShape;
    LED7: TShape;
    LED3: TShape;
    LED1: TShape;
    LED4: TShape;
    ProgressBar1: TProgressBar;
    StatusBar1: TStatusBar;
    UpdateMenu: TPopupMenu;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    SpinEdit10: TSpinEdit;
    SpinEdit11: TSpinEdit;
    SpinEdit12: TSpinEdit;
    SpinEdit13: TSpinEdit;
    SpinEdit14: TSpinEdit;
    SpinEdit15: TSpinEdit;
    SpinEdit1: TSpinEdit;
    SpinEdit2: TSpinEdit;
    SpinEdit3: TSpinEdit;
    SpinEdit4: TSpinEdit;
    SpinEdit5: TSpinEdit;
    SpinEdit6: TSpinEdit;
    SpinEdit7: TSpinEdit;
    SpinEdit8: TSpinEdit;
    SpinEdit9: TSpinEdit;
    StringGrid1: TStringGrid;
    Timer1: TTimer;
    DataProcessor: TTimer;
    ToggleBox2: TToggleBox;
    ToggleBox1: TToggleBox;
    TrayIcon1: TTrayIcon;
    procedure DataProcessorTimer(Sender: TObject);
    procedure FloatSpinEdit2Change(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure GroupBox3Click(Sender: TObject);
    procedure GroupBox4Click(Sender: TObject);
    procedure HELPClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure CheckBox1Change(Sender: TObject);
    procedure CheckBox2Change(Sender: TObject);
    procedure CheckBox3Change(Sender: TObject);
    procedure CheckBox4Change(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure ComboBox2Change(Sender: TObject);
    procedure FloatSpinEdit1Change(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure MenuItem3Click(Sender: TObject);
    procedure MenuItem4Click(Sender: TObject);

    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
    procedure SpeedButton4Click(Sender: TObject);
    procedure CatClick(Sender: TObject);
    procedure SpinEdit10Change(Sender: TObject);
    procedure SpinEdit11Change(Sender: TObject);
    procedure SpinEdit12Change(Sender: TObject);
    procedure SpinEdit13Change(Sender: TObject);
    procedure SpinEdit14Change(Sender: TObject);
    procedure SpinEdit15Change(Sender: TObject);
    procedure SpinEdit1Change(Sender: TObject);
    procedure SpinEdit2Change(Sender: TObject);
    procedure SpinEdit3Change(Sender: TObject);
    procedure SpinEdit4Change(Sender: TObject);
    procedure SpinEdit5Change(Sender: TObject);
    procedure SpinEdit6Change(Sender: TObject);
    procedure SpinEdit7Change(Sender: TObject);
    procedure SpinEdit8Change(Sender: TObject);
    procedure SpinEdit9Change(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);

    procedure ToggleBox1Change(Sender: TObject);
    procedure ToggleBox2Change(Sender: TObject);
    procedure UpButtonClick(Sender: TObject);


  private
    { private declarations }

  public
    { public declarations }

  end; 

var
  Form1: TForm1; 
  Code,codeB:integer;
          s: TBarSeries;
    d: TSerie;
    p: TPieSeries;
    a: TAreaSeries;
    x,y,x1,y1, x3,y3: double;
    SHandle:TSerialHandle;
    DataBuf:String;
    conn:boolean;
    const
    version='0.0.1';


implementation

{ TForm1 }
{
procedure SearchSerialPorts;
var
i:integer;
begin

  for i:=1 to 16 do
  begin
    TestHandle := CreateFile(PChar('\\.\COM'+IntToStr(i)),GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,LongInt(0));
    if (TestHandle > 0) then
    begin
      Combo1.Items.Add('COM'+inttostr(i));
      CloseHandle(TestHandle);
    end;
  end;
end;
}

procedure anaShowDisplay(aWert: double;pBox:TPaintBox;FSize:integer;EinHeit:string;Teilung:integer);

const
kStrich = 5; lStrich = 8; anzStriche = 21; sWinkel = 1.05; iRadius = 85;
zRadius = 40; zStrich = 48;
var
dWinkel, aWinkel: Single; sWert: Integer; dText: string;
x, y: Integer; x1, y1, x2, y2: Single;
i: LongInt;
ZBereich : Integer;
zTeilung : integer;



begin
 zBereich := FSize;
 zTeilung := Teilung;
pBox.Canvas.Brush.Color := clWhite;
   pBox.Canvas.Pen.Color := clWhite;
pBox.Canvas.Pen.Width := 1;
pBox.Canvas.Rectangle(0, 0, pBox.ClientWidth, pBox.ClientHeight);
pBox.Canvas.Pen.Color := clBlack;

// --- Minor Ticks ------------

aWinkel := sWinkel;
dWinkel := sWinkel / (anzStriche - 1);
   pBox.Canvas.Pen.Color := clGray;
for i := 1 to anzStriche do
begin
pBox.Canvas.Pen.Color :=clBlue;
{
If i > 11  then     pBox.Canvas.Pen.Color := clRed;
If i = 12  then     pBox.Canvas.Pen.Color :=clYellow;
If i = 13  then     pBox.Canvas.Pen.Color :=clYellow;
If i = 10  then     pBox.Canvas.Pen.Color :=clYellow;


If i = 3  then     pBox.Canvas.Pen.Color :=clRed;
If i = 2  then     pBox.Canvas.Pen.Color :=clRed;
If i = 1  then     pBox.Canvas.Pen.Color :=clRed;
 }
x1 := Cos(aWinkel) * iRadius;
y1 := Sin(aWinkel) * iRadius;
x2 := x1 + Cos(aWinkel) * kStrich;
y2 := y1 + Sin(aWinkel) * kStrich;
pBox.Canvas.MoveTo(Round(pBox.ClientWidth * (x1 / 100) + pBox.ClientWidth / 2),pBox.ClientHeight - Round(pBox.ClientHeight * ((y1-20) / 80)));
pBox.Canvas.LineTo(Round(pBox.ClientWidth * (x2 / 100) + pBox.ClientWidth / 2),pBox.ClientHeight - Round(pBox.ClientHeight * ((y2-20) / 80)));
aWinkel := aWinkel + dWinkel;
end;

// --- Major Ticks --------------------

aWinkel := sWinkel;
sWert := zBereich;
dWinkel := sWinkel / ((anzStriche - 1) / 5);
   pBox.Canvas.Pen.Color := clBlack;
for i := 1 to Round((anzStriche -1)/5+1) do
begin

x1 := Cos(aWinkel) * iRadius;
y1 := Sin(aWinkel) * iRadius;
x2 := x1 + Cos(aWinkel) * lStrich;
y2 := y1 + Sin(aWinkel) * lStrich;
pBox.Canvas.MoveTo(Round(pBox.ClientWidth * (x1 / 100) + pBox.ClientWidth / 2),pBox.ClientHeight - Round(pBox.ClientHeight * ((y1-20) / 80)));
pBox.Canvas.LineTo(Round(pBox.ClientWidth * (x2 / 100) + pBox.ClientWidth / 2),pBox.ClientHeight - Round(pBox.ClientHeight * ((y2-20) / 80)));
pBox.Canvas.TextOut(Round(pBox.ClientWidth * (x1 / 100) + pBox.ClientWidth / 2)-7,pBox.ClientHeight - Round(pBox.ClientHeight * ((y2-20) / 80))-12,IntToStr(sWert));
aWinkel := aWinkel + dWinkel;
sWert := sWert - zTeilung;

end;

// ----- Analog Wert -------------------------------

pBox.Canvas.Pen.Color := clRed;
aWinkel := sWinkel + ((zBereich-aWert) / zBereich) * sWinkel;
x1 := Cos(aWinkel) * zRadius;
y1 := Sin(aWinkel) * zRadius;
x2 := x1 + Cos(aWinkel) * zStrich;
y2 := y1 + Sin(aWinkel) * zStrich;
pBox.Canvas.MoveTo(Round(pBox.ClientWidth * (x1 / 100) + pBox.ClientWidth / 2),pBox.ClientHeight - Round(pBox.ClientHeight * ((y1-20) / 80)));
pBox.Canvas.LineTo(Round(pBox.ClientWidth * (x2 / 100) + pBox.ClientWidth / 2),pBox.ClientHeight - Round(pBox.ClientHeight * ((y2-20) / 80)));

// ----- Digital Wert ----------------------------

pBox.Canvas.Font.Size:=5;
if aWert < 0 then  dText :=  '???'
else dText :=  floatToStr(round(aWert))+''+ EinHeit;
x := (pBox.ClientWidth div 2) - (pBox.Canvas.TextWidth(dText) div 2);
y := pBox.ClientHeight - 24;
pBox.Canvas.TextOut(x, y, dText);
end;

 {

procedure TForm1.SpeedButton5Click(Sender: TObject);
var i,LFarbwert,YFarbwert,RFarbwert:integer;
RColor:TColor;
begin
 For i:=0 to 1000 Do
 begin

  LFarbwert := Random(256) - 1;
    RFarbwert := Random(256) - 1;
      YFarbwert := Random(256) - 1;
  Rcolor := RGBtocolor(LFarbwert, RFarbwert, YFarbwert);
                      Canvas.Brush.Color:=RColor;
  Canvas.Pen.Color:=RColor;
                //        Canvas.Line(i,1,504,731);
                        end;
  End;   }
  
procedure TForm1.ToggleBox1Change(Sender: TObject);
var
com,at:string;
begin
AT:='AT';
try
 com:=Combo1.Items[Combo1.ItemIndex];
 except
   MessageDlg('Information','Bitte wählen sie einen Anschluß aus',mtInformation,[mbOK],'');
   ToggleBox1.Checked:=false;
   exit;
end;
 
  if ToggleBox1.Checked=true then begin
  ToggleBox1.Caption:='Bitte warten...';

                        Canvas.Brush.Color:=clGray;
                        Canvas.FillRect(400,244,532,274);

                        Canvas.TextOut(405,254,'Verbindung');
                        anaShowDisplay(FloatSpinEdit2.Value,PaintBox1,18,'Volt',3);
                        SHandle:=SerOpen(com);
                      if  SerWrite(SHandle,AT,2)=2 then
                      begin
                      MessageDlg('Information','Das Territorium ist jetzt verbunden',mtInformation,[mbOK],'');
                      SerFlush(SHandle);
                      conn:=true;

                      ToggleBox1.Caption:='Verbunden';
                      DataProcessor.Enabled:=true;
                      end
                      else
                      begin
                      MessageDlg('Fehler','Territorium nicht gefunden!!!'+#13+'Es konnte keine Verbindung Hergestellt werden.',mtError,[mbOK],'');
                      ToggleBox1.Checked:=false;
                      end;
    If FloatSpinEdit2.Value < 10.2 then
  begin
                Canvas.Brush.Color:=clYellow;
                        Canvas.FillRect(400,212,532,242);
                        Canvas.TextOut(405,219,'Stromversorgung');
                        Canvas.Brush.Color:=clRED;

                        Canvas.FillRect(260,276,532,306);

                        Canvas.TextOut(356,284,'MN BUS A ');
                        

  end
    else
  begin
                          Canvas.Brush.Color:=clWhite;

                        Canvas.FillRect(260,276,532,306);


                        Canvas.TextOut(356,284,' MN BUS A ');
                        canvas.brush.Color:=clGray;
                                                Canvas.FillRect(400,212,532,242);
                        Canvas.TextOut(405,219,'Stromversorgung');
  end;
        anaShowDisplay(SpinEdit1.Value,PaintBox2,45,'°C',9);

        StringGrid1.Cells[1,1]:=floattostr(FloatSpinEdit1.Value)+'°C';

          StringGrid1.Cells[1,3]:=inttostr(SpinEdit1.Value)+'%';
               StringGrid1.Cells[1,2]:=inttostr(SpinEdit2.Value)+'%';

  end;
    if ToggleBox1.Checked=false then begin
              DataProcessor.Enabled:=false;
    ToggleBox1.Caption:='Nicht verbunden';

                        Canvas.Brush.Color:=clRed;
                        Canvas.FillRect(400,244,532,274);

                        Canvas.TextOut(405,254,'Verbindung');
                          anaShowDisplay(-1,PaintBox1,18,'',3);
                           anaShowDisplay(-1,PaintBox2,45,'',9);

                               StringGrid1.Cells[1,1]:='???';
        StringGrid1.Cells[1,2]:='???';
            StringGrid1.Cells[1,3]:='???';
            SerClose(SHandle);
                        end;
end;

procedure TForm1.ToggleBox2Change(Sender: TObject);
begin
   if ToggleBox2.Checked=true then
   begin
   ToggleBox2.Caption:='Automatisch';
       SpinEdit5.Enabled:=true;
    SpinEdit6.Enabled:=true;
    SpinEdit7.Enabled:=true;
    SpinEdit8.Enabled:=true;
    SpinEdit9.Enabled:=true;
    SpinEdit10.Enabled:=true;
    CheckBox1.Enabled:=true;
    CheckBox2.Enabled:=true;
    CheckBox3.Enabled:=true;
        Label8.Caption:='Bereit';
    label8.Color:=clLime;
        CheckBox1Change(CheckBox1);
        CheckBox2Change(CheckBox2);
            CheckBox3Change(CheckBox3);

   end;
    if ToggleBox2.Checked=false then begin
    ToggleBox2.Caption:='Manuell';
    SpinEdit5.Enabled:=false;
    SpinEdit6.Enabled:=false;
    SpinEdit7.Enabled:=false;
    SpinEdit8.Enabled:=false;
    SpinEdit9.Enabled:=false;
    SpinEdit10.Enabled:=false;
    CheckBox1.Enabled:=false;
    CheckBox2.Enabled:=false;
    CheckBox3.Enabled:=false;
    Label8.Caption:='Manuelle Fütterung';
    label8.Color:=clYellow;
    CheckBox1Change(CheckBox1);
        CheckBox2Change(CheckBox2);
            CheckBox3Change(CheckBox3);
    
    
    end;
end;

procedure TForm1.UpButtonClick(Sender: TObject);
begin
  Timer2.Enabled:=false;
  UpForm.ShowModal;
  Timer2.Enabled:=false;
  
end;





procedure TForm1.Button1Click(Sender: TObject);
var
month:AnsiString;
i,i2:integer;
Rcolor:TColor;
LFarbwert,RFarbwert,YFarbwert:Integer;
buf:string;
begin
  if conn then begin
   LFarbwert := Random(256) - 1;
    RFarbwert := Random(256) - 1;
      YFarbwert := Random(256) - 1;
  Rcolor := RGBtocolor(LFarbwert, RFarbwert, YFarbwert);

     d:= TSerie.Create(Chart1);
     d.ShowLines := true;
     d.ShowPoints := true;


     d.SeriesColor := Rcolor;
     Chart1.AddSerie(d);
     

   try
  Month:=ComboBox1.Items[ComboBox1.ItemIndex];

  Month:= Month[1]+''+Month[2]+''+Month[3];
  except
    MessageDlg('Information','Bitte wählen sie einen Monat aus',mtInformation,[mbOK],'');
    Chart1.DeleteSerie(d);
  end;
         d.title := 'Temperatur '+month;
  i:=1;

  For i:=1 to SpinEdit15.Value Do
  begin





   x1:=x1 + 1.35;
   buf:=Month+'['+inttostr(i);
   
   SerWrite(SHandle,buf,Length(buf));
   SerRead(SHandle,buf,3);
   y1:=strtofloat(buf);
   y1:=i;
   d.AddXY(x1,y1, inttostr(i)+'.'+month+'.2009', Rcolor);

   end;
   if not conn then begin
   MessageDlg('Warnung','Immoment ist keine Verbindung aktiv!',mtWarning,[mbOK],'');
   
   end;



  End;

     Chart1.Paint;
     
//Button1.Enabled:=false;

end;
procedure Split(const Delimiter: Char;Input: string;const Strings: TStrings) ;
begin
   Assert(Assigned(Strings)) ;
   Strings.Clear;
   Strings.Delimiter := Delimiter;
   Strings.DelimitedText := Input;
end;


procedure TForm1.DataProcessorTimer(Sender: TObject);
var
Data:TStringList;
begin
  DataProcessor.Interval:=1250;
If  SerRead(SHandle,DataBuf,50)=50 then begin
sleep(10);
Data := TStringList.Create;
   try
     Split(']', 'DataBuf', Data) ;
     FloatSpinEdit2.Value:=strtoint(Data.Strings[0]);
     FloatSpinEdit2Change(FloatSpinEdit2);
     //FloatSpinEdit1.Value:=strtoint(Data.Strings[1]);
           StringGrid1.Cells[1,1]:=Data.Strings[1]+'°C';
         anaShowDisplay(StrToFloat(Data.Strings[1]),PaintBox2,45,'°C',9);
         {==========================================O===}
        if StrToFloat(Data.Strings[1]) > 37.50 then begin
                                              Canvas.Brush.Color:=clRed;
                        Canvas.FillRect(400,180,532,210);
                        Canvas.TextOut(405,187,'Temperatur hoch')
                        end;
                        If StrToFloat(Data.Strings[1]) < 16.00 then begin
                                                  Canvas.Brush.Color:=clRed;
                        Canvas.FillRect(260,180,398,210);
                        Canvas.TextOut(265,187,'Temperatur tief');
                        end;
                        If StrToFloat(Data.Strings[1]) > 10 then
        begin
                                                          Canvas.Brush.Color:=clGray;
                        Canvas.FillRect(260,180,398,210);
                        Canvas.TextOut(265,187,'Temperatur tief');
                        end;

                                               If StrToFloat(Data.Strings[1]) < 37.50 then
        begin
                                                          Canvas.Brush.Color:=clGray;
                     Canvas.FillRect(400,180,532,210);
                        Canvas.TextOut(405,187,'Temperatur hoch')
                        end;

     {==================================================}
     if Data.Strings[2] = 'FU' then Label8.Caption:='Fütterung...';
     if Data.Strings[2] = 'NO' then Label8.Caption:='Bereit';
     if strtoint(Data.Strings[3]) < 31 then begin
     ProgressBar1.Position:=strtoint(Data.Strings[3]);
     MessageDlg('FÜTTERUNG', 'Der Futtertank geht leer.'+#13+'Bitte füllen sie ihn nach', mtWarning,[mbOK], '');
                                                   Canvas.Brush.Color:=clRed;
                        Canvas.FillRect(260,244,398,274);
                        Canvas.TextOut(290,254,'Futter');
     end
     else begin
     Timer1.Enabled:=False;
                                                        Canvas.Brush.Color:=clgray;
                        Canvas.FillRect(260,244,398,274);
                        Canvas.TextOut(290,254,'Futter');
     end;
     ProgressBar1.Position:=strtoint(Data[3]);
   finally
     A.Free;
   end;
end;

end;

procedure TForm1.FloatSpinEdit2Change(Sender: TObject);
var
aa:AnsiString;
begin
aa:=floattostr(FloatSpinEdit2.Value);
  anaShowDisplay(FloatSpinEdit2.Value,PaintBox1,18,'Volt',3);
  If FloatSpinEdit2.Value > 10 then
  begin
  LED2.Brush.Color:=clRed;
    LED1.Brush.Color:=clRed;
    LED3.Brush.Color:=clGray;
      LED4.Brush.Color:=clGray;
        LED5.Brush.Color:=clGray;
          LED6.Brush.Color:=clGray;
            LED7.Brush.Color:=clGray;
  end;
  If FloatSpinEdit2.Value < 10 then
  begin

     LED2.Brush.Color:=clBlue;
    LED1.Brush.Color:=clBlue;
    LED3.Brush.Color:=clBlue;
      LED4.Brush.Color:=clBlue;
        LED5.Brush.Color:=clBlue;
          LED6.Brush.Color:=clBlue;
            LED7.Brush.Color:=clGray;
   if aa[1] = '0' then
  begin
       LED9.Brush.Color:=clBlue;
    LED8.Brush.Color:=clBlue;
    LED10.Brush.Color:=clBlue;
      LED11.Brush.Color:=clBlue;
        LED12.Brush.Color:=clBlue;
          LED13.Brush.Color:=clBlue;
            LED14.Brush.Color:=clGray;
  end;
  IF aa[1] = '1' then
  begin
       LED9.Brush.Color:=clBlue;
    LED8.Brush.Color:=clBlue;
    LED10.Brush.Color:=clGray;
      LED11.Brush.Color:=clGray;
        LED12.Brush.Color:=clGray;
          LED13.Brush.Color:=clGray;
            LED14.Brush.Color:=clGray;
  end;

    IF aa[1] = '2' then
  begin
       LED9.Brush.Color:=clGray;
    LED8.Brush.Color:=clBlue;
    LED10.Brush.Color:=clBlue;
      LED11.Brush.Color:=clBlue;
        LED12.Brush.Color:=clGray;
          LED13.Brush.Color:=clBlue;
            LED14.Brush.Color:=clBlue;
  end;

    IF aa[1] = '3' then
  begin
       LED9.Brush.Color:=clGray;
    LED8.Brush.Color:=clGray;
    LED10.Brush.Color:=clBlue;
      LED11.Brush.Color:=clBlue;
        LED12.Brush.Color:=clBlue;
          LED13.Brush.Color:=clBlue;
            LED14.Brush.Color:=clBlue;
  end;
    IF aa[1] = '4' then
  begin
       LED9.Brush.Color:=clBlue;
    LED8.Brush.Color:=clGray;
    LED10.Brush.Color:=clGray;
      LED11.Brush.Color:=clBlue;
        LED12.Brush.Color:=clBlue;
          LED13.Brush.Color:=clGray;
            LED14.Brush.Color:=clBlue;
  end;
    IF aa[1] = '5' then
  begin
       LED9.Brush.Color:=clBlue;
    LED8.Brush.Color:=clGray;
    LED10.Brush.Color:=clBlue;
      LED11.Brush.Color:=clGray;
        LED12.Brush.Color:=clBlue;
          LED13.Brush.Color:=clBlue;
            LED14.Brush.Color:=clBlue;
  end;
    IF aa[1] = '6' then
  begin
       LED9.Brush.Color:=clBlue;
    LED8.Brush.Color:=clBlue;
    LED10.Brush.Color:=clBlue;
      LED11.Brush.Color:=clGray;
        LED12.Brush.Color:=clBlue;
          LED13.Brush.Color:=clBlue;
            LED14.Brush.Color:=clBlue;
  end;
    IF aa[1] = '7' then
  begin
       LED9.Brush.Color:=clGray;
    LED8.Brush.Color:=clGray;
    LED10.Brush.Color:=clBlue;
      LED11.Brush.Color:=clBlue;
        LED12.Brush.Color:=clBlue;
          LED13.Brush.Color:=clGray;
            LED14.Brush.Color:=clGray;
  end;
    IF aa[1] = '8' then
  begin
       LED9.Brush.Color:=clBlue;
    LED8.Brush.Color:=clBlue;
    LED10.Brush.Color:=clBlue;
      LED11.Brush.Color:=clBlue;
        LED12.Brush.Color:=clBlue;
          LED13.Brush.Color:=clBlue;
            LED14.Brush.Color:=clBlue;
  end;
    IF aa[1] = '9' then
  begin
       LED9.Brush.Color:=clBlue;
    LED8.Brush.Color:=clGray;
    LED10.Brush.Color:=clBlue;
      LED11.Brush.Color:=clBlue;
        LED12.Brush.Color:=clBlue;
          LED13.Brush.Color:=clGray;
            LED14.Brush.Color:=clBlue;
  end;


  end
  Else if FloatSpinEdit2.Value > 10 then
  begin


  if aa[2] = '0' then
  begin
       LED9.Brush.Color:=clGreen;
    LED8.Brush.Color:=clGreen;
    LED10.Brush.Color:=clGreen;
      LED11.Brush.Color:=clGreen;
        LED12.Brush.Color:=clGreen;
          LED13.Brush.Color:=clGreen;
            LED14.Brush.Color:=clGray;
  end;
  IF aa[2] = '1' then
  begin
       LED9.Brush.Color:=clGreen;
    LED8.Brush.Color:=clGreen;
    LED10.Brush.Color:=clGray;
      LED11.Brush.Color:=clGray;
        LED12.Brush.Color:=clGray;
          LED13.Brush.Color:=clGray;
            LED14.Brush.Color:=clGray;
  end;

    IF aa[2] = '2' then
  begin
       LED9.Brush.Color:=clGray;
    LED8.Brush.Color:=clGreen;
    LED10.Brush.Color:=clGreen;
      LED11.Brush.Color:=clGreen;
        LED12.Brush.Color:=clGray;
          LED13.Brush.Color:=clGreen;
            LED14.Brush.Color:=clGreen;
  end;

    IF aa[2] = '3' then
  begin
       LED9.Brush.Color:=clGray;
    LED8.Brush.Color:=clGray;
    LED10.Brush.Color:=clGreen;
      LED11.Brush.Color:=clGreen;
        LED12.Brush.Color:=clGreen;
          LED13.Brush.Color:=clGreen;
            LED14.Brush.Color:=clGreen;
  end;
    IF aa[2] = '4' then
  begin
       LED9.Brush.Color:=clGreen;
    LED8.Brush.Color:=clGray;
    LED10.Brush.Color:=clGray;
      LED11.Brush.Color:=clGreen;
        LED12.Brush.Color:=clGreen;
          LED13.Brush.Color:=clGray;
            LED14.Brush.Color:=clGreen;
  end;
    IF aa[2] = '5' then
  begin
       LED9.Brush.Color:=clGreen;
    LED8.Brush.Color:=clGray;
    LED10.Brush.Color:=clGreen;
      LED11.Brush.Color:=clGray;
        LED12.Brush.Color:=clGreen;
          LED13.Brush.Color:=clGreen;
            LED14.Brush.Color:=clGreen;
  end;
    IF aa[2] = '6' then
  begin
       LED9.Brush.Color:=clGreen;
    LED8.Brush.Color:=clGreen;
    LED10.Brush.Color:=clGreen;
      LED11.Brush.Color:=clGray;
        LED12.Brush.Color:=clGreen;
          LED13.Brush.Color:=clGreen;
            LED14.Brush.Color:=clGreen;
  end;
    IF aa[2] = '7' then
  begin
       LED9.Brush.Color:=clGray;
    LED8.Brush.Color:=clGray;
    LED10.Brush.Color:=clGreen;
      LED11.Brush.Color:=clGreen;
        LED12.Brush.Color:=clGreen;
          LED13.Brush.Color:=clGray;
            LED14.Brush.Color:=clGray;
  end;
    IF aa[2] = '8' then
  begin
       LED9.Brush.Color:=clGreen;
    LED8.Brush.Color:=clGreen;
    LED10.Brush.Color:=clGreen;
      LED11.Brush.Color:=clGreen;
        LED12.Brush.Color:=clGreen;
          LED13.Brush.Color:=clGreen;
            LED14.Brush.Color:=clGreen;
  end;
    IF aa[2] = '9' then
  begin
       LED9.Brush.Color:=clGreen;
    LED8.Brush.Color:=clGray;
    LED10.Brush.Color:=clGreen;
      LED11.Brush.Color:=clGreen;
        LED12.Brush.Color:=clGreen;
          LED13.Brush.Color:=clGray;
  end;
  end;

  If FloatSpinEdit2.Value < 10.2 then
  begin
                Canvas.Brush.Color:=clYellow;
                        Canvas.FillRect(400,212,532,242);
                        Canvas.TextOut(405,219,'Stromversorgung');
                        Canvas.Brush.Color:=clRED;

                        Canvas.FillRect(260,276,532,306);

                        Canvas.TextOut(356,284,'MN BUS A ');
  end
    else
  begin
                          Canvas.Brush.Color:=clWhite;

                        Canvas.FillRect(260,276,532,306);


                        Canvas.TextOut(356,284,' MN BUS A ');
                        canvas.brush.Color:=clGray;
                                                Canvas.FillRect(400,212,532,242);
                        Canvas.TextOut(405,219,'Stromversorgung');
  end;

end;


procedure TForm1.FormPaint(Sender: TObject);
var
ini:TIniFile;
begin
     Canvas.Rectangle(260,180,329+69,210);
                        //Canvas.Brush.Color:=clMaroon;
                        Canvas.Brush.Color:=clGray;
                        Canvas.FillRect(260,180,398,210);
                        Canvas.TextOut(265,187,'Temperatur tief');


            //                         Canvas.Brush.Color:=clRed;
                        Canvas.FillRect(400,180,532,210);
                        Canvas.TextOut(405,187,'Temperatur hoch');

            //            Canvas.Brush.Color:=clOlive;

                        Canvas.FillRect(260,212,398,242);
                        Canvas.TextOut(290,219,'Ventilator');
                        Canvas.FillRect(400,212,532,242);
                        Canvas.TextOut(405,219,'Stromversorgung');

           //             Canvas.Brush.Color:=clTeal;
                        Canvas.FillRect(260,244,398,274);
                        Canvas.TextOut(290,248,'Futter');
                        Canvas.Brush.Color:=clRed;
                        Canvas.FillRect(400,244,532,274);

                        Canvas.TextOut(405,254,'Verbindung');
                        Canvas.Brush.Color:=clWhite;

                        Canvas.FillRect(260,276,532,306);

                        Canvas.TextOut(356,284,' MN BUS A ');
                        Canvas.Brush.Color:=clGray;
                        
                        

end;

procedure TForm1.GroupBox3Click(Sender: TObject);
begin

end;

procedure TForm1.GroupBox4Click(Sender: TObject);
begin

end;

procedure TForm1.HELPClick(Sender: TObject);
begin

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Chart1.Clean;
       Chart1.DeleteSerie(d);
  Chart1.Paint;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin

Wetter.Show;
end;

procedure TForm1.CheckBox1Change(Sender: TObject);
var  ini:TIniFile;
 begin
ini:=TIniFile.Create('feuerfiech.ini');

ini.WriteBool('futter','fütterung_2_EN',CheckBox1.Checked);  //z2


ini.Free;
      if CheckBox1.Checked=true then
  begin
  SpinEdit3.Enabled:=true;
  SpinEdit4.Enabled:=true;
  end;


  if CheckBox1.Checked=false then
  begin
    SpinEdit3.Enabled:=false;
  SpinEdit4.Enabled:=false;
  end;
end;

procedure TForm1.CheckBox2Change(Sender: TObject);
var  ini:TIniFile;
 begin
ini:=TIniFile.Create('feuerfiech.ini');

ini.WriteBool('futter','fütterung_3_EN',CheckBox2.Checked);  //z3


ini.Free;
    if CheckBox2.Checked=true then
  begin
  SpinEdit7.Enabled:=true;
  SpinEdit8.Enabled:=true;
  end;


  if CheckBox2.Checked=false then
  begin
    SpinEdit7.Enabled:=false;
  SpinEdit8.Enabled:=false;
  end;
end;

procedure TForm1.CheckBox3Change(Sender: TObject);
var  ini:TIniFile;
 begin
ini:=TIniFile.Create('feuerfiech.ini');

ini.WriteBool('futter','fütterung_4_EN',CheckBox3.Checked);  //z4


ini.Free;
  if CheckBox3.Checked=true then
  begin
  SpinEdit9.Enabled:=true;
  SpinEdit10.Enabled:=true;
  end;


  if CheckBox3.Checked=false then
  begin
    SpinEdit9.Enabled:=false;
  SpinEdit10.Enabled:=false;
  end;
end;

procedure TForm1.CheckBox4Change(Sender: TObject);
begin
  Chart1.AllowZoom:=CheckBox4.Checked;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin

end;

procedure TForm1.ComboBox2Change(Sender: TObject);
var
typ:ansiString;
ini:TIniFile;
begin

  try
  typ:=ComboBox2.Items[ComboBox2.ItemIndex];
  ini:=TIniFile.Create('feuerfiech.ini');
ini.WriteString('diag','punkttyp',typ);
  except
  MessageDlg('Information','Bitte wählen sie ein Punkttyp aus',mtInformation,[mbOK],'');
  end;
  
  try
  if typ='Viereck' then      d.Pointer.Style := psRectangle;
    if typ='Kreis' then      d.Pointer.Style := psCircle;
      if typ='Kreuz' then      d.Pointer.Style := psCross;
        if typ='Diagonales Kreuz' then      d.Pointer.Style := psDiagCross;
          if typ='Sternchen' then      d.Pointer.Style := psStar;
          except
            MessageDlg('Information','Bitte klicken sie zuerst auf den Button "Verlauf laden"',mtInformation,[mbOK],'');

            end;

  
end;

procedure TForm1.FloatSpinEdit1Change(Sender: TObject);
begin
        StringGrid1.Cells[1,1]:=floattostr(FloatSpinEdit1.Value)+'°C';
         anaShowDisplay(FloatSpinEdit1.Value,PaintBox2,45,'°C',9);
        if FloatSpinEdit1.Value > 37.50 then begin
                                              Canvas.Brush.Color:=clRed;
                        Canvas.FillRect(400,180,532,210);
                        Canvas.TextOut(405,187,'Temperatur hoch')
                        end;
                        If FloatSpinEdit1.Value < 16.00 then begin
                                                  Canvas.Brush.Color:=clRed;
                        Canvas.FillRect(260,180,398,210);
                        Canvas.TextOut(265,187,'Temperatur tief');
                        end;
                        If FloatSpinEdit1.Value > 10 then
        begin
                                                          Canvas.Brush.Color:=clGray;
                        Canvas.FillRect(260,180,398,210);
                        Canvas.TextOut(265,187,'Temperatur tief');
                        end;
                        
                                               If FloatSpinEdit1.Value < 37.50 then
        begin
                                                          Canvas.Brush.Color:=clGray;
                     Canvas.FillRect(400,180,532,210);
                        Canvas.TextOut(405,187,'Temperatur hoch')
                        end;

end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);
begin

end;

procedure TForm1.FormCreate(Sender: TObject);
 var
 i:integer;
 a:boolean;
 ini:TIniFile;
 begin
ini:=TIniFile.Create('feuerfiech.ini');

SpinEdit3.Value:=ini.ReadInteger('futter','fütterung_2_HR',0);  //z2
SpinEdit4.Value:=ini.ReadInteger('futter','fütterung_2_MN',0);  //z2
SpinEdit5.Value:=ini.ReadInteger('futter','fütterung_1_HR',0); //z1
SpinEdit6.Value:=ini.ReadInteger('futter','fütterung_1_MN',0); //z1
SpinEdit7.Value:=ini.ReadInteger('futter','fütterung_3_HR',0);  //z3
SpinEdit8.Value:=ini.ReadInteger('futter','fütterung_3_MN',0);  //z3
SpinEdit9.Value:=ini.ReadInteger('futter','fütterung_4_HR',0); //z4
SpinEdit10.Value:=ini.ReadInteger('futter','fütterung_4_MN',0);//z4
CheckBox1.Checked:=ini.ReadBool('futter','fütterung_2_EN',false);//z2
CheckBox1Change(nil);

CheckBox2.Checked:=ini.ReadBool('futter','fütterung_3_EN',false);//z3
CheckBox2Change(nil);

CheckBox3.Checked:=ini.ReadBool('futter','fütterung_4_EN',false);//z4
CheckBox3Change(nil);

SpinEdit11.Value:= ini.ReadInteger('wetter','MondAuf_HR',20);
SpinEdit13.Value:=ini.ReadInteger('wetter','MondAuf_MN',15);
SpinEdit12.Value:=ini.ReadInteger('wetter','SonneAuf_HR',7);
SpinEdit14.Value:=ini.ReadInteger('wetter','SonneAuf_MN',50);



SpinEdit15.Value:=ini.ReadInteger('diag','DYS',30);
ComboBox2.SelText:=ini.ReadString('diag','punkttyp','Kreis');
ini.Free;


  Randomize;
                                      Canvas.Create;
  Sleep(1500);

    StringGrid1.Cells[0,1]:='Temperatur';
        StringGrid1.Cells[0,2]:='Lüfter';
            StringGrid1.Cells[0,3]:='Licht';
            chart1.Legend.Visible := true;
            conn:=false;
            Code:=0;
            CodeB:=1;
            i:=0;
            For i:=0 to 50 Do
            begin


         if FileExists('/dev/ttyUSB'+inttostr(i)+'') then Combo1.Items.Add('/dev/ttyUSB'+inttostr(i)+'');


            end;

            end;






procedure TForm1.FormShow(Sender: TObject);
var t:TStringList;
ini:TIniFile;
begin
                                    if FileExists('update.ini') then begin
                    ini := TIniFile.Create('update.ini');
  try
   if ini.ReadString('update','OldFile','') = ParamStr(0) then begin
   sleep(500);
    MessageDlg('Agrhh...','Es wurde ein Update gefunden.'+#13+'Bitte,starten sie die Datei unter "'+ParamStr(0)+'_neu"'+#13+'Sie benutzen die Alte Version.'+#13+'Sie sollten lieber die neue Version benutzen.',mtWarning,[mbOk],'');
   end;

  finally

    ini.free;
  end;

  end;
  
  with THTTPSend.Create do

    begin

      if HTTPMethod('GET','http://tiersendung.ti.funpic.de/tristan/territorium.txt') then

      try

        t:= TStringList.Create;

        t.LoadFromStream(Document);
        

If t.Strings[0] = '0.0.1' then
begin

StatusBar1.Panels[2].Text:='Version '+Version+' ist aktuell';
StatusBar1.Panels[2].Bevel:=pbLowered;
TrayIcon1.Visible:=false;
Timer2.Enabled:=FALSE;
end
else
begin
StatusBar1.Panels[2].Text:='Update zu Version '+t.Strings[0]+' gefunden!';
StatusBar1.Panels[2].Bevel:=pbRaised;
TrayIcon1.Visible:=true;
UpButton.Visible:=true;
Timer2.Enabled:=TRUE;
end;



       t.Free;

      except

        MessageDlg('Fehler','Es konnte keine Verbindung zum Internet hergestellt werden.',mtError,[mbOk],'');

      end;

    Free;
    end;
end;

procedure TForm1.MenuItem3Click(Sender: TObject);
begin
UpForm.Show;
end;

procedure TForm1.MenuItem4Click(Sender: TObject);
begin

end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin                     Canvas.Brush.Color:=clYellow;
                          Canvas.FillRect(400,212,532,242);
                        Canvas.TextOut(405,219,'Stromversorgung');
                                                Canvas.Brush.Color:=clRED;

                        Canvas.FillRect(260,276,532,306);

                        Canvas.TextOut(356,284,'MN BUS A ');
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
                          Canvas.Brush.Color:=clYellow;

                        Canvas.FillRect(260,212,398,242);
                        Canvas.TextOut(290,219,'Ventilator');
end;

procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
                                      Canvas.Brush.Color:=clRed;
                        Canvas.FillRect(400,180,532,210);
                        Canvas.TextOut(405,187,'Temperatur hoch')
end;

procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
                          Canvas.Brush.Color:=clRed;
                        Canvas.FillRect(260,180,398,210);
                        Canvas.TextOut(265,187,'Temperatur tief');
end;

procedure TForm1.CatClick(Sender: TObject);
begin
end;

procedure TForm1.SpinEdit10Change(Sender: TObject);
var  ini:TIniFile;
 begin
ini:=TIniFile.Create('feuerfiech.ini');

ini.WriteInteger('futter','fütterung_4_MN',SpinEdit10.Value);  //z4


ini.Free;

end;

procedure TForm1.SpinEdit11Change(Sender: TObject);
var
ini:TIniFile;
begin
ini:=TIniFile.Create('feuerfiech.ini');
ini.WriteInteger('wetter','MondAuf_HR',SpinEdit11.Value);
ini.Free;

end;

procedure TForm1.SpinEdit12Change(Sender: TObject);
var
ini:TIniFile;
begin
ini:=TIniFile.Create('feuerfiech.ini');
ini.WriteInteger('wetter','SonneAuf_HR',SpinEdit12.Value);
ini.Free;

end;

procedure TForm1.SpinEdit13Change(Sender: TObject);
var
ini:TIniFile;
begin
ini:=TIniFile.Create('feuerfiech.ini');
ini.WriteInteger('wetter','MondAuf_MN',SpinEdit13.Value);
ini.Free;
end;

procedure TForm1.SpinEdit14Change(Sender: TObject);
var
ini:TIniFile;
begin
ini:=TIniFile.Create('feuerfiech.ini');
ini.WriteInteger('wetter','SonneAuf_HR',SpinEdit14.Value);
ini.Free;

end;

procedure TForm1.SpinEdit15Change(Sender: TObject);
var
ini:TIniFile;
begin
ini:=TIniFile.Create('feuerfich.ini');
ini.WriteInteger('diag','DYS',SpinEdit15.Value);
ini.Free;
end;


procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
          StringGrid1.Cells[1,3]:=inttostr(SpinEdit1.Value)+'%';


end;

procedure TForm1.SpinEdit2Change(Sender: TObject);
begin                       StringGrid1.Cells[1,2]:=inttostr(SpinEdit2.Value)+'%';
end;

procedure TForm1.SpinEdit3Change(Sender: TObject);
var  ini:TIniFile;
 begin
ini:=TIniFile.Create('feuerfiech.ini');

ini.WriteInteger('futter','fütterung_2_HR',SpinEdit3.Value);  //z2


ini.Free;
end;

procedure TForm1.SpinEdit4Change(Sender: TObject);
var  ini:TIniFile;
 begin
ini:=TIniFile.Create('feuerfiech.ini');

ini.WriteInteger('futter','fütterung_2_MN',SpinEdit4.Value);  //z2


ini.Free;

end;

procedure TForm1.SpinEdit5Change(Sender: TObject);

  var  ini:TIniFile;
 begin
ini:=TIniFile.Create('feuerfiech.ini');

ini.WriteInteger('futter','fütterung_1_HR',SpinEdit5.Value);  //z1


ini.Free;
end;

procedure TForm1.SpinEdit6Change(Sender: TObject);
var  ini:TIniFile;
 begin
ini:=TIniFile.Create('feuerfiech.ini');

ini.WriteInteger('futter','fütterung_1_MN',SpinEdit6.Value);  //z1


ini.Free;

end;

procedure TForm1.SpinEdit7Change(Sender: TObject);
var  ini:TIniFile;
 begin
ini:=TIniFile.Create('feuerfiech.ini');

ini.WriteInteger('futter','fütterung_3_HR',SpinEdit7.Value);  //z3


ini.Free;

end;

procedure TForm1.SpinEdit8Change(Sender: TObject);
var  ini:TIniFile;
 begin
ini:=TIniFile.Create('feuerfiech.ini');

ini.WriteInteger('futter','fütterung_3_MN',SpinEdit8.Value);  //z3


ini.Free;

end;

procedure TForm1.SpinEdit9Change(Sender: TObject);
  var  ini:TIniFile;
 begin
ini:=TIniFile.Create('feuerfiech.ini');

ini.WriteInteger('futter','fütterung_4_HR',SpinEdit9.Value);  //z4


ini.Free;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if code=0 then
  begin
  Image1.Visible:=true;
  code:=1;
  end
  else
  begin
  code:=0;
  Image1.Visible:=false;
  end;
  Timer1.Interval:=300;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
   if codeB=0 then
  begin
StatusBar1.Panels[2].Bevel:=pbRaised;
  codeB:=1;
  {UpButton.Color:=clWhite;
UpButton.Font.Color:=clBlack;  }
  end
  else
  begin
  codeB:=0;
StatusBar1.Panels[2].Bevel:=pbLowered;
{UpButton.Color:=clBlack;
UpButton.Font.Color:=clWhite; }
  end;
  Timer2.Interval:=400;
end;



initialization
  {$I unit1.lrs}

end.

