欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

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

程序员文章站 2022-03-03 19:01:08
昨天写了一篇RFID开发,但是视频课程太难,只能从更基础的Arduino Uno R3 开发进行学习一起进行Arduino Uno R3的学习吧,我之前从未接触硬件第一步Arduino驱动的安装,以及环境的搭建此处跳转到Arduino论坛,有详细步骤第二步操刀干1.第一行代码......

昨天写了一篇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;//定义变量val

int ledpin=13;//定义数字接口13

void setup()

{

  	Serial.begin(9600);//设置波特率为9600,这里要跟软件设置相一致。当接入特定设备(如:蓝牙)时,我们也要跟其他设备的波特率达到一致。
	pinMode(ledpin,OUTPUT);//设置数字13 口为输出接口,Arduino 上我们用到的I/O 口都要进行类似这样的定义。
}

void loop()

{

  	val=Serial.read();//读取PC 机发送给Arduino 的指令或字符,并将该指令或字符赋给val

  	if(val=='R')//判断接收到的指令或字符是否是“R”。

  	{ 
		//如果接收到的是“R”字符

    		digitalWrite(ledpin,HIGH);//点亮数字13 口LED。

    		delay(500);//延时500ms

    		digitalWrite(ledpin,LOW);//熄灭数字13 口LED

    		delay(500);//延时500ms

    		Serial.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.交通灯

①将板子如图连好Arduino Uno R3开发(1)——据说通过蜂鸣器可以播放《鸡你太美》?
②敲入以下代码
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灯点亮、熄灭

①按照下图将板子连好

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

②将下述代码敲入
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 口电平值赋给val
	if(val==LOW)//检测按键是否按下,按键按下时小灯亮起
	{ 
		digitalWrite(ledpin,LOW);}
	else{ 
		digitalWrite(ledpin,HIGH);}
}
③解释说明

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


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

利用蜂鸣器播放音乐

①如图连接好Arduino Uno R3开发(1)——据说通过蜂鸣器可以播放《鸡你太美》?
②将以下代码敲入
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; //蜂鸣器的pin
 
 void 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; //蜂鸣器的pin
 
 void 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,

本文地址:https://blog.csdn.net/getture/article/details/107928953