【Arduino实验07 模拟简易电子琴】

2023-11-11 18:10

本文主要是介绍【Arduino实验07 模拟简易电子琴】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、实验目的

二、实验设备与环境

三、实验重点

四、实验难点

五、实验内容

5.1实验任务

5.2实验原理

5.3实验内容

5.4实验结果

5.5思考题


一、实验目的

        1掌握tone()发声函数的功能;

        2熟悉数组、自动函数的使用;

        3编写乐曲演奏程序;

        4编写简易电子琴演奏程序。

二、实验设备与环境

        Arduino UNO套件、Arduino IDE、计算机、按键、LED灯、蜂鸣器、杜邦线等

三、实验重点

        1实验电路连接;2控制程序代码编写;3程序功能调试

四、实验难点

        (1)程序代码编写、调试

五、实验内容

5.1实验任务

        任务描述:蜂鸣器驱动;调用调声函数演奏乐曲片段;模拟电子琴演奏

5.2实验原理

        1.数组

        语法:type arrayName[n];

        参数:n,数组元素个数;数组元素编号从0开始至n-1

        功能:声明一个type类型、n个元素的数组。数组名称与变量命名规则一致,类型为数据类型。数组元素通过再数组名称后永等号与一个大括号包含的初始化值列表进行初始化。

int C[10]; // 声明一个类型为整数、10个元素的数组。

charF[5][4]; // 声明一个类型为char、5×4个元素的二维数组

int M[10] = {12,34,22,54,65,77,81,90,0,28}; //数组的声明与初始化

        2.调声函数tone()

        语法:tone(pin,frenquency,duration);

        参数:pin,引脚号;frenquency,发声频率;duration,声音持续时间。

        功能:产生指定频率的方波,若未指定持续时间,则持续到noTone()时止。在同一时间只能产生一个频率的方波, 如果tone正执行在一个pin上, 在其他pin上调用tone()将不起作用. 如果在同一个pin上再次调用tone, 则使用新指定的频率。注意,使用tone()会与pin 3 和pin 11 脚的PWM输出冲突。

        noTone(pin):停止引脚pin上tone()函数产生的方波信号。

        基本音调的频率:Do,523;Re,587;Mi,659;Fa,698;So,784;La,880;Xi,988

        3.自定义函数

        将一个重复使用的功能定义为函数,只需要在LOOP主程序里调用就可以实现该功能,使程序结构清晰,将程序中重复语句功能定义为函数,可以使程序简化、编程效率提高。

数据类型函数名(类型参数名称列表); {

        语句块;

        return <返回值>; //返回值为可选项}

// return 语句是将函数的值返回给被调用的函数

// return的另一个作用是终止执行被调用函数,并返回

// return语句可以加入条件控制

        4.模拟电子琴演奏电路

 

5.3实验内容

        1.蜂鸣器驱动发声

        步骤1:电路连接

        步骤2:画流程图

        步骤3:编写源程序

        Arduino IDE程序1:

const buzzerPin = 5; // 蜂鸣器引脚接 D5 接口
const tonebase = 294;
void setup() {pinMode(buzzerPin,OUTPUT);
}
Void loop() {int i = 0;do {tone(buzzerPin,tonebase+i*5,200); // 蜂鸣器发声noTone(buzzerPin);i++;} while (i<=125);delay(2000);
}

        Arduino IDE 程序 2:

// 自定义函数驱动蜂鸣器发声
const buzzerPin = 5; // 蜂鸣器引脚接 D5 接口
const tonebase = 294;
void setup() {pinMode(buzzerPin,OUTPUT);
}
Void loop() {buzzerTone(); // 调用 buzzerTone()函数delay(2000);
}
void buzzerTone() { // 自定义函数int i = 0;do {tone(buzzerPin,tonebase+i*5,200); // 蜂鸣器发声noTone(buzzerPin);i++;} while (i<=125)
}

        步骤 4:程序编译与功能调试

        2.乐曲片段演奏

        步骤 1:电路连接

        步骤 2:画流程图

        步骤 3:编写源程序

void setup() {int buzzerPin = 10;int Do = 523;int Re = 587;int Mi = 659;int Fa = 698;int So = 784;int La = 880;int Xi = 988;int musicTone[] ={ Do,Do,So,So,La,La,So,Fa,Fa,Mi,Mi,Re,Re,Do,So,So,Fa,Fa,Mi,Mi,Re,So,So,Fa,Fa,Mi,Mi,Re};int musicduration[] = {4,4,4,4,4,4,2,4,4,4,4,4,4,2,4,4,4,4,4,4,2,4,4,4,4,4,4,2};
}
void loop() {for(int i = 0;i<=27;i++) {tone(buzzer,musicTone[i]);// 音符时长,如 4 分音符,时长 1000/4 毫秒delay(1000/musicduration[i]);noTone(buzzer);}delay(2000);
}

        步骤 4:程序编译与功能调试

        3.模拟电子琴演奏

        步骤 1:电路连接

        步骤 2:画流程图

        步骤 3:编写源程序

void setup() {int doPin =2;int rePin =3;int miPin =4;int faPin =5;int soPin =6;int laPin =7;int xiPin =8;int musicPin[] = {doPin,rePin,miPin,faPin,soPin,laPin,xiPin};for (int i=0;i<=6,i++){pinMode(musicPin[i],INPUT);}int buzzerPin = 10;pinMode(buzzer,OUTPUT);int Do = 523;int Re = 587;int Mi = 659;int Fa = 698;int So = 784;int La = 880;int Xi = 988;int musicTone[] ={Do,Re,Mi,Fa,So,La,Xi};
}
void loop() {// 按下按键,发出按键对应音调的声音if (digitalRead(musicPin[0])) {tone(buzzer,musicTone[0],10);}if (digitalRead(musicPin[1])) {tone(buzzer,musicTone[1],10);}if (digitalRead(musicPin[2])) {tone(buzzer,musicTone[2],10);}if (digitalRead(musicPin[3])) {tone(buzzer,musicTone[3],10);}if (digitalRead(musicPin[4])) {tone(buzzer,musicTone[4],10);}if (digitalRead(musicPin[5])) {tone(buzzer,musicTone[5],10);}if (digitalRead(musicPin[6])) {tone(buzzer,musicTone[6],10);}
}

        步骤 4:程序编译与功能调试

5.4实验结果

        结论: 试验的结果为蜂鸣器响出的声音是一闪一闪亮晶晶的音乐;模拟电子琴演奏,可以根据按键来控制蜂鸣器发出的声音,使其发出哆唻咪砝唆啦西的声音。

        反思:首先通过本次实验,我学到了一些知识,掌握 tone()发声函数的功能;熟悉数组、自动函数的使用;编写乐曲演奏程序;编写简易电子琴演奏程序。其次,试验的结果为蜂鸣器响出的声音是一闪一闪亮晶晶的音乐;模拟电子琴演奏,可以根据按键来控制蜂鸣器发出的声音,使其发出哆唻咪砝唆啦西的声音。最后,希望我们继续努力再接再厉。

        作品:

5.5思考题

1.乐器演奏时,按下琴键时琴声响起,松开时停止,你是怎样实现的?

这篇关于【Arduino实验07 模拟简易电子琴】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/391913

相关文章

Java 单元测试之Mockito 模拟静态方法与私有方法最佳实践

《Java单元测试之Mockito模拟静态方法与私有方法最佳实践》本文将深入探讨如何使用Mockito来模拟静态方法和私有方法,结合大量实战代码示例,带你突破传统单元测试的边界,写出更彻底、更独立... 目录Mockito 简介:为什么选择它?环境准备模拟静态方法:打破“不可变”的枷锁传统困境解法一:使用M

使用Python实现一个简易计算器的新手指南

《使用Python实现一个简易计算器的新手指南》计算器是编程入门的经典项目,它涵盖了变量、输入输出、条件判断等核心编程概念,通过这个小项目,可以快速掌握Python的基础语法,并为后续更复杂的项目打下... 目录准备工作基础概念解析分步实现计算器第一步:获取用户输入第二步:实现基本运算第三步:显示计算结果进

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

基于Python实现简易视频剪辑工具

《基于Python实现简易视频剪辑工具》这篇文章主要为大家详细介绍了如何用Python打造一个功能完备的简易视频剪辑工具,包括视频文件导入与格式转换,基础剪辑操作,音频处理等功能,感兴趣的小伙伴可以了... 目录一、技术选型与环境搭建二、核心功能模块实现1. 视频基础操作2. 音频处理3. 特效与转场三、高

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参