Sitemap
Hinweis
GPS
Experimente mit ELEXS und Palmtop
Die Faszination alter programmierbarer Taschenrechnern
Die Entwicklungsgeschichte der programmierbaren Taschenrechner
Vorstellung: Privileg PR 56 D-NC
Vorstellung: Casio FX-602P
Über Spielautomaten und ihre Emulatoren
Age of Empires
Über den Zufall

Zurück zu:
Artikel
Experimente mit ELEXS und Palmtop
Weiter auf dieser Ebene:
Voltmeter
Tacho

1
Code
Experimente mit ELEXS und Palmtop

VDiagram

Die 'Krönung' meiner RS232-Entwicklungen. Hiermit ist es nun tatsächlich möglich einen Spannungsverlauf aufzuzeichnen. Das Programm versteht 3 Kommandozeilenparameter:

Der erste gibt die Aufzeichnungsdauer an. Die Einheit ist Stunden. Der zweite gibt die Anzahl der darzustellenden Abschnitte an und der dritte, nach wie vielen Abschnitten ein dicker Strich gezeichnet werden soll.

Weniger als 10 Minuten sollte man nicht wählen, da sonst der Palmtop zu langsam ist.

Beispiele:

10 Minuten aufzeichnen: vdiagram 0.167 60 10

1 Stunde aufzeichnen: vdiagram 1 60 10

3 Tage aufzeichnen: vdiagram 72 72 24

1 Jahr aufzeichnen: vdiagram 8760 52 4

Code

program VDiagram;

uses RS232, Graph, Dos, CRT;

var

  LeftBorder     : Integer;
  BottomBorder   : Integer;
  GrRangeWidth   : Integer;
  GrRangeHeight  : Integer;
  DMultiplicator : Real;

  Raster         : Integer;
  RasterPart     : Integer;
  TimeRange      : Real;

  Hour           : Word;
  Minute         : Word;
  Second         : Word;
  Sec100         : Word;

  TextStr        : String;
  GraficStr      : String;
  KeyChar        : Char;
  ErrorCode      : Integer;

procedure Diagramm;
var
  GraphDriver, Graphmode, i, j : Integer;
  DelaySeconds     : Real;
  CheckHour        : Word;
  CheckMinute      : Word;
  CheckSecond      : Word;
  CheckSec100      : Word;
  StartTimeSeconds : LongInt;
  CheckTimeSeconds : LongInt;
begin
  DelaySeconds := (TimeRange*3600)/GrRangeWidth;
  StartTimeSeconds := Hour*3600 + Minute*60 + Second;

  GraphDriver := Detect;
  InitGraph (GraphDriver, GraphMode, '');
  ClearDevice;
  SetLineStyle (1, 0, 1);
  Line (LeftBorder, 200 - BottomBorder - GrRangeHeight, LeftBorder + GrRangeWidth, 200 - BottomBorder - GrRangeHeight);
  Line (LeftBorder + GrRangeWidth, 200 - BottomBorder, LeftBorder + GrRangeWidth, 200 - BottomBorder - GrRangeHeight);
  SetLineStyle (0, 0, 3);
  Line (LeftBorder, 200 - BottomBorder, LeftBorder + GrRangeWidth, 200 - BottomBorder);
  Line (LeftBorder, 200 - BottomBorder, LeftBorder, 200 - BottomBorder - GrRangeHeight);
  SetLineStyle (1, 0, 1);
  for i := 1 to Raster - 1 do begin
    if i mod RasterPart = 0 then begin
      SetLineStyle (0, 0, 1);
    end else begin
      SetLineStyle (1, 0, 1);
    end;
    Line (LeftBorder + round (GrRangeWidth/Raster*i),
          200 - BottomBorder,
          LeftBorder + round (GrRangeWidth/Raster*i),
          200 - BottomBorder - GrRangeHeight);
  end;
  SetLineStyle (1, 0, 1);
  for i := 1 to 6 do begin
    Line (LeftBorder,
          200 - BottomBorder - round (GrRangeHeight/7*i),
          LeftBorder + GrRangeWidth,
          200 - BottomBorder - round (GrRangeHeight/7*i));
  end;
  SetTextJustify (1,2);
  for i := 1 to 7 do begin
    Str (i:1,TextStr);
    OutTextXY (LeftBorder - 12, 200 - BottomBorder - round (GrRangeHeight/7*i), TextStr + 'V');
  end;

  Str (Hour, TextStr);
  if length (TextStr) < 2 then TextStr := '0' + TextStr;
  GraficStr := 'Startzeit: ' + TextStr;
  Str (Minute, TextStr);
  if length (TextStr) < 2 then TextStr := '0' + TextStr;
  GraficStr := GraficStr + ':' + TextStr;
  Str (Second, TextStr);
  if length (TextStr) < 2 then TextStr := '0' + TextStr;
  GraficStr := GraficStr + ':' + TextStr;
  Str (TimeRange:5:2, TextStr);
  GraficStr := GraficStr + ', Bereich: ' + TextStr + ' h';

  SetTextJustify (1,2);
  OutTextXY (170, 187, GraficStr);

  SetLineStyle (0, 0, 1);
  moveto (LeftBorder, 200 - BottomBorder - round (Steps*DMultiplicator));

  i := 1;
  repeat begin
    Lineto (LeftBorder + i, 200 - BottomBorder - round (Steps*DMultiplicator));
    inc (i);
    repeat begin
      GetTime (CheckHour, CheckMinute, CheckSecond, CheckSec100);
      CheckTimeSeconds := CheckHour*3600 + CheckMinute*60 + CheckSecond;
    end; until (CheckTimeSeconds >= (StartTimeSeconds + i*DelaySeconds)) or KeyPressed;
  end; until (i = GrRangeWidth) or KeyPressed;

  repeat until KeyPressed;
  if KeyPressed then KeyChar := ReadKey;
  CloseGraph;
end;

begin
  LeftBorder     :=  20; (*  20 *)
  BottomBorder   :=  20; (*  20 *)
  GrRangeWidth   := 619; (* 619 *)
  GrRangeHeight  := 180; (* 180 *)

  DMultiplicator := GrRangeHeight/Cnts;

  Val (paramstr (1), TimeRange, ErrorCode);
  Val (paramstr (2), Raster, ErrorCode);
  if Raster = 0 then Raster := 20;
  Val (paramstr (3), RasterPart, ErrorCode);
  if RasterPart = 0 then RasterPart := 5;

  GetTime (Hour, Minute, Second, Sec100);

  ClrScr;
  Diagramm;
end.

Diese Seite wurde mit BrainStorm generiert 
Copyright © 1991 - 2013 by Thomas Ell