Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi LMDLights ansteuern mit Binär Werte (https://www.delphipraxis.net/67276-lmdlights-ansteuern-mit-binaer-werte.html)

renekr 12. Apr 2006 09:56


LMDLights ansteuern mit Binär Werte
 
Hallo,
Bin grad a bisschen Ratlos.

Habe 8 LEDs auf meiner Form.

Ich bekomme einen Binär Wert zb 255 dann sollen alle LEDs an sein.8 LED 1 - LED 8 )

Bei 128 dann nur die 7. LED an usw.

Wie ist das realiesierbar?


Danke.

Robert Marquardt 12. Apr 2006 10:02

Re: LMDLights ansteuern mit Binär Werte
 
Die JCL http://jcl.sf.net haelt dafuer die schoene Funktion BitsToBooleans in JclLogic.pas vor.

Delphi-Quellcode:
var
  I: Integer;
  Bools: TBooleanArray;
  B: Byte;
begin
  B := 255; // Beispiel
  BitsToBooleans(B, Bools, True); // True bewirkt das alle 8 Bits in Bools eingetragen werden
  for I := Low(Bools) to High(Bools) do
    // nun Bools[I] benutzen

Ratte 12. Apr 2006 11:08

Re: LMDLights ansteuern mit Binär Werte
 
Es geht auch so:
Delphi-Quellcode:
var
   b,h,i:byte;
   bools:array[1..8] of boolean;
begin
   b:=255; //Wert der ausgewertet wird
   h:=1;
   for i:=1 to 8 do
   begin
      bools[i]:=false;
      IF (h and b) >0 THEN bools[i]:=true;
      h:= (h*2) mod 255;  //sonst würde es bei 8 b:=256 heißen --> Überlauf
   end;
//LEDs an/aus
end;
mfg,
Ratte

//Edit: kleine optimierung

TeronG 12. Apr 2006 11:43

Re: LMDLights ansteuern mit Binär Werte
 
hmm .. das Thema hatten wir doch schonmal .. (muss ich wissen war von mir ^^)
Hier

z.B. so:
Delphi-Quellcode:
type TBitArray = array[0..15] of boolean;

...

function WordToBit(eingang:Word): TBitArray;
var
  m,i : integer;
begin
  for i := 15 downto 0 do begin
    m:= 1 shl i;
    if eingang >= m then begin
      result[i] := true;
      eingang := eingang-m;
    end else result[i] := false;
  end
end;

renekr 12. Apr 2006 14:33

Re: LMDLights ansteuern mit Binär Werte
 
Hi,
danke für die vielen Lösungen.

Werde ich mal durchtesten welche am besten ist.

Habe mittlerweile auch was hinbekommen.

Habe ein Array of TLMDLights gemacht mit 8 LmdLights und dann eine Function
Delphi-Quellcode:
function DezInBinVorkomma(n: integer):string;
begin
  result:='';
    repeat
    if n mod 2 =0 then result:='0'+result else result:='1'+result;
    n:=n div 2;
  until n=0;
end;
Diese habe ich nochmals umgeschrieben damit ich immer 8 Bits rausbekomme.

Delphi-Quellcode:
function DezInBinVorkomma(n: integer):string;
var
i:integer;
binkorr:string;
begin
  result:='';
    repeat
    if n mod 2 =0 then result:='0'+result else result:='1'+result;
    n:=n div 2;
  until n=0;

  if length(result) < 8 then
   begin
     for i:=1 to 8-length(result)do
      begin
        binkorr:=binkorr+'0'
      end;
  end;
result:=binkorr+result;
Ist zwar nur schnell entstanden aber geht.

Danke

Hawkeye219 12. Apr 2006 15:10

Re: LMDLights ansteuern mit Binär Werte
 
@Ratte:
Ein beliebter Fehler: statt "mod 255" muß es "mod 256" heißen :warn:

@renekr:
Hier noch eine kürzere Variante Deiner letzten Version (ohne DIV, MOD und Stringverkettung):

Delphi-Quellcode:
function ByteToBinStr (aValue: Byte): string;
  var ii : Integer;
begin
  // Ergebnis initialisieren
  Result := '00000000';
  // 8 Bits testen
  for ii := 0 to 7 do
    // Bit Nummer i prüfen
    if Odd(aValue shr ii) then
      // Falls Bit gesetzt ist, Ergebnis anpassen
      Inc (Result[8 - ii]);
end;
Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz