Code covered by the BSD License  

Highlights from
Shimmer MATLAB Instrument Driver

image thumbnail

Shimmer MATLAB Instrument Driver



04 May 2012 (Updated )

Object oriented solution for Shimmer sensor data capture directly into Matlab

plotandwriteexamplelegacy(comPort, captureDuration, fileName)
function void = plotandwriteexamplelegacy(comPort, captureDuration, fileName)

%PLOTANDWRITEXAMPLE - Demonstrate legacy features of ShimmerHandleClass
%  accelerometer signals from the Shimmer paired with COMPORT. The function 
%  will stream data for a fixed duration of time defined by the constant 
%  CAPTUREDURATION. The function also writes the data in a tab ddelimited 
%  format to the file defined in FILENAME.
%  NOTE: This example uses the method 'getuncalibrateddata' which is a 
%  legacy method from the beta release. The user is advised to use the 
%  replacement method 'getdata' as an alternative (see plotandwriteexample.m).     
%  SYNOPSIS: plotandwriteexamplelegacy(comPort, captureDuration, fileName)
%  INPUT: comPort - String value defining the COM port number for Shimmer
%  INPUT: captureDuration - Numerical value defining the period of time 
%                           (in seconds) for which the function will stream 
%                           data from  the Shimmers.
%  INPUT : fileName - String value defining the name of the file that data 
%                     is written to in a comma delimited format.
%  OUTPUT: none
%  EXAMPLE: plotandwriteexamplelegacy('7', 30, 'testdata.dat')
%  See also plotandwriteexample twoshimmerexamplelegacy twoshimmerexample ShimmerHandleClass 

close all                                                                  % close all previous figures

% Note: these constants are only relevant to this examplescript and are not used
% by the ShimmerHandle Class
NO_SAMPLES_IN_PLOT = 500;                                                  % Number of samples that will be displayed in the plot at any one time
DELAY_PERIOD = 0.2;                                                        % A delay period of time in seconds between data read operations


shimmer = ShimmerHandleClass(comPort);                                     % Define shimmer as a ShimmerHandle Class instance with comPort1

if (shimmer.connect)                                                       % TRUE if the shimmer connects
    % Define settings for shimmer
    shimmer.setsamplingrate(51.2);                                         % Set the shimmer sampling rate to 51.2Hz
    shimmer.setinternalboard('None');                                      % Set the shimmer internal daughter board to 'None'
    shimmer.setenabledsensors('Accel',1);                                  % Enable the shimmer 1 accelerometer
    shimmer.setaccelrange(0);                                              % Set the accelerometer range to 0 (+/- 1.5g)
    iAccelXShimmer = shimmer.getsignalindex('Accelerometer X');            % Determine the column index of the Accelerometer X-axis signal 
    iAccelYShimmer = shimmer.getsignalindex('Accelerometer Y');            % Determine the column index of the Accelerometer Y-axis signal 
    iAccelZShimmer = shimmer.getsignalindex('Accelerometer Z');            % Determine the column index of the Accelerometer Z-axis signal  
    signalNameArray = shimmer.getenabledsignalnames;                       % Get the list of enabled signals 
    signalNamesString = char(signalNameArray(1,1));                                           % Create a single string, signalNamesString
    for i= 2:length(signalNameArray)                                                          % which lists the names of the enabled 
        tabbedNextSignalName = [char(9), char(signalNameArray(1,i))];                         % Add tab delimiter before signal name
        signalNamesString = strcat(signalNamesString,tabbedNextSignalName);                   % Concatenate signal names delimited by a tab.

    dlmwrite(fileName, signalNamesString, '%s');                           % Write the signalNamesString as the first row of the file
    if (shimmer.start)                                                     % TRUE if the shimmer starts streaming
        plotDataBuffer = [];                                               
        newData = [];
        h.figure1=figure('Name','Shimmer 1');                              % Create a handle to figure for plotting data from shimmer
        elapsedTime = 0;                                                   % Reset to 0    
        tic;                                                               % Start timer
        while (elapsedTime < captureDuration)            
            pause(DELAY_PERIOD);                                           % Pause for this period of time on each iteration to allow data to arrive in the buffer
            newData = shimmer.getuncalibrateddata;                         % Read the latest uncalibrated data from shimmer data buffer
                                                                           % NOTE: The method 'getuncalibrateddata' is a legacy method from the beta release. 
                                                                           %       The user is advised to use the replacement method 'getdata' as an alternative.
                                                                           %       (see plotandwriteexample).    
            if ~isempty(newData)                                           % TRUE if new data has arrived
                dlmwrite(fileName, newData, '-append', 'delimiter', '\t'); % Append the new data to the file in a tab delimited format
                plotDataBuffer = [plotDataBuffer; newData];                % Update the plotDataBuffer with the new data

                if(length(plotDataBuffer) > NO_SAMPLES_IN_PLOT)                 
                   plotDataBuffer = plotDataBuffer((length(plotDataBuffer) - NO_SAMPLES_IN_PLOT):end, :);   % Trim excess previous data from array for plotting purposes

                accelDataShimmer = [plotDataBuffer(:,iAccelXShimmer), plotDataBuffer(:,iAccelYShimmer), plotDataBuffer(:,iAccelZShimmer)]; % Extract only the columns of accelerometer data

                plot(accelDataShimmer);                                    % Plot the accelerometer data
                title('Shimmer 1 Accelerometer Data');                     % Add title to the plot
                axis([0 NO_SAMPLES_IN_PLOT 0 4095]);                       % Define min and max values for axis
                legend('Accel X','Accel Y','Accel Z')                      % Add legend to plot
            elapsedTime = elapsedTime + toc;                               % Stop timer and add to elapsed time
            tic;                                                           % Start timer           
        elapsedTime = elapsedTime + toc;                                   % Stop timer
        shimmer.stop;                                                      % Stop data streaming                                                    
    shimmer.disconnect;                                                    % Disconnect from shimmer

clear all;                                                                 % Remove all variables from memory

Contact us