【求助】关于tone语法-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6493|回复: 6

[已解决] 【求助】关于tone语法

[复制链接]
发表于 2016-7-10 16:26 | 显示全部楼层 |阅读模式
语法  tone(pin, frequency)   tone(pin, frequency, duration) 参数
pin:要产生声音的引脚   
frequency: 产生声音的频率,单位Hz,类型unsigned int  
duration:声音持续的时间,单位毫秒(可选),类型unsigned long



理论上来说两条语句都可以用,但是我的这个UNO R3上第二条语句就不能使用duration,没有作用,只能用第一条后面加deplay,这是个人情况吗,还是??什么原因??


附加例程代码
[mw_shl_code=applescript,true]/***   Included libraries  ***/

/***   Global variables and function definition  ***/
int RoBuzzer_0 = 7;

/***   Setup  ***/
void setup() {
    pinMode(RoBuzzer_0, OUTPUT);
    Serial.begin(9600);
}

/***   Loop  ***/
void loop() {
    tone(RoBuzzer_0, 261, 2000);
    delay(400);

    noTone(RoBuzzer_0);
    delay(20000);
}[/mw_shl_code]
 楼主| 发表于 2016-7-10 16:46 | 显示全部楼层
搞懂了,,,这个tone不会等持续时间结束后再去执行下一条句子,
发表于 2018-1-18 08:37 | 显示全部楼层
一个程序里面只能用一次tone吗?我用tone发送频率控制伺服电机,两个轴只有一个轴能动,如果把能动的那段程序删掉,另外一个轴也可以动,两个一起就只能动一个。
 楼主| 发表于 2018-2-2 15:36 | 显示全部楼层
红海盗qs 发表于 2018-1-18 08:37
一个程序里面只能用一次tone吗?我用tone发送频率控制伺服电机,两个轴只有一个轴能动,如果把能动的那段程 ...

我的是蜂鸣器
发表于 2021-8-27 10:09 | 显示全部楼层
陈小皮 发表于 2016-7-10 16:46
搞懂了,,,这个tone不会等持续时间结束后再去执行下一条句子,

楼主你好,请问“tone不会等持续时间结束后再去执行下一条句子”,是什么意思,还是没能整明白。
tone(pin, frequency, duration)
就像你说的那样,第三个参数根本不起效果,不管这个参数设多少都是一闪而过,后面必需有delay()才行。
也是uno r3,刚接触arduino。
谢谢。
发表于 2021-8-29 07:51 | 显示全部楼层
mmgg1721620 发表于 2021-8-27 10:09
楼主你好,请问“tone不会等持续时间结束后再去执行下一条句子”,是什么意思,还是没能整明白。
tone(pi ...

呵...因為 TONE 會動到硬體計時器,很久以前
我就改用自己寫的 TONE 函式了(用軟體
DELAY 來產生方波間隔控制頻率),快忘了

就我對 TONE() 的印象,沒有 duration 參數
時,你下 tone 指令,該腳位就會一直輸出方波,
直到你下 noTone 指令,但程式會停在 tone
一直執行嗎? 不會,如果會的話,你永遠也沒機會
執行到 noTone 指令了,對吧?

一樣的道理,就算你用了 duration 參數,但程式
並不會等 tone 跑到時間結束才往下一條指令去,
如果你在 tone 的後面接了 noTone,根本沒機會
發出聲音就被你喊停了,這樣你明白
“tone不會等持續時間結束後再去執行下一條句子”
這句話的意思了嗎?

也就是說,如果只發出一個聲音,時間固定,那麼下有
duration 參數的 tone 指令後,你可以繼續後面的程式,
時間到了聲音會自動關閉,不必再下 noTone 指令

如果要連續依序發出多個聲音,你就用沒有 duration
參數的 tone 指令,後面自己用 delay 來控制每個聲音
要多長時間,最後面記得給個 noTone 指令

如果要間斷依序發出多個聲音,你就用有 duration
參數的 tone 指令,後面自己用 delay 來控制每個聲音
要多長時間(含聲響時間+間斷時間),最後面不必再給
noTone 指令
发表于 2021-8-30 19:40 | 显示全部楼层
shouzama 发表于 2021-8-29 07:51
呵...因為 TONE 會動到硬體計時器,很久以前
我就改用自己寫的 TONE 函式了(用軟體
DELAY 來產生方波間隔 ...

收到,明白了,感谢解答。
根据你的提示,我用tone驱动小喇叭,和点亮led,两个指令放一起来试了,结果很明显。
如果使用tone+delay+noTone,将在声音停止后再执行后面点灯的指令;
而如果使用tone+duration,发出声音的同时点灯指令也执行,而声音什么时候停止取决于duration参数。这就是为什么那天我这么使用的时候只有3500hz的声音,因为3500hz把3000覆盖了。
tone(buz,3000,1000);
tone(buz,3500,1000);

微信截图_20210830193512.png


再次感谢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 01:40 , Processed in 0.078832 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表