完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近开始准备考取Arduino的官方认证,但之前没有系统地学习,因此打算好好整理一下,一方面当作考试复习,另一方面给想学习Arduino的朋友们一些帮助
在学习之前,建议大家先在Arduino中文社区看一下使用教程,里面有很多答疑帖,还有很多干货,值得一看: 编程语法 1. Arduino使用的编程语言 Arduino使用C/C++编写程序,虽然C++兼容C语言,但这是两种语言:
通常我们说的Arduino语言,是指Arduino核心库文件提供的各种应用程序编程接口(Application Programming Interface,简称API)的集合。这些API是对更底层的单片机支持库进行二次封装所形成的。例如,使用AVR单片机的Arduino的核心库是对AVR-Libc(基于GCC的AVR支持库)的二次封装。2. Arduino程序基本结构 按照图示方法即可新建一个Arduino程序的文件: void setup() { // put your setup code here, to run once:}void loop() { // put your main code here, to run repeatedly:} 如果你使用过C/C++语言,你会发现Arduino的程序结构与传统的C/C++结构的不同之处就在于Arduino程序中没有main函数 准确说,其实并不是Arduino没有main函数,而是main函数的定义隐藏在了Arduino的核心库文件中。Arduino开发一般不直接操作main函数,而是使用Setup和loop这个两个函数 换句话说,Arduino程序基本结构由setup() 和loop() 两个函数组成 setup()Arduino控制器通电或复位后,即会开始执行setup() 函数中的程序,该部分只会执行一次,相当于JAVA中的构造方法。 通常我们会在setup() 函数中完成Arduino的初始化设置,如配置I/O口状态,初始化串口等操作。 loop()在setup() 函数中的程序执行完后,Arduino会接着执行loop() 函数中的程序。而loop()函数是一个死循环,其中的程序会不断的重复运行。 通常我们会在loop() 函数中完成程序的主要功能,如驱动各种模块,采集数据等。 3. Arduino中的Hello World 按照图示方法打开Blink程序: // the setup function runs once when you press reset or power the boardvoid setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT);}// the loop function runs over and over again forevervoid loop() { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second} 在Arduino中,平时的Hello World叫做Blink,能用来判断开发环境是否可用,程序的效果是使开发板上13号引脚的LED灯反复点亮又熄灭 需要注意的是,新版IDE自带例程使用的是宏LED_BUILTIN,在大部分arduino开发板上,这个宏定义对应的是13号引脚: #define LED_BUILTIN 13 以上是基本的语法,但要真正地上手Arduino,还需要学会使用Arduino的编辑器 Arduino IDE 下面是Arduino中文社区给的IDE下载方法 https://www.arduino.cn/thread-5838-1-1.html 1. 配置Arduino IDE 下面我用Arduino UNO开发板举例(某宝买的,十几块就能买到): 在Tools的Board里选择相对应的开发板: 接着插上开发板,并选择串口,选择串口前,我们先查看开发板对应的串口: 在命令行输出mode,可以看到COM6,因此Port选择COM6: 2. 板型管理器与库管理器 板型管理器如果你要添加特殊型号的Arduino控制板,可以进入Boards Manager: 可以在搜索区搜索,或者在下面寻找: 选中并点击 Install 按键,即可安装并使用相应的开发板 库管理器库管理器也在Tools里: 库管理器的使用方法同板型管理器: 另一种方法是通过github找到相应的库,然后下载解压到本地librarie文件夹里: 3. 将程序上传至开发板 以Blink程序为例,程序写好后,点击第二行第一个图标: 编译成功后: 如果有语法错误: IDE的底部会给出报错信息,根据提示调试程序即可,编译无误后,即可上传程序: 此时Arduino Uno上标有TX、RX的两个LED会快速闪烁,这说明你的程序正在被写入Arduino Uno中 等待一会后,出现这样就算成功上传了:
1. 数字I/O的使用 Arduino上每一个带有数字编号的引脚,都是数字引脚,包括写有“A”编号的模拟输入引脚。使用这些引脚,可以完成输入输出数字信号的功能。 数字信号是以0、1表示的电平不连续变化的信号,也就是以二进制的形式表示的信号。 在Arduino中数字信号通过高低电平来表示,高电平则为数字信号1,低电平则为数字信号0 在使用输入或输出功能前,需要先通过pinMode() 函数配置引脚的模式为输入模式或输出模式: pinMode(pin, mode);
即是把LED_BUILTIN(13号)引脚配置为输出模式 配置成输出模式后,还需要使用digitalWrite() 让其输出高电平或者是低电平。其调用形式为: digitalWrite(pin, value);
在Arduino控制器中,编号前带有“A”的引脚是模拟输入引脚。Arduino可以读取这些引脚上输入的模拟值,即读取引脚上输入的电压大小 生活中接触到的大多数信号都是模拟信号,如声音、温度的变化等。模拟信号是用连续变化的物理量表示的信息,信号随时间作连续变化。在Arduino UNO上,可以接受0~5V的模拟信号 模拟输入引脚是带有ADC(Analog-to-Digital Converter,模数转换器)功能的引脚。它可以将外部输入的模拟信号转换为芯片运算时可以识别的数字信号,从而实现读入模拟值的功能 Arduino 模拟输入功能有10位精度,即可以将0~5V的电压信号转换为0~1023的整数形式表示,模拟输入功能需要使用analogRead() 函数: int value = analogRead(pin)
analogWrite(pin,value)
当使用analogWrite() 函数时,指定引脚会通过高低电平的不断转换输出一个周期固定的方波,通过改变高低电平在每个周期中所占的比例(占空比),而得到近似输出不同的电压的效果。 需要注意的是,这里仅仅是得到了近似模拟值输出的效果,如果要输出真正的模拟值,还需要加上外围滤波电路。 在analogWrite() 和analogRead() 函数内部,已经完成了引脚的初始化,因此不用在Setup() 函数中进行初始化操作 3. 串口的使用 Arduino与计算机通信最常用的方式就是串口通信 我们使用USB线连接Arduino Uno与计算机时,Arduino Uno会在计算机上虚拟出一个串口设备,此时两者之间便建立了串口连接。通过此连接,Arduino Uno便可与计算机互传数据。 使用串口与计算机通信,需要先使用Serial.begin() 初始化Arduino的串口通信功能: Serial.begin(speed);
300、600、1200、2400、4800、9600、14400、19200、28800、38400、57600、115200。 波特率越大,说明串口通信的速率越快。 3.1串口输出 串口初始化完成后,我们便可以使用Serial.print() 或Serial.println() 向计算机发送信息了: Serial.println(val); 在Blink程序的loop里加入: Serial.println("Hellow World"); 上传程序后打开串口监视器: 如下图所示: 串口监视器是Arduino IDE自带的一个小工具,可以查看到串口传来的信息,也可以向连接的设备发送信息。需要注意的是,在串口监视器右下角,有一个波特率设置下拉框,波特率设置必须和烧入程序中设置的一致,才能正常收发数据 3.2串口输入 除了输出,串口同样可以接收由计算机输出的数据。接收串口数据需要使用Serial.read()函数: Serial.read(); 调用该语句,每次都会返回一个字节的数据,这个返回值便是当前串口读取到的数据 在Blink程序的loop里添加如下语句: char ch=Serial.read();Serial.println(ch); 上传程序并打开串口监视器: 可以看到串口输出了一个 “⸮” ,这是因为串口缓冲区中没有可读数据造成的。当缓冲区中没有可读数据时,read()函数会返回int型值-1,而int型-1对应的char型数据便是该乱码 “⸮” 在使用串口时,Arduino Uno会在SRAM中开辟一段大小为256 bytes的空间,串口接收到的数据都会被暂时存放进这个空间中,这个存储空间,我们称之为缓冲区。当你调用Serial.read()语句时,Arduino便会从缓冲区取出一个字节的数据 因此使用串口读取数据时,需要搭配Serial.available() 语句使用: Serial.available();
void loop() { if(Serial.available()>0){ char ch=Serial.read(); Serial.print(ch); }} 程序上传后,便没有乱码了: 下面我们输入"Hello World",点击右边的send: 效果如下: 在串口监视器右下角有两个选项,一个是设置结束符,一个是设置波特率。如果你设置了结束符,则在你最后发送完数据后,串口监视器会自动发送一组你设定的结束符,如回车符和换行符: 另外,当串口通信时,Arduino控制器上的标有RX、TX的两LED灯会闪烁提示:
while (!Serial) {} 这是在等待串口监视器开启,开启串口监视器后,!Serial将为假,即会运行该while循环后的语句 利用串口通信功能,我们可以使用计算机来控制Arduino执行特定的操作 电子元器件 在学习Arduino的过程中,会使用到许多电子元件及模块。通过搭配不同的元件和模块,我们便可以制作出许多的作品 另外,同样的元件、模块,可能会有不同的型号、不同的封装形式(即不同的外观),但一般情况下原理和使用方法都是相同的 1. 面包板 面包板是专为我们进行各种电子实验所设计的工具。我们可以根据自己的想法在上面搭建各种电路。众多电子元器件都可根据需要,随意插入或拔出,免去了焊接,节省了电路的组装时间。同时,免焊接使得元件都可以重复使用,避免了浪费和多次购买元件: 使用之前,需要清楚的是:
电阻即对电流起阻碍作用的元件 2.1限流电阻 一般LED的最大能承受的电流为25mA,如若直接将LED连接到电路中,当其点亮时,如果电流过大,很容易烧毁。 我们在LED一端串联了一个电阻,这样做可以控制流过LED的电流,防止损坏LED。这个电阻我们称之为限流电阻: 2.2下拉电阻 在开发板的2号引脚到GND之前,连接了一个电阻: 如果没有该电阻,当未按下按键时,2号引脚会一直处于 悬空 状态,此时使用digitalRead() 读取2号引脚状态,会得到一个不稳定的值(可能是高,也可能是低) 添加这个电阻到地就是为了稳定引脚的电平,当引脚悬空时,就会识别为低电平。这种将某节点通过电阻接地的做法,叫做下拉,这个电阻叫做下拉电阻。 2.3上拉电阻 同下拉电阻一样,可以稳定I/O口电平,不同的是电阻连接到VCC,将引脚稳定在高电位。这种电阻叫做上拉电阻 3. 电容 电容可以理解为存储电能的容器,下图都是电容: 电容也有很多作用,如去耦、滤波、储能等 4. 二极管 二极管在电路中使用广泛,作用众多,如整流、稳压、电路保护等: 4.1LED LED即发光二极管,可以发光的二极管: LED有正负两极,不能接反:
5. 三极管 三极管是能起放大、开关等作用的元件: 有pnp和npn 两种类型的三极管 内部构造有三级:
传感器是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。 通常根据其基本感知功能分为热敏元件、光敏元件、气敏元件、力敏元件、磁敏元件、湿敏元件、声敏元件、放射线敏感元件、色敏元件和味敏元件等十大类 下图分别是seeed的光敏元件和热敏元件: 7. 执行器 执行器是自动控制系统中必不可少的一个重要组成部分。它的作用是接受控制器送来的控制信号,改变被控介质的大小,从而将被控变量维持在所要求的数值上或一定的范围内 下图分别是seeed的蜂鸣器和红外发射器: 5. ARDUINO基础认证演示题 第一题比较简单,使用过的朋友应该都能看出来选millis(),下面是millis()的文档: https://www.arduino.cc/en/pmwiki.php?n=Reference/millis 这题只有蜂鸣器有"自动执行"的功能,按钮是人为控制的,因此选压电蜂鸣器 这题也比较简单,让三个支路的电阻相同即可,算一下便可知道R1=7,R2=8.5 先看看开关的结构: 因此左边两个答案可以排除再看看右边两个LED引脚,一定要记住LED灯的短脚为负极,长脚为正极 因此这题选右下角的: 这一题需要仔细查看,题目说的是打开LED灯,看一下代码不难看出if条件成立时开灯 1跟high是等价的 ,因此按下开关1时,条件成立,灯亮 演示题的题型和考题差不多,演示题都能搞明白后,差不多就可以参加考试,最后祝大家考试顺利! |
|
|
|
只有小组成员才能发言,加入小组>>
2545 浏览 0 评论
1141浏览 2评论
740浏览 1评论
494浏览 0评论
255浏览 0评论
415浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-17 13:56 , Processed in 1.299157 second(s), Total 79, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号