Im trying to make may arduino play a sequence of notes using a buzzer.
code:
%arduino music
pin = 'D5';
tune = 'eefggfedccdee dd';
beats = [1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 3];
notes = ['c', 'd', 'e', 'f', 'g', ' '];
freq = [262 294 330 349 392 0];
for ii = 1:length(tune)
playTone(arduino,pin,freq(strcmp(tune(ii),notes)),0.1*beats(ii))
pause(0.1*beats(ii))
end
output:
>> musicArduino
Error using musicArduino (line 12)
Invalid parameter type. The tone frequency
value must be a scalar double between 0 and
32767 (Hz).

 Accepted Answer

Walter Roberson
Walter Roberson on 25 Sep 2018

1 vote

You strcmp a single character from the tune to the 6 character vector formed by notes. The result will be a scalar false leading to empty freq selection.
Easiest fix is to make notes a cell array instead of a character vector. Remember that ['a', 'b'] means horzcat('a', 'b') which is 'ab'

2 Comments

Then the values assigned to variable freq have nothing to do with the error?
The values assigned to freq had nothing to do with the error. The problem was that you were ending up passing [] in the frequency location, and [] is not a scalar double .
Change
notes = ['c', 'd', 'e', 'f', 'g', ' '];
to
notes = {'c', 'd', 'e', 'f', 'g', ' '};

Sign in to comment.

More Answers (0)

Categories

Find more on MATLAB Support Package for Arduino Hardware in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!