昨天写了一篇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,