请选择 进入手机版 | 继续访问电脑版
凡是官网购买产品,均可以获得积分,(积分可以用来下载技术资料)还可以获得精致技术支持。零知实验室可提供全套电子方案定制服务,了解详情请咨询客服。           
查看: 1140|回复: 1

零知开源小项目-制作简单的电子钢琴

[复制链接]
发表于 2019-7-29 11:23:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 赵勇 于 2019-8-10 13:59 编辑

一、工具原料
二、 硬件连接

电子钢琴.jpg
三、接线原理图
QQ图片20190730115641.png
四、方法步骤(实现代码)
[C++] 纯文本查看 复制代码
/**********************************************************
*    文件: 制作简单的电子钢琴.ino      by 零知实验室([url=http://www.lingzhilab.com]www.lingzhilab.com[/url])
*    -^^- 零知开源,让电子制作变得更简单! -^^-
*    时间: 2019/07/24 9:07
*    说明: 
************************************************************/
int buzzer = 10;//设置蜂鸣引脚


int KEY_1 = 1;//按键1的引脚为一号
int KEY_2 = 2;//按键2的引脚为二号
int KEY_3 = 3;
int KEY_4 = 4; 
int KEY_5 = 5;
int KEY_6 = 6;
int KEY_7 = 9;//按键7的引脚为九号

int A = 0;//定义7个变量存放各个按键的电平状态
int B = 0;
int C = 0;
int D = 0;
int E = 0;
int F = 0;
int G = 0;



void tone1_YES();
void tone2_YES();
void tone3_YES();
void tone4_YES();
void tone5_YES();
void tone6_YES();
void tone7_YES();
// 复位或上电后运行一次:
void setup() {
        
        pinMode(1,INPUT);//对按键进行初始化,也可以将代码写成pinMode(KEY_1,INPUT);
        
        pinMode(2,INPUT);
        pinMode(3,INPUT);
        pinMode(4,INPUT);
        pinMode(5,INPUT);
        pinMode(6,INPUT);
        pinMode(9,INPUT);
        
        digitalWrite(buzzer,HIGH);//设置蜂鸣器的电压为高
        pinMode(10,OUTPUT);//初始化蜂鸣器的状态

    //在这里加入初始化相关代码,只运行一次:

}

//一直循环执行:
void loop() {
         A = digitalRead(KEY_1);//把读到的按键1电压存放到A
         B = digitalRead(KEY_2);
         C = digitalRead(KEY_3);
         D = digitalRead(KEY_4);
         E = digitalRead(KEY_5);
         F = digitalRead(KEY_6);
         G = digitalRead(KEY_7);
        
        if(A == HIGH)//当按下第一个按键A,即A的电压为高
        {
                tone1_YES();//执行第一个音符
        }
        if(B == HIGH)
        {
                tone2_YES();//执行第二个音符,同理也可以将所有音符放入,按下按键就可以播放一首歌。
        }
        if(C == HIGH)
        {
                tone3_YES();
        }
        if(D == HIGH)
        {
                tone4_YES();
        }
        if(E == HIGH)
        {
                tone5_YES();
        }
        if(F == HIGH)
        {
                tone6_YES();
        }
        if(G == HIGH)
        {
                tone7_YES();
        }
}
        void tone1_YES()
        {
                tone(10,1523,100);//第一个数字是代表使发音的引脚,第二个数字是发音频率,第三个数字代表声音持续的时间
                //音符do
        }
        void tone2_YES()
        {
                tone(10,1587,100);//音符 ri
                
        }
        void tone3_YES()
        {
                tone(10,1659,100);// 音符 mi
        
        }
        void tone4_YES()
        {
                tone(10,1698,100);//音符 fa
        }
        void tone5_YES()
        {
                tone(10,1784,100);//so
        }
        void tone6_YES()
        {
                tone(10,1880,100);//la
        }
        void tone7_YES()
        {
                tone(10,2420,100);//xi
        }
        //ps,根据版本不同,tone的音符 数据有不同。

四、测试验证
请查看回帖。
回复

使用道具 举报

 楼主| 发表于 2019-7-30 09:48:59 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

手机版| 小黑屋| 零知实验室 ( 粤ICP备17040594号-3 )

GMT+8, 2020-4-9 06:59 , Processed in 0.061873 second(s), 18 queries .

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