Jump to content

Mit Masterbrick 3x Colorbricklets parallel messen (Delphi) ?


Recommended Posts

Geschrieben

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

Geschrieben

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.

Geschrieben

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

 

 

 

 

  • 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.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...