Jump to content

Mit Masterbrick 3x Colorbricklets parallel messen (Delphi) ?


mischir
 Share

Recommended Posts

Hallo,

ich möchte an einem Masterbrick 3 Colorbricklets betreiben und alle parallel auslesen.

In Delphi habe ich bereits ein kleines Programm geschrieben, mit dem ich ein Colorbricklet aus lesen kann (callback).

 

Wie muss man vorgehen, um 3 Colorbricklets gleichzeitig auszulesen?

 

Danke und Grüße, Mike

Link to comment
Share on other sites

Eigentlich völlig analog, nur dass Du statt 1 Objekt des Colorbricklets drei hast mit unterschiedlichen IDs. Auf die IDs musst Du achten um ggf. auch die richtige Funktionalität des jeweiligen Bricklet zuzuordnen.

 

Jetzt kannst Du wie bei einem Bricklet auch entweder zyklisch auslesen oder Callbacks für jedes Bricklet setzen.

 

Der User-Parameter des Callbacks kann z.B. dazu verwendet werden, um die Bricklet-Nummer anzugeben oder einen Pointer auf ein eigens Objekt welches am Ende des Farbwert hält.

Link to comment
Share on other sites

Vielen Dank, ich habe es geschafft und es funktioniert stabil.

Ich dachte, man müsste mit Threads arbeiten, die synchronisiert werden, damit es nicht bei der Abfrage der einzelnen Sensoren kracht.

 

Procedure Tform1.OpenMasterBrick;
begin
{ Create IP connection }
  ipcon := TIPConnection.Create;

  { Create device object }
  c1 := TBrickletColor.Create(UID1, ipcon);
  c2 := TBrickletColor.Create(UID2, ipcon);
  c3 := TBrickletColor.Create(UID3, ipcon);


  { Connect to brickd }
  ipcon.Connect(HOST, PORT);
  { Don't use device before ipcon is connected }

  { Register color callback to procedure ColorCB }
  c1.OnColor := {$ifdef FPC}@{$endif}ColorCB1;
  c2.OnColor := {$ifdef FPC}@{$endif}ColorCB2;
  c3.OnColor := {$ifdef FPC}@{$endif}ColorCB3;

    { Register enumerate callback to "EnumerateCB" }
  ipcon.OnEnumerate := {$ifdef FPC}@{$endif}EnumerateCB;
  ipcon.Enumerate;

  { Set period for color callback to 1s (1000ms)
    Note: The color callback is only called every second
          if the color has changed since the last call! }
  c1.SetColorCallbackPeriod(0);
  c2.SetColorCallbackPeriod(0);
  c3.SetColorCallbackPeriod(0);
  end;

 

Die drei Sensoren werden durch separate Callbacks abgerufen und den Start der Messung lege ich mit der SetColorCallBackPeriode > 0 fest.

 

Das ganze funktioniert gut und es gibt keine Abstürze über Stunden :D

 

 

 

 

Link to comment
Share on other sites

  • 6 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...