Arduino Uno R3开发(1)——据说通过蜂鸣器可以播放《鸡你太美》?

news/2024/10/30 9:33:30/

昨天写了一篇RFID开发,但是视频课程太难,只能从更基础的Arduino Uno R3 开发进行学习
一起进行Arduino Uno R3的学习吧,我之前从未接触硬件

如果奔着鸡你太美来的直接翻到最后

点击跳转Arduino函数参考手册

第一步Arduino驱动的安装,以及环境的搭建

此处跳转到Arduino论坛,有详细步骤

第二步操刀干

1.第一行代码

输入R,输入Hello world,在PC端
以下会出现的名词(先大致了解)
波特率:波特率表示每秒钟传送的码元符号的个数,它是对符号传输速率的一种度量,它用单位时间内载波调制状态改变的次数来表示,1波特即指每秒传输1个符号(选自百度百科)

①步骤

先通过USB数据线将Arduino和电脑连接起来
然后打开Arduino软件,输入下述代码
最后进行编译上传
点击工具-》串口监视器-》在发送栏发送R,会看到开发板进行一次闪烁,并输出Hello world
出现错误的话,点击这里有解决方案

int val;//定义变量valint ledpin=13;//定义数字接口13void setup(){Serial.begin(9600);//设置波特率为9600,这里要跟软件设置相一致。当接入特定设备(如:蓝牙)时,我们也要跟其他设备的波特率达到一致。pinMode(ledpin,OUTPUT);//设置数字13 口为输出接口,Arduino 上我们用到的I/O 口都要进行类似这样的定义。
}void loop(){val=Serial.read();//读取PC 机发送给Arduino 的指令或字符,并将该指令或字符赋给valif(val=='R')//判断接收到的指令或字符是否是“R”。{ //如果接收到的是“R”字符digitalWrite(ledpin,HIGH);//点亮数字13 口LED。delay(500);//延时500msdigitalWrite(ledpin,LOW);//熄灭数字13 口LEDdelay(500);//延时500msSerial.println("Hello World!");//显示“Hello World!”字符串}
}
②解释说明

每次新建一个文件,会将代码部分直接分为如下两部分

void setup(){//put your setup code here, to run once;
}
void loop(){//put you main code here, to run repeatedly
}

点击跳转Arduino函数参考手册

setup()代码部分解释翻译就是,只会执行一次

loop()代码部分解释翻译就是,会不断地循环执行

pinMode()
         void pinMode (pin, mode)设置引脚模式
         配置引脚为输出或输出模式.
         参数:
         pin 引脚编号
         mode: INPUT, OUTPUT, 或 INPUT_PULLUP.

digitalWrite()
         void digitalWrite (pin, value)
         写数字引脚, 对应引脚的高低电平. 在写引脚之前, 需要将引脚设置为OUTPUT模式.
         参数:
         pin: 引脚编号
         value: HIGH 或 LOW

begin()
         Serial.begin (speed)打开串口
         参数:
         speed: 波特率

read()
         Serial.read()
         读串口数据,read()继承自Stream实用类。

print()
         往串口发数据,无换行 描述 以人类可读的ASCII码形式向串口发送数据,该函数有多种格式。整数的每一数位将以ASCII码形式发送。浮点数同样以ASCII码形式发送,默认保留小数点后两位。字节型数据将以单个字符形式发送。字符和字符串会以其相应的形式发送

println()
         往串口发数据,类似Serial.print(),但有换行

delay()
         dalay(time)
         延时time个毫秒
         参数
         time:毫秒数

2.交通灯

①将板子如图连好在这里插入图片描述
②敲入以下代码
int redled = 10;//定义数字10的接口
int yellowled = 7;//定义7的接口
int greenled = 4;//定义4的接口
setup(){pinMode(redled,OUTPUT);//定义红色小灯接口为输出接口pinMode(yellowled,OUTPUT);//定义黄色小灯接口为输出接口pinMode(greenled,OUTPUT);//定义绿色小灯接口为输出接口
}
void loop(){digitalWrite(greenled, HIGH);//点亮绿色小灯delay(5000);//延时5秒digitalWrite(greenled, LOW);//熄灭绿色小灯for(int i=0;i<3;i++){delay(500);digitalWrite(yellowled,HIGH);//点亮黄色小灯delay(500);//延时0.5秒digitalWrite(yellowled,LOW);//点亮黄色小灯}delay(500);digitalWrite(redled, HIGH);//点亮红色小灯delay(5000);//延时5秒digitalWrite(redled,LOW);//点亮红色小灯
}

3.按键控制LED灯点亮、熄灭

①按照下图将板子连好

在这里插入图片描述

②将下述代码敲入
int ledpin=11;//定义数字11 接口
int inpin=7;//定义数字7 接口
int val;//定义变量val
void setup()
{pinMode(ledpin,OUTPUT);//定义小灯接口为输出接口pinMode(inpin,INPUT);//定义按键接口为输入接口
}
void loop()
{val=digitalRead(inpin);//读取数字7 口电平值赋给valif(val==LOW)//检测按键是否按下,按键按下时小灯亮起{ digitalWrite(ledpin,LOW);}else{ digitalWrite(ledpin,HIGH);}
}
③解释说明

当按键按下时,按钮处为通路,就会在7接口形成高电平,此时就会使数字11接口产生高电平,从而使led灯发亮
当按键松开时,按钮处为开路,7接口就会是低电平,数字11接口仍然会保持低电平,led熄灭


点击跳转Arduino函数参考手册
digitalRead()
        int digitalRead (pin)
        读数字引脚, 返回引脚的高低电平. 在读引脚之前, 需要将引脚设置为INPUT模式.
        参数:
        pin 引脚编号
        返回:
        HIGH或LOW

利用蜂鸣器播放音乐

①如图连接好在这里插入图片描述
②将以下代码敲入
int
buzzer=8;//设置控制蜂鸣器的数字IO脚void
setup() { pinMode(buzzer,OUTPUT);//设置数字IO脚模式,OUTPUT为辒出 } void
loop() { unsigned char i,j;//定义变量while(1) { for(i=0;i<80;i++)//辒出一个频率的声音{ digitalWrite(buzzer,HIGH);//发声音delay(1);//延时1ms digitalWrite(buzzer,LOW);//不发声音delay(1);//延时ms } for(i=0;i<100;i++)//辒出另一个频率癿声音 { digitalWrite(buzzer,HIGH);//发声音delay(2);//延时2ms digitalWrite(buzzer,LOW);//不发声音delay(2);//延时2ms } } 
}
③将以下代码敲入可以播放葫芦娃(将蜂鸣器换成无源蜂鸣器)

代码来源于,已经过修改

//对应音符和频率值#define NOTE_D0 -1#define NOTE_DL1 261#define NOTE_DL2 293#define NOTE_DL3 311#define NOTE_DL4 349#define NOTE_DL5 391#define NOTE_DL6 440#define NOTE_DL7 493#define NOTE_D1 523#define NOTE_D2 587#define NOTE_D3 659#define NOTE_D4 698#define NOTE_D5 783#define NOTE_D6 880#define NOTE_D7 987#define NOTE_DH1 1046#define NOTE_DH2 1174#define NOTE_DH3 1318#define NOTE_DH4 1396#define NOTE_DH5 1567#define NOTE_DH6 1760#define NOTE_DH7 1975#define WHOLE 1#define HALF 0.5#define QUARTER 0.25#define EIGHTH 0.25#define SIXTEENTH 0.625//整首曲子的音符部分int tune[] ={NOTE_DH1, NOTE_D6, NOTE_D5, NOTE_D6, NOTE_D0,NOTE_DH1, NOTE_D6, NOTE_D5, NOTE_DH1, NOTE_D6, NOTE_D0, NOTE_D6,NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D6, NOTE_D0, NOTE_D6,NOTE_DH1, NOTE_D6, NOTE_D5, NOTE_DH1, NOTE_D6, NOTE_D0,NOTE_D1, NOTE_D1, NOTE_D3,NOTE_D1, NOTE_D1, NOTE_D3, NOTE_D0,NOTE_D6, NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D6,NOTE_D5, NOTE_D1, NOTE_D3, NOTE_D0,NOTE_DH1, NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D6,NOTE_D5, NOTE_D1, NOTE_D2, NOTE_D0,NOTE_D7, NOTE_D7, NOTE_D5, NOTE_D3,NOTE_D5,NOTE_DH1, NOTE_D0, NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D5, NOTE_D6, NOTE_D6,NOTE_D0, NOTE_D5, NOTE_D1, NOTE_D3, NOTE_D0,NOTE_DH1, NOTE_D0, NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D5, NOTE_D6, NOTE_D6,NOTE_D0, NOTE_D5, NOTE_D1, NOTE_D2, NOTE_D0,NOTE_D3, NOTE_D3, NOTE_D1, NOTE_DL6,NOTE_D1,NOTE_D3, NOTE_D5, NOTE_D6, NOTE_D6,NOTE_D3, NOTE_D5, NOTE_D6, NOTE_D6,NOTE_DH1, NOTE_D0, NOTE_D7, NOTE_D5,NOTE_D6,};//曲子的节拍,即音符持续时间float duration[] ={1, 1, 0.5, 0.5, 1,0.5, 0.5, 0.5, 0.5, 1, 0.5, 0.5,0.5, 1, 0.5, 1, 0.5, 0.5,0.5, 0.5, 0.5, 0.5, 1, 1,1, 1, 1 + 1,0.5, 1, 1 + 0.5, 1,1, 1, 0.5, 0.5, 1,0.5, 1, 1 + 0.5, 1,0.5, 0.5, 0.5, 0.5, 1 + 1,0.5, 1, 1 + 0.5, 1,1 + 1, 0.5, 0.5, 1,1 + 1 + 1 + 1,0.5, 0.5, 0.5 + 0.25, 0.25, 0.5 + 0.25, 0.25, 0.5 + 0.25, 0.25,0.5, 1, 0.5, 1, 1,0.5, 0.5, 0.5 + 0.25, 0.25, 0.5 + 0.25, 0.25, 0.5 + 0.25, 0.25,0.5, 1, 0.5, 1, 1,1 + 1, 0.5, 0.5, 1,1 + 1 + 1 + 1,0.5, 1, 0.5, 1 + 1,0.5, 1, 0.5, 1 + 1,1 + 1, 0.5, 0.5, 1,1 + 1 + 1 + 1};int length;//定义一个变量用来表示共有多少个音符int tonePin = 8; //蜂鸣器的pinvoid setup(){pinMode(tonePin, OUTPUT); //设置蜂鸣器的pin为输出模式length = sizeof(tune) / sizeof(tune[0]); //这里用了一个sizeof函数,查出数组里有多少个音符}void loop(){for (int x = 0; x < length; x++) //循环音符的次数{tone(tonePin, tune[x]); //依次播放tune数组元素,即每个音符delay(400 * duration[x]); //每个音符持续的时间,即节拍duration,400是调整时间的越大,曲子速度越慢,越小曲子速度越快noTone(tonePin);//停止当前音符,进入下一音符}delay(5000);//等待5秒后,循环重新开始}                    
④解释说明:

tone()
         tone(pin, frequency, duration)
         在指定引脚产生指定频率的方波,可用于蜂鸣器或扬声器播放音调。
         参数:
         pin:产生音调的引脚。
         frequency:音调频率,单位赫兹。
         duration:音调持续时间(毫秒单位),此参数可不写。

noTone()
         noTone(pin)
         停止产生方波。
         参数
         pin:需要停止产生音调的引脚。

博主补充,我扒了下鸡你太美的谱子,但是播放出来总是怪怪的应该是没有扒正确,扒出来好多没有想象中那么欢乐,他好多都是空拍。
 /*BUZZER2使用无源蜂鸣器播放《葫芦娃》*///对应音符和频率值#define M0 -1#define L2 261#define L2 293#define L3 311#define L4 349#define L5 391#define L6 440#define L7 493#define M1 523#define M2 587#define M3 659#define M4 698#define M5 783#define M6 880#define M7 987#define H1 1046#define H2 1174#define H3 1318#define H4 1396#define H5 1567#define H6 1760#define H7 1975#define WHOLE 1#define HALF 0.5#define QUARTER 0.25#define EIGHTH 0.25#define SIXTEENTH 0.625//整首曲子的音符部分int tune[] ={M0, L6, M3, M3, M6, M0,M0, M0, L6, L6, M0, M0,M0, L6, M3, M3, M6, M0,M0, M0, L6, L6, M0, M0, L6,M3, M3, M3, M3, M3, M6, M0,M0, M0, L6, L6, M0, M0,M0, L6, M3, M3, M6, M0,  M0, M0, L6, L6, M0, M0,M0, M0};//曲子的节拍,即音符持续时间float duration[] =
{0.5, 0.5, 0.5, 0.5, 1, 1,1, 0.5, 0.25, 0.25, 1, 1,0.5, 0.5, 0.5, 0.5, 1, 1,1, 0.5, 0.25, 0.25, 1, 0.5, 0.5,0.5, 0.5, 0.5, 0.5, 1, 1,1, 0.5, 0.25, 0.25, 1, 1,0.5, 0.5, 0.5, 0.5, 1, 1,1, 0.5, 0.25, 0.25, 1, 0.5, 0.5,2, 2
};int length;//定义一个变量用来表示共有多少个音符int tonePin = 8; //蜂鸣器的pinvoid setup(){pinMode(tonePin, OUTPUT); //设置蜂鸣器的pin为输出模式length = sizeof(tune) / sizeof(tune[0]); //这里用了一个sizeof函数,查出数组里有多少个音符}void loop(){for (int x = 0; x < length; x++) //循环音符的次数{tone(tonePin, tune[x]); //依次播放tune数组元素,即每个音符delay(600 * duration[x]); //每个音符持续的时间,即节拍duration,400是调整时间的越大,曲子速度越慢,越小曲子速度越快noTone(tonePin);//停止当前音符,进入下一音符}delay(5000);//等待5秒后,循环重新开始}
//
//   1, 1, 0.5, 0.5, 0.5,0.5,
//   1.5, 0.25, 0.25+0.5, 0.25,0.25+0.5, 0.25, 0.25+0.5,
//   0.25, 0.25+0.5, 0.25, 0.25+0.5, 0.5, 0.5, 0.5,
//   1.5, 0.25, 0.25+0.5, 0.25, 0.25+0.5, 0.25,0.25+0.5, 
//   
//   0.25, 0.25+0.5, 0.25, 0.25+0.5, 0.5, 0.5, 0.5,
//   1.5, 0.25, 0.25+0.5, 0.25, 0.25+0.5, 0.25,0.25+0.5, 
//   0.25, 0.25+0.5, 0.25, 0.25+0.5, 0.5, 0.5, 0.5,
//   1.5, 0.25, 0.25+0.5, 0.25, 0.25, 0.5, 0.5+0.5, 
//   
//   0.25, 0.25, 0.5, 0.25, 0.25+0.5, 0.5, 0.5, 0.25,  0.25,
//   0.25, 025, 0.25, 0.25, 0.25, 0.25, 0.5, 0.25, 0.25, 0.25, 0.25+0.25, 0.25, 0.25, 0.25,
//   0.25, 025, 0.25, 0.25, 0.25, 0.25, 0.5, 0.25, 0.25, 0.25, 0.25+0.5, 0.5,
//   1.5, 0.5 + 1, 0.5, 0.5,
//   
//
//NOTE_D0, NOTE_D0, NOTE_D0, NOTE_D6, NOTE_DH3, NOTE_DH3,
//   NOTE_D6, NOTE_DH6*2, NOTE_DH6*2, NOTE_DH3*2, NOTE_DH3*2, NOTE_DH4*2, NOTE_DH4*2,
//   NOTE_DH2*2, NOTE_DH2*2, NOTE_DH3*2, NOTE_DH3*2, NOTE_D6, NOTE_DH3, NOTE_DH3,
//   NOTE_D6, NOTE_DH6*2, NOTE_DH6*2, NOTE_DH3*2, NOTE_DH3*2, NOTE_DH4*2, NOTE_DH4*2,
// 
//   NOTE_DH2*2, NOTE_DH2*2, NOTE_DH3*2, NOTE_DH3*2, NOTE_D6, NOTE_DH3, NOTE_DH3,
//   NOTE_D6, NOTE_DH6*2, NOTE_DH6*2, NOTE_DH3*2, NOTE_DH3*2, NOTE_DH4*2, NOTE_DH4*2,
//   NOTE_DH2*2, NOTE_DH2*2, NOTE_DH3*2, NOTE_DH3*2, NOTE_D6, NOTE_DH3, NOTE_DH3,
//   NOTE_D6, NOTE_DH6, NOTE_DH6, NOTE_DH3, NOTE_DH3, NOTE_DH1, NOTE_DH4,
//   
//   NOTE_DH2, NOTE_DH2, NOTE_DH6, NOTE_DH3, NOTE_DH3, NOTE_DH1, NOTE_DH2, NOTE_DH3,
//   NOTE_DH6, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH2, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3,
//   NOTE_DH6, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH2, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_D6,
//   NOTE_D4, NOTE_D4, NOTE_DH6, NOTE_DH6,

http://www.ppmy.cn/news/312139.html

相关文章

note

1 周末班上课笔记2 1.从redhat centos过度到ubuntu3 a)修改网络配置4 b)ubuntu安装5 建议在安装ubuntu的过程中断网6 分区:7 建议分3个区8 1.home分区 100G----->/home9 2.交换分区 8G10 3.根分区 30G------>/11 c)软件管理12 centos redhat --->yum rpm13 ub…

Rocketmq面试(六)Rocketmq6种找不到Broker的情况

1.发送消息 Rocketmq Client在发送消息的时候&#xff0c;会根据topic首先从本地缓存获取Broker&#xff0c;获取Broker&#xff0c;如果获取不到&#xff0c;就会到Name Server集群中获取 2.消息偏移量 客户端获取消息偏移量&#xff08;Consume Offset&#xff09;的时候&…

SOFA Weekly|可信基础设施技术分论坛、Layotto 社区会议回顾与预告、社区本周贡献...

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展 欢迎留言互动&#xff5e; SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&am…

系统架构设计师笔记第10期:访问控制和数字签名

访问控制技术 访问控制是计算机系统中一种重要的安全机制&#xff0c;用于管理和控制用户对系统资源的访问权限。它的主要目标是确保只有经过授权的用户或实体能够访问资源&#xff0c;从而保护系统的安全性和保密性。访问控制技术的原理和主要技术如下&#xff1a; 原理&…

PureComponent和Component的区别和底层处理机制

PureComponent和Component都是React中的组件类&#xff0c;但它们在实现细节和使用上有些差别。 Component是React中定义组件的基类&#xff0c;它的shouldComponentUpdate方法默认返回true&#xff0c;也就是说&#xff0c;每次调用setState或forceUpdate方法都会引发组件重新…

javassist 入门以及dubbo中的使用案例

javassite 入门 概述原理 简单的demo记录方法执行的时间带参数和返回值javassite 占位符 dubbo中的使用代理工厂 JavassistProxyFactory代理类 org.apache.dubbo.common.bytecode.Proxyorg.apache.dubbo.rpc.proxy.InvokerInvocationHandler创建类的工具类 ClassGenerator 概述…

x宝评论抓取

#某宝评论接口sign参数逆向 1.接口速览 多次请求发现&#xff0c;t为时间戳&#xff0c;sign为加密参数&#xff0c;盲猜和data、t有关&#xff0c;sign为32位&#xff0c;盲猜是字符串的32位的MD5 2.搜索js代码 这里为搜索的是appKey&#xff0c;就找到了sign&#xff0c;然…

知识变现海哥:值得反复思考的20句知识变现精华

哈喽&#xff0c;大家好&#xff0c;我是海哥&#xff0c;知识付费变现创业教练&#xff0c;教育公司培训总监&#xff0c;从事知识付费变现咨询10年&#xff0c;已助力3000人实现知识付费变现。 拉开人与人差距的有时不是转业和努力&#xff0c;而是一开始的认知和思维。 从…