Arduino Uno R3开发板系列学习教程(第1章:数字信号)


Arduino uno的系列教程目录

预告篇:Arduino uno的系列教程之教程食用指南 文章链接
Arduino Uno R3开发板系列学习教程(第0章:绪论) 文章链接
Arduino Uno R3开发板系列学习教程(第1章:数字信号) 本文

···
···


第 1 章:数字信号(数字IO)

对于零基础的同学,建议按顺序学习本系列教程,因为本系列教程教学为连续型教学

本篇学习如果出现无法正常烧录的情况,不要惊慌,我会在下一篇文章进行说明解释

文章目录

  • 第 1 章:数字信号(数字IO)
  • 一、软件知识之输入输出模式(实验一与实验二)
    • 1、认识初界面
      • (1)Arduino IDE
      • (2)Platform IO
    • 2、配置引脚模式
    • 3、数字信号输出模式
    • 4、数字信号输入模式
    • 5、布尔型变量
    • 6、逻辑运算符
    • 7、条件语句(if语句)
    • 8、赋值运算符与关系运算符
  • 二、硬件知识(实验一)
    • 1、面包板(免焊接)
    • 2、杜邦线
    • 3、电阻
    • 4、LED(发光二极管)
  • 三、实践 ⇒ 实验一:控制LED
    • 1、点亮一个LED
    • 2、点亮多个LED
    • 3、让 LED 闪烁起来
  • 实验一总结


一、软件知识之输入输出模式(实验一与实验二)

Arduino IDE 与 Platform IO的编程语言均为 C++ ,C语言同样适用

1、认识初界面

环境配置和软件下载在上一篇文章中 文章链接

(1)Arduino IDE

红色箭头标识的为两个极为常用的按键,一般写程序都会用到

蓝色标注的是 Arduino 的程序框架,需要大家清楚的记住它们各自的含义

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第1张图片

一般板子只要接入电脑,都会自动下载驱动,并且Arduino IDE也会自动更新驱动并连接,所以大家一般不需要做什么操作。如果有同学无法自动连接,那么需要手动连接,如下:

如果上方小框是这个,那就无需进行设置

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第2张图片

如果没有,鼠标右击此电脑,选择展示更多选项,选择管理

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第3张图片
或者右击开始,选择设备管理器

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第4张图片

点击设备管理器,点击端口,CH340的那个端口就是开发板连接的端口(每个人可能不一样,比如我的是 COM 5)
Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第5张图片

回到 IDE点击工具选择开发板,找到 Arduino Uno ,点击选择

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第6张图片

然后回到主界面,点击这个小框选择刚才的那个端口就好了

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第7张图片

(2)Platform IO

首先打开VS code

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第8张图片

点击 new project

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第9张图片

第一个选项自己起个名字(要符合命名规则),然后第二个选项点击输入Arduino Uno,第三个为默认,选择 Finish

第一次创建会很慢,如果长时间不行,建议重启电脑并使用手机热点再做尝试

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第10张图片

选择 “是”

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第11张图片

找到 main.cpp 文件 , 并点击

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第12张图片

有些同学可能和我界面一样,也有可能不一样(但和IDE的界面一样),都无所谓,只是我的模板给我先定义了一个函数

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第13张图片

具体功能如下图:

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第14张图片

C++是高级语言,机器只能读懂低级语言(也就是机器语言),而调试的作用就是查错和将高级语言翻译为低级语言,所以建议先调试找错,无误后在上传

平时我们要养成保存的好习惯(快捷指令为 ctrl + s),防止遇到突发情况出现代码丢失

2、配置引脚模式

使用到了函数 “ pinMode(pin,Mode); ”

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第15张图片

一般只有数字信号的处理需要用到配置引脚模式

pinMode(pin,Mode);
//其中 pin 为引脚 ==> 指数字信号的引脚
/*
Mode为模式,其中包括三大模式为 :  
	⇒ OUTPUT (输出)
	⇒  INPUT  (输入)
	⇒  INPUT_PULLUP (输入上拉模式)	
*/

//后续我会一一带大家认识这些模式

3、数字信号输出模式

使用到了函数 “ digitalWrite(pin,val); ”

需要配合配置引脚模式的函数一起使用,并且需要设置为输出模式,它的作用是将某个引脚设置为高电平或者低电平

digitalWrite 可以放在loop中也可以放在setup中,只是循环使用,和使用一次的区别

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第16张图片

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  (低电平)
 */
}

4、数字信号输入模式

使用到了函数 “ digitalRead(val); ”

需要配合配置引脚模式的函数一起使用,并且需要设置为输入模式,它的作用是读取引某个引脚的输出模式并返回

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第17张图片

同理 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会返回这两个值的其中一个
}

5、布尔型变量

定义一个布尔型变量 ⇒ A

boolean A; //或者 bool A;
// A会等于 1 或者 0 (真 或 假)

6、逻辑运算符

 &&<> 
 
 ||<>
 
 !<>

并且他们有几个很重要的性质:

1 && 1 = 1		 	 1 && 0 = 0 		 0 && 0 = 0

1 || 1 = 1  		 1 || 0 = 1			 0 || 0 = 0

!1 = 0				 !0 = 1

7、条件语句(if语句)

//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)
	语句1else if(条件2)
	语句2else
	语句3

但前提是只能运行一个分号结尾的语句,嵌套函数除外

例如:

if(条件1if(条件11{
		语句11;
		语句12}
else(条件2)
	语句2

8、赋值运算符与关系运算符

“ = ” 为赋值运算符,意思是将右侧某值赋值给左侧变量
“ == ”为数学中相等的意思

关系运算符有:
⇒ 等于( == )
⇒ 大于等于( >= )
⇒ 小于等于( <= )
⇒ 大于( > )
⇒ 小于( < )

int A = 1, B = 2, C;
C = B;//C = 2
C = A == B;//C = 0(假)
C = A <= B;//C = 1(真)

二、硬件知识(实验一)

1、面包板(免焊接)

红色一般指电源轨(上方有标正负极),红色黄色部分是指连通的轨道(内部就是导电的金属片)

面包板本身无自带电源

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第18张图片
Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第19张图片

2、杜邦线

可以配合面包板进行布线,可以免除焊接的麻烦
Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第20张图片
并且包含两种头,上图为公头,下图为母头,而上图就是公对公的杜邦线

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第21张图片

3、电阻

首先必须要知道怎么读电阻上的色环,下图为对照表

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第22张图片

下图左侧黄色的为碳膜电阻,右侧蓝色为金属膜电阻(价格较贵)

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第23张图片

4、LED(发光二极管)

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第24张图片
需要注意区分LED的正负极,一般 “长正短负”

注:要注意LED的额定电压、额定电流和功率,不同种类、不同颜色的LED均不同,长时间处于不正常的电路中会加速电子元器件的老化和损坏,下图公式要会使用
Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第25张图片

三、实践 ⇒ 实验一:控制LED

学了以上知识就可以尝试点灯了,这里的灯指LED小灯珠

1、点亮一个LED

可以选择连接一个红色LED,也可以不连接,因为13号引脚有一个串联的LED,但如果需要连接一个小灯珠一定要串联一个 220 Ω 的电阻,因为Arduino Uno开发板的高电平为 5V ,而红色LED的额定电压为 1.8 - 2.4 V

没有 220Ω 电阻的同学们,也可以不连接,因为 LED 小灯珠很便宜,并且容易更换

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第26张图片

如上图连接好后,让我们开始写代码吧

代码示例:

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是开发板出厂测试用的

2、点亮多个LED

实现原理相同,只是多配置几个引脚就好了,大家可以自己尝试

3、让 LED 闪烁起来

想要实现闪烁,只需让LED亮与灭交错连续的进行就好了,可是怎么让LED灭呢?只需再将引脚输出低电平,而低电平为 0V ,两个负极相连不就相当于没有接通电源。

连接如图所示的电路:

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第27张图片

代码示例:

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”,此时就会进入一个新的窗口,里面是官方给的示例文件,是不是和我们编写的差不多呢。

Arduino Uno R3开发板系列学习教程(第1章:数字信号)_第28张图片

官方示例代码:

/*
  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();

感谢大家的观看,如果对本系列文章感兴趣的朋友也请多多点赞分享,收藏关注不迷路,如有疑问可以在文章下方评论或者直接私聊我,我会在第一时间回复大家,大家的支持也是我第一动力。

你可能感兴趣的:(Arduino,uno,嵌入式硬件,c++,c语言,单片机)