WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Funktionshandle für BLE-Sensor in Appdesigner

 

M_a-r_k-u_s
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 24.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2020, 18:50     Titel: Funktionshandle für BLE-Sensor in Appdesigner
  Antworten mit Zitat      
Ich versuche gerade meine erste GUI mit Appdesigner zu erstellen. Ich habe einen Polar Brustgurt (BLE), den ich auslese. Ein funktionsfähiges (plain)Matlab-Minimalbeispiel steht unten.

Der Versuch die Funktionalität in den Appdesigner zu importieren scheitert leider, vielleicht auch weil ich mit objektorientierter Programmierung bisher nichts gemacht habe. Der Gurt wird nach dem Scan erkannt und ich kann mich auch verbinden; bei anstehenden Daten müsste das spezifizierte Funktionshandle aufgerufen werden und die Lampe auf grün setzen. Das passiert aber nicht. Vielleicht kann mir jemand helfen.

Hier nochmal das funktionsfähige Minimalbeispiel in Matlab:
Code:
clear all
clc

%% Verbindung aufbauen

h10 = ble("EE3CC81051AD"); % verbinden auf Polar H10 Brustgurt
hr_char = characteristic(h10,"Heart Rate","Heart Rate Measurement");

%%
hr_char.DataAvailableFcn = @displayCharacteristicData;

%%

function displayCharacteristicData(src,~)
    [data,timestamp] = read(src,'oldest');
    disp(data);
    disp(timestamp);
end


Hier noch der betreffende Teil aus dem Appdesigner (Datei anhängen ist irgendwie nicht erlaubt):
Code:
methods (Access = private)
       
        function displayCharacteristicData(app)
            app.Lamp.Color = 'green';
            % Lampe wird nicht grün
            [data,timestamp] = read(src,'oldest');
        end
               
    end
   

    % Callbacks that handle component events
    methods (Access = private)

        % Button pushed function: ScanButton
        function ScanButtonPushed(app, event)
            devicelist = blelist("Timeout", 5);
            i = 1;
            while(i <= length(devicelist.Index))
                app.HRSensorListDropDown.Items{i} = devicelist.Name{i};
                i = i + 1;
            end
        end

        % Button pushed function: ConnectButton
        function ConnectButtonPushed(app, event)
            model = app.HRSensorListDropDown.Value;
            chestbelt = ble(model); % verbinden auf Polar H10 Brustgurt
            hr_char = characteristic(chestbelt,"Heart Rate","Heart Rate Measurement");
            hr_char.DataAvailableFcn = @displayCharacteristicData;
            %% Bis hier läuft es, die Lampe würde grün, wenn folgende Zeile nicht auskommentiert wäre
            % app.Lamp.Color = 'green';
        end
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.05.2020, 21:48     Titel:
  Antworten mit Zitat      
Hallo,

was ist denn nun das Problem? Dass die Lampe nicht grün wird?
Wenn Dateien nicht angehängt werden können, dann zippen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
M_a-r_k-u_s
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 24.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2020, 21:03     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
was ist denn nun das Problem? Dass die Lampe nicht grün wird?

Jein. Die Lampe wird nicht grün, die ist aber nur für Debuggingzwecke gedacht. Problem ist, dass die Funktion @displayCharacteristicData offensichtlich nicht ausgeführt wird.

Ich habe den Code als Minimalbeispiel mal angehängt. Einmal mit Plain-Matlab, da funktioniert der Code. Übertragen auf Appdesigner funktioniert es nicht. Die "Debug"-Lampe im Appdesigner wird zwar blau, aber dann nicht grün.

Also ich verstehe nicht, wieso die Funktion @displayCharacteristicDataim Appdesigner nicht aufgerufen wird.

Edit: Bei der Datei minimalbeispiel.m muss man die Endung auf .mlapp ändern. minimalbsp.m ist ein normales Matlabscript. Ich konnte keine 7zip und *.mlapp hier hochladen, daher der Workaround.

minimalbeispiel.m
 Beschreibung:

Download
 Dateiname:  minimalbeispiel.m
 Dateigröße:  15.08 KB
 Heruntergeladen:  266 mal
minimalbsp.m
 Beschreibung:

Download
 Dateiname:  minimalbsp.m
 Dateigröße:  434 Bytes
 Heruntergeladen:  247 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.05.2020, 22:54     Titel:
  Antworten mit Zitat      
Hallo,

[quote]Die Lampe wird nicht grün, die ist aber nur für Debuggingzwecke gedacht./quote]
Für Debugging-Zwecke würde ich den Debugger verwenden.

Führst du das Skript Section für Section aus? Dann hast du ja eine gewisse Verzögerung zwischen Erstellung des Objekts und Setzen der DataAvailableFcn. Das kann ein Unterschied sein.
Ein anderer Grund kann sein, dass hr_char eine lokale Variable ist, die nach Beenden der Funktion verloren geht. Leg mal ein Property in der App an und speichere das darin ab, also z.B.
Code:
app.hr_char = ...


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
M_a-r_k-u_s
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 24.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2020, 17:45     Titel:
  Antworten mit Zitat      
Ich hatte noch ein m-File mit dem Namen displayCharacteristicData im Ordner liegen. Dieses wurde dann ausgeführt. Nachdem ich das nun umbenannt habe bekomme ich die Meldung: "Function displayCharacteristicData does not exist." Kann ich mir gerade nicht erklären, weil die Funktion wurde ja im Appdesigner definiert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.05.2020, 18:22     Titel:
  Antworten mit Zitat      
Hallo,

beim Aufruf einer Methode musst die App mit übergeben. Vermutlich etwa so:
Code:
hr_char.DataAvailableFcn = @(src, ~) displayCharacteristicData(app, src);


und dann die Deklaration passend:
Code:
function displayCharacteristicData(app, src)


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
M_a-r_k-u_s
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 24.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2020, 22:09     Titel:
  Antworten mit Zitat      
Danke, so funkioniert es.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.