arduino入门经典.docx
- 文档编号:26345485
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:57
- 大小:7.07MB
arduino入门经典.docx
《arduino入门经典.docx》由会员分享,可在线阅读,更多相关《arduino入门经典.docx(57页珍藏版)》请在冰豆网上搜索。
arduino入门经典
一、制作第一个电路单led闪烁·····························································································2
二、helloworld经典例程··········································································································9
三、Arduino基础······················································································································10
四、Arduino的数字输出·········································································································11
五、Arduino的串口输入·······································································································14
六、Arduino的串口输出·········································································································16
七、Arduino的模拟输入·········································································································18
八、Arduino的模拟输出·········································································································20
九、6LED灯闪烁实验··············································································································23
十、蜂鸣器实验························································································································29
十一、1位数码管实验·············································································································32
十二、按键实验························································································································34
十三、光控LED实验··············································································································37
十四、1602实验······················································································································39
十五、lm35温度传感器实验··································································································42
十六、舵机控制实验················································································································45
十七、红外遥控接收实验········································································································48
十八、红外遥控控制舵机实验·······························································································50
十九、LED点阵实验················································································································52
二十、74HC595实验···············································································································54
ASCII表·····································································································································57
ATMEGA328引脚图··············································································································58
一、制作第一个电路单led闪烁
做任何一个电路之前,一定要先了解电路中原件的参数,其工作电压,工作电流等。
第一个实验咱们用到的LED从网上查找资料得知,其工作电压一般为1.5-2.0V,工作电流一般为10-20ma,反向击穿电压为5V。
控制板逻辑电路供电为5V。
根据以上参数假设LED工作电压选用1.7,工作电流选用15ma,限流电阻=(总电压-LED电压)/电流,所以限流电阻=(5-1.7)/0.015=220Ω。
首先需要从arduino官方网站下载其编译软件,地址是http:
//arduino.cc/en/Main/Software
笔者使用的平台为win732位,如果大家使用的是其他平台,按照对应的下载就可以。
下载回来的软件包解压缩后的目录结构如下图,arduino.exe是程序的启动文件,driver目录是控制板usb芯片驱动,usb接上控制板后如果要寻找驱动,把目录指定到这里就可以。
本次实验用到的器材为一个面包板,一个LED,一个1k的电阻,两根导线,如下图:
本次实验的连接方法如下图,LED两个针脚有一长一短,短的是连接GND,长的是连接正极。
在LED的长引脚前,需要添加一个220Ω的限流电阻。
连接数字5号接口。
实物连接如下图:
通过面包板把个个电子器件连接好以后,接上USB线,设置好控制板型号、端口号。
程序语言先不详解,大家先照猫画虎对着抄,后面通过各个实验,将对不同命令进行详解。
编写程序前,先需要选择控制板的型号。
如下图:
控制板型号选择好后,选择串口位置,笔者电脑的串口为COM15:
串口具体是多少号可以到设备管理中进行查看,如下图:
先把程序复制进去:
intledPin=5;//设定控制LED的数字IO脚
voidsetup(){
pinMode(ledPin,OUTPUT);//设定数字IO口的模式,OUTPUT为输出
}
voidloop(){
digitalWrite(ledPin,HIGH);//设定PIN5脚为HIGH=5V左右
delay(2000);//设定延时时间,2000=2秒
digitalWrite(ledPin,LOW);//设定PIN5脚为LOW=0V
delay(2000);//设定延时时间,2000=2秒
}
图中int;voidsetup等褐色的文字是系统命令,OUTPUT等蓝色文字是命令的功能开关,黑色文字是变量。
程序写好以后点击编译按钮进行编译。
编译完成后会显示出来编译后的文件大小,本次编译出来的程序大小为1068字节。
然后把编译好的程序下载到arduino控制板上,点击下载按钮。
下载完成后会有提示
本次实验效果如下,闪烁着光芒的灯。
。
。
总结:
int;voidsetup等褐色文字是系统命令,OUTPUT等蓝色文字是系统命令的功能开关,黑色文字是变量。
在"int ledpin=5"中;设置了LED的数字IO脚,ledpin仅仅是5号数字端口自定义出来的名字,变成xxx等都可以。
对于多脚IO操作的程序中,为每一个引脚定义名字是有必要性的,程序复杂后方便功能识别。
二、helloworld经典例程
通过Arduino编译器查看串口数据
最简单的例子:
voidsetup() {
Serial.begin(9600);//打开串口,设置波特率为9600bps
}
voidloop() {
Serial.println(“Helloworld!
”);
delay(1000);
}
如果电路安装正确,按照示例代码运行、上传,然后点击编译器的SerialMonitor按钮,就可以看到SerialMonitor输出Helloworld!
。
三、Arduino基础
在学语言之间,还要做的一个功课就是要明白程序的构架,这个也同样简单,大体可分为几个部分。
1、声明变量及接口名称(intval;intledPin=13;)。
2、setup()——函数在程序开始时使用,可以初始化变量、接口模式、启用库等(例如:
pinMode(ledPin,OUTUPT);)。
3、loop()——在setup()函数之后,即初始化之后,loop()让你的程序循环地被执行。
使用它来运转Arduino。
接下来就开始学习一下几个基本函数。
1、pinMode(接口名称,OUTPUT或INPUT)将——接口定义为输入或输出接口,用在setup()函数里。
2、digitalWrite(接口名称,HIGH或LOW)——将数字接口值至高或低。
3、digitalRead(接口名称)——读出数字接口的值。
4、analogWrite(接口名称,数值)——给一个接口写入模拟值(PWM波)。
对于ATmega168芯片的Arduino(包括Mini或BT),该函数可以工作于3,5,6,9,10和11号接口。
老的ATmega8芯片的USB和serialArduino仅仅支持9,10和11号接口。
5、analogRead(接口名称)——从指定的模拟接口读取值,Arduino对该模拟值进行10-bit的数字转换,这个方法将输入的0-5电压值转换为0到1023间的整数值。
6、delay()——延时一段时间,delay(1000)为一秒。
7、Serial.begin(波特率)——设置串行每秒传输数据的速率(波特率)。
在同计算机通讯时,使用下面这些值:
300,1200,2400,4800,9600,14400,19200,28800,38400,57600或115200。
你也可以在任何时候使用其它的值,比如,与0号或1号插口通信就要求特殊的波特率。
用在setup()函数里
8、Serial.read()——读取持续输入的数据。
9、Serial.print(数据,数据的进制)——从串行端口输出数据。
Serial.print(数据)默认为十进制等于Serial.print(数据,DEC)。
10、Serial.println(数据,数据的进制)——从串行端口输出数据,跟随一个回车和一个换行符。
这个函数所取得的值与Serial.print()一样。
以上几个函数是常用基本函数,还有很多以后会慢慢学习
四、Arduino的数字输出
Arduino的数字I/O被分成两个部分,其中每个部分都包含有6个可用的I/O管脚,即管脚2到管脚7和管脚8到管脚13。
除了管脚13上接了一个1K的电阻之外,其他各个管脚都直接连接到ATmega上。
我们可以利用一个6位的数字跑马灯,来对Arduino数字I/O的输出功能进行验证,以下是相应的原理图:
电路中在每个I/O管脚上加的那个1K电阻被称为限流电阻,由于发光二极管在电路中没有等效电阻值,使用限流电阻可以使元件上通过的电流不至于过大,能够起到保护的作用。
该工程对应的代码为:
intstartPin=2;
intendPin=7;
intindex=0;
voidsetup(){
for(inti=startPin;i<=endPin;i++){
pinMode(i,OUTPUT);
}
}
voidloop(){
for(inti=startPin;i<=endPin;i++){
digitalWrite(i,LOW);
}
digitalWrite(startPin+index,HIGH);
index=(index+1)%(endPin-startPin+1);
delay(100);
}
下载并运行该工程,连接在Arduino数字I/O管脚2到管脚7上的发光二极管会依次点亮0.1秒,然后再熄灭:
这个实验可以用来验证数字I/O输出的正确性。
Arduino上一共有十二个数字I/O管脚,我们可以用同样的办法验证其他六个管脚的正确性,而这只需要对上述工程的第一行做相应的修改就可以了:
五、Arduino的串口输入
串行通信是在实现在PC机与微控制器进行交互的最简单的办法。
之前的PC机上一般都配有标准的RS-232或者RS-422接口来实现串行通信,但现在这种情况已经发生了一些改变,大家更倾向于使用USB这样一种更快速但同时也更加复杂的方式来实现串行通信。
尽管在有些计算机上现在已经找不到RS-232或者RS-422接口了,但我们仍可以通过USB/串口或者PCMCIA/串口这样的转换器,在这些设备上得到传统的串口。
通过串口连接的Arduino在交互式设计中能够为PC机提供一种全新的交互方式,比如用PC机控制一些之前看来非常复杂的事情,像声音和视频等。
很多场合中都要求Arduino能够通过串口接收来自于PC机的命令,并完成相应的功能,这可以通过Arduino语言中提供的Serial.read()函数来实现。
在这一实验中我们同样不需要任何额外的电路,而只需要用串口线将Arduino和PC机连起来就可以了,相应的Arduino工程代码为:
intledPin=13;
intval;
voidsetup(){
pinMode(ledPin,OUTPUT);
Serial.begin(9600);
}
voidloop(){
val=Serial.read();
if(-1!
=val){
if('H'==val){
digitalWrite(ledPin,HIGH);
delay(500);
digitalWrite(ledPin,LOW);
}
}
}
把工程下载到Arduino模块中之后,在Arduino集成开发环境中打开串口监视器并将波特率设置为9600,然后向Arduino模块发送字符H,如下图所示:
该工程运行起来之后会不断调用Serial.read()函数从串口获得数据。
Arduino语言提供的这个函数是不阻塞的,也就是说不论串口上是否真的有数据到达,该函数都会立即返回。
Serial.read()函数每次只读取一个字节的数据,当串口上有数据到达的时候,该函数的返回值为到达的数据中第一个字符的ASCII码;当串口上没有数据到达的时候,该函数的返回值则为-1。
Arduino语言的参考手册中没有对Serial.read()函数做过多的说明,我的一个疑问是如果PC机一次发送的数据太多,Arduino是否提供相应的串口缓存功能来保证数据不会丢失?
Arduino语言中提供的另外一个函数Serial.available()或许能够帮助我们用实验来进行验证:
intledPin=13;
intval;
voidsetup(){
pinMode(ledPin,OUTPUT);
Serial.begin(9600);
}
voidloop(){
val=Serial.read();
if(-1!
=val){
if('H'==val){
digitalWrite(ledPin,HIGH);
delay(500);
digitalWrite(ledPin,LOW);
Serial.print("Available:
");
Serial.println(Serial.available(),DEC);
}
}
}
函数Serial.available()的功能是返回串口缓冲区中当前剩余的字符个数,按照Arduino提供的该函数的说明,串口缓冲区中最多能缓冲128个字节。
我们可以一次给Arduino模块发送多个字符,来验证这一功能:
在这一实验中,每当Arduino成功收到一个字符H,连接在数字I/O端口管脚13上的发光二极管就会闪烁一次:
六、Arduino的串口输出
在许多实际应用场合中我们会要求在Arduino和其它设备之间实现相互通信,而最常见通常也是最简单的办法就是使用串行通信。
在串行通信中,两个设备之间一个接一个地来回发送数字脉冲,它们之间必须严格遵循相应的协议以保证通信的正确性。
在PC机上上最常见的串行通信协议是RS-232串行协议,而在各种微控制器(单片机)上采用的则是TTL串行协议。
由于这两者的电平有很大的不同,因此在实现PC机和微控制器的通信时,必须进行相应的转换。
完成RS-232电平和TTL电平之间的转换一般采用专用芯片,如MAX232等,但在Arduino上是用相应的电平转换电路来完成的。
根据Arduino的原理图我们不难看出,ATmega的RX和TX引脚一方面直接接到了数字I/O端口的0号和1号管脚,另一方面又通过电平转换电路接到了串口的母头上。
因此,当我们需要用Arduino与PC机通信时,可以用串口线将两者连接起来;当我们需要用Arduino与微控制器(如另一块Arduino)通信时,则可以用数字I/O端口的0号和1号管脚。
串行通信的难点在于参数的设置,如波特率、数据位、停止位等,在Arduino语言可以使用Serial.begin()函数来简化这一任务。
为了实现数据的发送,Arduino则提供了Serial.print()和Serial.println()两个函数,它们的区别在于后者会在请求发送的数据后面加上换行符,以提高输出结果的可读性。
在这一实验中没有用到额外的电路,我们只需要用串口线将Arduino和PC机连起来就可以了,相应的代码为:
voidsetup(){
Serial.begin(9600);
}
voidloop(){
Serial.println("HelloWorld!
");
delay(1000);
}
在将工程下载到Arduino模块中之后,在Arduino集成开发环境的工具栏中单击“SerialMonitor”控制,打开串口监视器:
接着将波特率设置为9600,即保持与工程中的设置相一致:
如果一切正常,此时我们就可以在Arduino集成开发环境的Console窗口中看到串口上输出的数据了:
为了检查串口上是否有数据发送,一个比较简单的办法是在数字I/O端口的1号管脚(TX)和5V电源之间接一个发光二极管,如下面的原理图所示:
这样一旦Arduino在通过串口向PC机发送数据时,相应的发光二极管就会闪烁,实际应用中这是一个非常方便的调试手段;
七、Arduino的模拟输入
从指定的模拟引脚读取值。
Arduino主板有6个通道(Mini和Nano有8个,Mega有16个),10位AD(模数)转换器。
这意味着输入电压0-5伏对应0-1023的整数值。
这就是说读取精度为:
5伏/1024个单位,约等于每个单位0.049伏(4.9毫伏)。
输入范围和进度可以通过analogReference()进行修改。
模拟输入的读取周期为100微秒(0.0001秒),所以最大读取速度为每秒10,000次。
pin:
读取的模拟输入引脚号(大多数主板是A0-A5,Mini和Nano是A0-A7,Mega是A0-A15)
Returns返回值
int(0to1023)
整数型 int(0到1023)
如果模拟输入引脚没有连接到任何地方,analogRead()的返回值也会因为某些因素而波动(如其他模拟输入,你的手与主板靠的太近)
intanalogPin=A5;
intval=0;
voidsetup(){
Serial.begin(9600);
}
voidloop(){
val=analogRead(analogPin);
Serial.println(val);
Delay(1000);
}
八、Arduino的模拟输出
脉冲宽度调制或PWM,是通过数字均值获得模拟结果的技术。
数字控制被用来创建一个方波,信号在开和关之间切换。
这种开关模式通过改变“开”时间段和“关”时间段的比值完全模拟从开(5伏特)和关(0伏特)之间的电压。
“开时间“的周期称为脉冲宽度。
为了得到不同的模拟值,你可以更改,或调节脉冲宽度。
如果你重复这种开关模式速度足够快,其结果是一个介于0和5V之间的稳定电压用以控制LED的亮度。
下图中,绿色线表示一个固定的时间期限。
此持续时间或周期是PWM的频率的倒数。
换言之,Arduino的PWM频率约为500Hz,每个绿线之间表示2毫秒。
一个analogWrite()的调用区间为0-255,例如analogWrite(255)需要100%占空比(常开),和analogWrite(127)是50%占空比(上一半的时间)。
一旦你
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- arduino 入门 经典