mischir Posted February 16, 2018 at 01:21 PM Share Posted February 16, 2018 at 01:21 PM 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 Quote Link to comment Share on other sites More sharing options...
remotecontrol Posted February 17, 2018 at 08:44 AM Share Posted February 17, 2018 at 08:44 AM 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. Quote Link to comment Share on other sites More sharing options...
mischir Posted February 18, 2018 at 07:30 AM Author Share Posted February 18, 2018 at 07:30 AM 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 Quote Link to comment Share on other sites More sharing options...
Samsonhus Posted August 20, 2018 at 09:45 AM Share Posted August 20, 2018 at 09:45 AM I find the right thing, it is very useful indeed. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.