昨天写了一篇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.交通灯
①将板子如图连好在这里插入图片描述
②敲入以下代码
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 口电平值赋给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

利用蜂鸣器播放音乐
①如图连接好在这里插入图片描述
②将以下代码敲入
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,

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐