Arduino uno的系列教程目录
预告篇:Arduino uno的系列教程之教程食用指南 文章链接
Arduino Uno R3开发板系列学习教程(第0章:绪论) 文章链接
Arduino Uno R3开发板系列学习教程(第1章:数字信号) 本文
···
···
对于零基础的同学,建议按顺序学习本系列教程,因为本系列教程教学为连续型教学
本篇学习如果出现无法正常烧录的情况,不要惊慌,我会在下一篇文章进行说明解释
Arduino IDE 与 Platform IO的编程语言均为 C++ ,C语言同样适用
环境配置和软件下载在上一篇文章中
文章链接
红色箭头标识的为两个极为常用的按键,一般写程序都会用到
蓝色标注的是 Arduino 的程序框架,需要大家清楚的记住它们各自的含义
一般板子只要接入电脑,都会自动下载驱动,并且Arduino IDE也会自动更新驱动并连接,所以大家一般不需要做什么操作。如果有同学无法自动连接,那么需要手动连接,如下:
如果上方小框是这个,那就无需进行设置
如果没有,鼠标右击此电脑,选择展示更多选项,选择管理
点击设备管理器,点击端口,CH340的那个端口就是开发板连接的端口(每个人可能不一样,比如我的是 COM 5)
回到 IDE点击工具选择开发板,找到 Arduino Uno ,点击选择
然后回到主界面,点击这个小框选择刚才的那个端口就好了
首先打开VS code
点击 new project
第一个选项自己起个名字(要符合命名规则),然后第二个选项点击输入Arduino Uno,第三个为默认,选择 Finish
第一次创建会很慢,如果长时间不行,建议重启电脑并使用手机热点再做尝试
选择 “是”
找到 main.cpp 文件 , 并点击
有些同学可能和我界面一样,也有可能不一样(但和IDE的界面一样),都无所谓,只是我的模板给我先定义了一个函数
具体功能如下图:
C++是高级语言,机器只能读懂低级语言(也就是机器语言),而调试的作用就是查错和将高级语言翻译为低级语言,所以建议先调试找错,无误后在上传
平时我们要养成保存的好习惯(快捷指令为 ctrl + s),防止遇到突发情况出现代码丢失
使用到了函数 “ pinMode(pin,Mode); ”
一般只有数字信号的处理需要用到配置引脚模式
pinMode(pin,Mode);
//其中 pin 为引脚 ==> 指数字信号的引脚
/*
Mode为模式,其中包括三大模式为 :
⇒ OUTPUT (输出)
⇒ INPUT (输入)
⇒ INPUT_PULLUP (输入上拉模式)
*/
//后续我会一一带大家认识这些模式
使用到了函数 “ digitalWrite(pin,val); ”
需要配合配置引脚模式的函数一起使用
,并且需要设置为输出模式,它的作用是将某个引脚设置为高电平或者低电平
digitalWrite 可以放在loop中也可以放在setup中,只是循环使用,和使用一次的区别
void setup() {
// put your setup code here, to run once:
pinMode(pin,OUTPUT);//一定要配置引脚模式
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(pin, val);
//其中 val 为 value 为数字电平,包括:
/*
⇒ HIGH (高电平)
⇒ LOW (低电平)
*/
}
使用到了函数 “ digitalRead(val); ”
需要配合配置引脚模式的函数一起使用
,并且需要设置为输入模式,它的作用是读取引某个引脚的输出模式并返回
同理 digitalRead 可以放在loop中也可以放在setup中,只是循环使用,和使用一次的区别
void setup() {
// put your setup code here, to run once:
pinMode(pin,INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalRead(pin);
}
int A;
void setup() {
pinMode(13,INPUT);
//假设需要读取13号引脚的模式
}
void loop() {
A = digitalRead(13);
//此时 A 有两种结果 HIGH or LOW
//即 A == HIGH (或者 LOW )
//digitalRead会返回这两个值的其中一个
}
定义一个布尔型变量 ⇒ A
boolean A; //或者 bool A;
// A会等于 1 或者 0 (真 或 假)
&& ⇒ <且>
|| ⇒ <或>
! ⇒ <非>
并且他们有几个很重要的性质:
1 && 1 = 1 1 && 0 = 0 0 && 0 = 0
1 || 1 = 1 1 || 0 = 1 0 || 0 = 0
!1 = 0 !0 = 1
//if语句的基本格式
//其中条件为一个布尔量(真或假)
if(条件1)
{
语句1;
}
else if(条件2)
{
语句2;
}
else
{
语句3;
}
if语句是可以嵌套的,如上题答案所示,并且 else if 可以有多次条件,例如:
if(条件1)
{
语句1;
}
else if(条件2)
{
语句2;
}
else if(条件3)
{
语句3;
}
同时除了 if 其他都是可有可无的,但其他只要出现,必须要有 if;
else会与上方最近的并且没有配队的 if 进行匹配;
并且只要前方有一个条件满足,后面的条件会自动跳过;
if语句还可以这么写:
if(条件1)
语句1;
else if(条件2)
语句2;
else
语句3;
但前提是只能运行一个分号结尾的语句,嵌套函数除外
例如:
if(条件1)
if(条件11)
{
语句11;
语句12;
}
else(条件2)
语句2;
“ = ” 为赋值运算符,意思是将右侧某值赋值给左侧变量
“ == ”为数学中相等的意思
关系运算符有:
⇒ 等于( == )
⇒ 大于等于( >= )
⇒ 小于等于( <= )
⇒ 大于( > )
⇒ 小于( < )
int A = 1, B = 2, C;
C = B;//C = 2
C = A == B;//C = 0(假)
C = A <= B;//C = 1(真)
红色一般指电源轨(上方有标正负极),红色黄色部分是指连通的轨道(内部就是导电的金属片)
面包板本身无自带电源
可以配合面包板进行布线,可以免除焊接的麻烦
并且包含两种头,上图为公头,下图为母头,而上图就是公对公的杜邦线
首先必须要知道怎么读电阻上的色环,下图为对照表
下图左侧黄色的为碳膜电阻,右侧蓝色为金属膜电阻(价格较贵)
注:要注意LED的额定电压、额定电流和功率,不同种类、不同颜色的LED均不同,长时间处于不正常的电路中会加速电子元器件的老化和损坏,下图公式要会使用
学了以上知识就可以尝试点灯了,这里的灯指LED小灯珠
可以选择连接一个红色LED,也可以不连接,因为13号引脚有一个串联的LED,但如果需要连接一个小灯珠一定要串联一个 220 Ω 的电阻,因为Arduino Uno开发板的高电平为 5V ,而红色LED的额定电压为 1.8 - 2.4 V。
没有 220Ω 电阻的同学们,也可以不连接,因为 LED 小灯珠很便宜,并且容易更换
如上图连接好后,让我们开始写代码吧
代码示例:
void setup() {
// put your setup code here, to run once:
pinMode(13, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(13, HIGH);
}
也可以这么实现,都会使LED常亮
void setup() {
// put your setup code here, to run once:
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
}
void loop() {
// put your main code here, to run repeatedly:
}
点击调试,没有报错后,点击上传,LED就亮起来了,如果大家配置的是13号引脚,可以看到13号引脚旁边的 LED 也正常亮了起来。
这个与13号引脚串联着的LED是开发板出厂测试用的
实现原理相同,只是多配置几个引脚就好了,大家可以自己尝试
想要实现闪烁,只需让LED亮与灭交错连续的进行就好了,可是怎么让LED灭呢?只需再将引脚输出低电平,而低电平为 0V ,两个负极相连不就相当于没有接通电源。
连接如图所示的电路:
代码示例:
void setup() {
// put your setup code here, to run once:
pinMode(13, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(13, HIGH);
digitalWrite(13, LOW);
}
点击调试,没问题后,点击上传
???,道理都懂,为什么不仅没有闪烁,亮度还减少了呢?
这是因为开发板的处理速度非常快,LED实际上实在闪烁,但无可奈何闪烁的太快了,人眼察觉不到这个过程,和帧率类似,帧率越高所呈现的画面就越细致。
那么我们让LED亮一会,等一会,是不是就可以被察觉到了呢,可是又怎么实现呢?
要想实现这个功能,只需引入两个新的函数:
⇒ delay(毫秒);
⇒ delayMicroseconds(微秒);
他们就是传说中的延迟函数,会让代码在此行停留设置好的一段时间。
好,知道了原理让我们开始实践吧。
代码示例:
void setup() {
// put your setup code here, to run once:
pinMode(13, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(13, HIGH);
delay(1000);//延迟1秒
digitalWrite(13, LOW);
delay(1000);
}
点击调试,没问题后,点击上传
此时LED就正常闪烁了,在此基础上大家可以尝试多连接几个LED,做一个流水灯玩玩。
对于使用 IDE 的同学,可以点击菜单栏 “文件” “示例” “01.Basics” “blink”,此时就会进入一个新的窗口,里面是官方给的示例文件,是不是和我们编写的差不多呢。
官方示例代码:
/*
Blink
Turns an LED on for one second, then off for one second, repeatedly.
Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
the correct LED pin independent of which board is used.
If you want to know what pin the on-board LED is connected to on your Arduino
model, check the Technical Specs of your board at:
https://www.arduino.cc/en/Main/Products
modified 8 May 2014
by Scott Fitzgerald
modified 2 Sep 2016
by Arturo Guadalupi
modified 8 Sep 2016
by Colby Newman
This example code is in the public domain.
https://www.arduino.cc/en/Tutorial/BuiltInExamples/Blink
*/
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void 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
}
对于零基础的同学,建议按顺序学习本系列教程,因为本系列教程教学为连续型教学
本篇学习如果出现无法正常烧录的情况,不要惊慌,我会在下一篇文章进行说明解释
本实验学习了数字引脚的输出模式,并且完成了实践,其中比较重要的是如果使用数字信号引脚,一定要提前使用 “ pinMode(pin,Mode); ” 函数配置好要使用的引脚,这样才有控制引脚输出高低电平的功能。
本部分所提函数:
//配置引脚函数
pinMode(pin,OUTPUT);
pinMode(pin, INPUT);
//配置数字引脚功能函数
digitalWrite(pin, val);
//延迟函数
delay();
delayMicroseconds();
感谢大家的观看,如果对本系列文章感兴趣的朋友也请多多点赞分享,收藏关注不迷路,如有疑问可以在文章下方评论或者直接私聊我,我会在第一时间回复大家,大家的支持也是我第一动力。