小白求助——如何用光敏电阻控制蜂鸣器开关?(晴天娃娃闹钟)
本帖最后由 vincentlee 于 2014-7-24 19:51 编辑经过参考两位官方大神的教程
1.http://www.geek-workshop.com/thread-1340-1-1.html
Arduino入门教程--第十一课--Arduino达文西之灯(光敏实验)
2.http://www.geek-workshop.com/thread-288-1-2.html
Arduino学习心得-简单制作各种歌曲
卤煮看到手边的见光会自动摇脑袋晴天娃娃后,便萌生一个想法,即:想用光敏电阻与蜂鸣器组合成一个有光就会发出优美音乐的小闹钟。
但目前却在技术上遇到了困难,向各位大神求职!
以下是电路图
就照着Arduino达文西之灯里的电路图直接改的,把LED换成蜂鸣器。
以下是代码(捂脸)
(前面是参照教程2编写的,歌曲是五月天的《拥抱》的前奏)
PS:各位可以暂时忽略后面的备注,没有修改。
#define NOTE_C0 -1#define NOTE_C1 262#define NOTE_C2 294#define NOTE_C3 330#define NOTE_C4 350#define NOTE_C5 393#define NOTE_C6 441#define NOTE_C7 495 #define NOTE_CL1 131#define NOTE_CL2 147#define NOTE_CL3 165#define NOTE_CL4 175#define NOTE_CL5 196#define NOTE_CL6 221#define NOTE_CL7 248 #define NOTE_CH1 525#define NOTE_CH2 589#define NOTE_CH3 661#define NOTE_CH4 700#define NOTE_CH5 786#define NOTE_CH6 882#define NOTE_CH7 990//以上部分是定义是把每个音符和频率值对应起来,其实不用打这么多,但是都打上了,后面可以随意编写D调的各种歌,我这里用NOTE_D+数字表示音符,NOTE_DH+数字表示上面有点的那种音符,NOTE_DL+数字表示下面有点的那种音符。这样后面写起来比较好识别。#define WHOLE 1#define HALF 0.5#define QUARTER 0.25#define EIGHTH 0.25#define SIXTEENTH 0.625//这部分是用英文对应了拍子,这样后面也比较好看int tune[] = { NOTE_C4,NOTE_C6,NOTE_CH3,NOTE_CH1, NOTE_C3,NOTE_C5,NOTE_CH3,NOTE_C7, NOTE_C2,NOTE_C6,NOTE_CH4,NOTE_CH1, NOTE_C1,NOTE_C5,NOTE_CH3,NOTE_CH1, NOTE_C4,NOTE_C6,NOTE_CH3,NOTE_CH1, NOTE_C3,NOTE_C5,NOTE_CH3,NOTE_C7, NOTE_C2,NOTE_C6,NOTE_CH4,NOTE_CH1, NOTE_C1,NOTE_C5,NOTE_CH3,NOTE_CH1,};//这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数 float duration[]={ 0.5,0.5,0.5,0.5, 0.5,0.5,0.5,0.5, 0.5,0.5,0.5,0.5, 0.5,0.5,0.5,0.5, 0.5,0.5,0.5,0.5, 0.5,0.5,0.5,0.5, 0.5,0.5,0.5,0.5, 0.5,0.5,0.5,0.5, 1+1+1+1};//这部分是整首曲子的接拍部分,也定义个序列duration,浮点(数组的个数和前面音符的个数是一样的,一一对应么) int length;//这里定义一个变量,后面用来表示共有多少个音符int tonePin=13;//蜂鸣器的pinint a =100; //此处需是环境基础亮度变量,请查看自己的亮度数值, //填写到此处数值要略大于所测得的数据但小于灯光下的数据
void setup (){ Serial.begin(9600); pinMode(13,OUTPUT);}void loop(){intn = analogRead(A0); //读取模拟口A0数值 Serial.println(n);if(n>= a ) //对光线强度进行判断,如果比我们的预设值大 就点亮LED否则就关闭{ for(int x=0;x<length;x++)//循环音符的次数 { tone(tonePin,tune);//此函数依次播放tune序列里的数组,即每个音符 delay(1000*duration);//每个音符持续的时间,即节拍duration,400是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握吧 noTone(tonePin);//停止当前音符,进入下一音符 } delay(2000);//等待2秒后,循环重新开始 } else{ digitalWrite(13,LOW);}}
最后上传到arduino上代码已经没有问题
但是传输之后,蜂鸣器没有按照我的想法发出声音,几次检查线路、接口什么的都没有问题,但还是不行。
我想是不是我的代码有问题?还是接法有误?请各位看见的大神能指点一下!
小弟感激不尽!!!
谢谢各位!!!{:soso_e109:}{:soso_e109:}{:soso_e109:}{:soso_e109:}{:soso_e109:}{:soso_e109:}{:soso_e109:}{:soso_e109:}{:soso_e109:}{:soso_e109:}{:soso_e109:}{:soso_e109:}{:soso_e109:}
我自己找到问题了。。。。= =!! vincentlee 发表于 2014-7-24 20:48 static/image/common/back.gif
谢谢各位!!!{:soso_e ...
找到问题要说一下,其他人搜索过来就能把问题给解决了。对不对~~~
页:
[1]