Verbindung besteht im Workspace soll aber bei erneutem Start gelöscht werden

2 次查看(过去 30 天)
% Versuche, die vorhandene Verbindung zu trennen
try
% Überprüfe, ob eine Verbindung besteht
if isConnected(b)
% Trenne die Verbindung
disconnect(b);
end
catch
% Fehlerbehandlung, wenn keine Verbindung besteht oder es Probleme beim Trennen gibt
end
% Verbinde mit dem BLE Gerät
b = ble("MLT-BT05");
Scanning and connecting to Bluetooth Low Energy peripheral devices are not supported on Linux.
% Wähle die Charakteristik
Temp = characteristic(b, "FFE0", "FFE1");
subscribe(Temp)
% Timer zum periodischen Aufruf der Funktion
t = timer;
t.Period = 1; % Intervallzeit in Sekunden
t.ExecutionMode = 'fixedRate'; % Timer läuft in festem Intervall
t.TimerFcn = @updateTemperature; % Funktionsaufruf
% Starten des Timers
start(t)
% Funktion zum Lesen und Aktualisieren der Temperatur
function updateTemperature(~, ~)
% Lese die Daten
DataTemp = read(Temp);
% Konvertiere die Daten in eine Zahl
WertTemp = native2unicode(DataTemp);
% Setze den Wert im EditField
app.TemperaturEditField.Value = WertTemp;
end
% Überprüfe, ob eine Verbindung besteht
if isConnected(b)
% Verbindung besteht, ändere die Hintergrundfarbe der Lampe auf Orange
app.Lampe.BackgroundColor = [1, 0.5, 0]; % Orange: RGB = (1, 0.5, 0)
else
% Keine Verbindung, ändere die Hintergrundfarbe der Lampe auf Grau
app.Lampe.BackgroundColor = [0.7, 0.7, 0.7]; % Grau: RGB = (0.7, 0.7, 0.7)
end
% Stoppen und Löschen des Timers bei Bedarf
% stop(t)
% delete(t)
Bei diesem Code kommt immer wieder der selbe Fehler dass die Verbindung zum MLT-BT05 einem Bluetooth low Energy Dongel schon besteht. Jedoch steckt man den Arduino einmal aus und wieder ein, dass er nicht mehr verbunden ist bleibt, besteht laut Appdesigner die Verbindung noch, obwohl der Dongel über eine LED anzeigt dass es nicht verbunden ist.
Meine Versuche waren clear workspace wenn der Button Connect gedrückt wird. Und ChatGPT konnte mir auch nicht helfen. Habt ihr noch eine Lösung?
Grüße Eric

回答(1 个)

Harald
Harald 2024-6-5
Hallo Eric,
ein Problem könnte darin bestehen, dass verschiedene Callbacks ausgeführt werden oder ein Callback mehrfach, und dass dadurch die Variable, die die Verbindung enthält, verloren geht. Zwei Ideen:
a) Direkt nach dem Erstellen von b ein Befehl wie
c = onCleanup(@() disconnect(b))
Dadurch würde sicher gestellt, dass die Verbindung getrennt wird, wenn die Variable b nicht mehr existiert.
b) Ein Property in der App anlegen, das die Verbindung speichert.
app.conn = ble("MLT-BT05");
und dann immer mit app.conn weiterarbeiten. So kannst du über verschiedene Workspaces hinweg mit der Verbindung arbeiten. Mehr dazu hier: https://de.mathworks.com/help/matlab/creating_guis/share-data-across-callbacks-in-app-designer.html
Ich hoffe, eines von beiden hilft dir weiter.
Viele Grüße,
Harald
  2 个评论
Eric
Eric 2024-6-6
Hallo Harald,
Erstmal vielen Dank für deine Antwort.
Diese Lösung b) hatte ich probiert jedoch klappt diese auch nicht.
Und Lösung a klappt nicht.
Das ist der Fehler der mir beim Versuch des Verbindungsaufbau angezeigt wird. Das blöde ist, dass Matlab sagt dass die Verbindung schon besteht aber der Bluetooth Dongel immer noch blickt (=Keine Verbindung).
Error using ble (line 105)
Connection to this device already exists in the workspace.
Wenn ich dann auf Line 105 klicke verweist er mich auf den Code aus der Toolbox (ble.m).
Wenn ich dann auf die Zeile 105 gehe, steht das da:
% Check if object already exists for the same device
if isKey(obj.PeripheralsMap, deviceInfo.Address)
matlabshared.blelib.internal.localizedError('MATLAB:ble:ble:connectionExists');
end
Dieser Block aus der Toolbox checkt also, ob eine Verbindung schon bestanden hat und gibt dann ein Error aus.
Wie kann man das Problem lösen?
Toolbox Code bearbeiten?
Wenn es dir nichts ausmacht können wir auch Telefonnummer austauschen, dass wir einfacher eine Lösung finden und ich dir es genauer erklären kann.
Mit freundlichen Grüßen
Eric
Harald
Harald 2024-6-6
Hallo Eric,
ich kenne mich mit BLE nicht wirklich aus und dachte lediglich, ich könnte trotzdem helfen, weil es möglicherweise ein Problem der Nutzung über App Designer ist. Mich irritiert z.B., dass du in deinem geposteten Code erst überprüfst, ob b eine Verbindung ist, und dann b erstellt. Wo soll aber das b herkommen? Wenn es b nicht gibt, wird das immer eine Fehlermeldung geben und MATLAB springt in den catch-Teil.
Besteht das Problem unabhängig von App Designer? Du kannst das ja mal in einem kleinen Skript probieren. Wenn es unabhängig von App Designer ist, dann kann ich leider wohl nicht helfen.
Falls sich hier niemand mehr dazu meldet, würde ich eine Kontaktaufnahme mit dem Technischen Support empfehlen: https://www.mathworks.com/support/contact_us.html
Viele Grüße,
Harald

请先登录,再进行评论。

产品


版本

R2024a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!