|
|
目的:我要做的是一个用超声波模块或红外模块测距,并将测距结果以声音形式输出(do-ri-mi-fa-so-la-xi),每个音最好都能有渐消效果!如下图所示
以下是我的电路
我自己拼了一段代码,可是效果不对,,,,只响一声就没有然后了……
求解啊
代码如下
- const int TrigPin = 8;
- const int EchoPin = 9;
- float cm;
- void setup()
- {
- Serial.begin(9600);
- pinMode(TrigPin, OUTPUT);
- pinMode(EchoPin, INPUT);
- pinMode(4,OUTPUT);
- }
- void loop()
- {
- {
- if(cm>0 && cm<100.0)
- {
- if(cm<=20)
- {
- if(digitalRead(4)==LOW)
- {
- delay(5);
- if(digitalRead(4)==LOW)
- {
- tone(4,784,1000); //So
- while(digitalRead(4)==LOW)
- {
- delay(1);
- }
- }
- }
- }
- else if(cm>20&&cm<=30)
- {
- if(digitalRead(4)==LOW)
- {
- delay(5);
- if(digitalRead(4)==LOW)
- {
- tone(4,698,1000); //So
- while(digitalRead(4)==LOW)
- {
- delay(1);
- }
- }
- }
- }
- }
- }
- digitalWrite(4,HIGH);
- delay(100);
- digitalWrite(4,HIGH);
- delay(1000-(100-cm)*12.5);
- }
复制代码
相关资料:
1. 发出do-ri-mi的对应数据
{262,293,329,349,392,440,494 } ,//低音
{523,586,658,697,783,879,987 } ,//中音
{1045,1171,1316,1393,1563,1755,1971 }//高音
2.抄来的渐消音代码:
analogWrite(5,(127+tmp[laser]-mus_long[laser])*2);//把音长距离结束的时间兑换成音量控制模拟音量渐弱
tone(2,tmp1); //如果本光柱无故障则发出由上一句产生的颤音,(hz/100 是振幅)
delay(7); //本句延迟5毫秒,上一句中传出的模拟量程为0-255,但延时数量最大为100,但此数段应实测
}else delay(8);//不该发声时应延迟更久一些毫秒数
tmp[laser]=tmp[laser]+1;//准备检查下一根光柱
if (tmp[laser]>mus_long[laser]) {//如延时完成则
tmp[laser]=0;mus_long[laser]=127;//则本光柱清零、音长清零
noTone(2);//停止发声
最终目的:测距——距离对应音(d0-ri-mi)且为渐消音
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|