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 Exchange에서 MATLAB 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