Search code examples
matlabloopstimearduinosampling

Setting sampling rate in MATLAB for Arduino


I'm having trouble getting consistent results with the code I am using. I want to run my Arduino for a specific amount of time (say 20 seconds) and collect data from the analog pin with a specific sampling rate (say four samples a second). The code is as follows.

a_pin = 0;
tic;
i = 0;

while toc < 20
    i = i + 1;
    time(i) = toc;
    v(i) = a.analogRead(a_pin);
    pause(.25);
end

Is there a way to set the loop to run a specific time and then in the loop sample at a different rate?


Solution

  • You can try this:

    a_pin = 0;
    
    fs = 4;   % sampling frequency (samplings per second)
    mt = 20;  % time for measurements
    
    ind = 1;
    nind = 1;
    last_beep = 0;
    tic;
    while toc < mt
    
        time(ind) = toc;
        v(ind) = a.analogRead(a_pin);
    
        % wait for appropriate time for next measurement
        while( nind == ind )
            nind = floor(toc*fs) + 1;
        end
        ind = nind;
    
        % beep every second
        if (ceil(toc) > last_beep)
            beep(); % don't know if this one exist, check docs
            last_beep = ceil(toc);
        end
    end