mischir Geschrieben February 16, 2018 at 13:21 Geschrieben February 16, 2018 at 13:21 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 Zitieren
remotecontrol Geschrieben February 17, 2018 at 08:44 Geschrieben February 17, 2018 at 08:44 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. Zitieren
mischir Geschrieben February 18, 2018 at 07:30 Autor Geschrieben February 18, 2018 at 07:30 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 Zitieren
Samsonhus Geschrieben August 20, 2018 at 09:45 Geschrieben August 20, 2018 at 09:45 I find the right thing, it is very useful indeed. Zitieren
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.