Verbindung besteht im Workspace soll aber bei erneutem Start gelöscht werden
2 views (last 30 days)
Show older comments
% 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");
% 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
0 Comments
Answers (1)
Harald
on 5 Jun 2024
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 Comments
Harald
on 6 Jun 2024
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
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!