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).

 採用された回答

Walter Roberson
Walter Roberson 2018 年 9 月 25 日

1 投票

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 件のコメント

Natalio Ramirez
Natalio Ramirez 2018 年 9 月 25 日
Then the values assigned to variable freq have nothing to do with the error?
Walter Roberson
Walter Roberson 2018 年 9 月 25 日
編集済み: Walter Roberson 2018 年 9 月 25 日
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', ' '};

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeMATLAB Support Package for Arduino Hardware についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by