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


Arduino uno的系列教程目录

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

···
···


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

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

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


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

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

1、认识初界面

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

(1)Arduino IDE

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

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

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述
或者右击开始,选择设备管理器

在这里插入图片描述

点击设备管理器,点击端口,CH340的那个端口就是开发板连接的端口(每个人可能不一样,比如我的是 COM 5)
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

(2)Platform IO

首先打开VS code

在这里插入图片描述

点击 new project

在这里插入图片描述

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

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

在这里插入图片描述

选择 “是”

在这里插入图片描述

找到 main.cpp 文件 , 并点击

在这里插入图片描述

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

在这里插入图片描述

具体功能如下图:

在这里插入图片描述

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

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

2、配置引脚模式

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

在这里插入图片描述

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

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

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

3、数字信号输出模式

使用到了函数 “ 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  (低电平)
 */
}

4、数字信号输入模式

使用到了函数 “ 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会返回这两个值的其中一个
}

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、面包板(免焊接)

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

面包板本身无自带电源

在这里插入图片描述
在这里插入图片描述

2、杜邦线

可以配合面包板进行布线,可以免除焊接的麻烦
在这里插入图片描述
并且包含两种头,上图为公头,下图为母头,而上图就是公对公的杜邦线

在这里插入图片描述

3、电阻

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

在这里插入图片描述

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

在这里插入图片描述

4、LED(发光二极管)

在这里插入图片描述
需要注意区分LED的正负极,一般 “长正短负”

注:要注意LED的额定电压、额定电流和功率,不同种类、不同颜色的LED均不同,长时间处于不正常的电路中会加速电子元器件的老化和损坏,下图公式要会使用
在这里插入图片描述

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

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

1、点亮一个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是开发板出厂测试用的

2、点亮多个LED

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

3、让 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();

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

### Arduino UnoR3 点亮LED 示例代码 对于希望利用Arduino Uno R3点亮LED的开发者来说,了解基本电路连接以及编写相应的程序至关重要。当涉及到RGB LED时,情况稍微复杂一些,因为每个RGB LED实际上由红、绿、蓝三种颜色组成,每种颜色都需要单独控制其亮度来混合出不同的色彩。 #### 基本原理 为了简化操作,在这里描述的方法适用于单个RGB LED的情况。如果想要扩展到多个RGB LED,则需考虑更复杂的布线方式或采用专用驱动芯片。对于简单的实验而言,可以直接通过Arduino的PWM引脚分别给定红色(R)、绿色(G)和蓝色(B)三个管脚电压值以改变灯光的颜色[^1]。 #### 所需材料清单 - Arduino Uno R3 开发板 - RGB 彩色流水灯模块(含至少一个共阳极型RGB LED) - 杜邦线若干根用于连接Arduino与RGB LED之间的信号线 #### 接线方法 将RGB LED 的公共端接到电源正极(VCC),而另外三根数据线则对应接至Arduino的不同数字I/O口上作为输入/输出接口。具体地: - Red (R): D9 - Green (G): D10 - Blue (B): D11 注意:上述分配并非固定不变;可以根据实际需求调整所使用的针脚编号,只需确保在编程阶段保持一致即可。 #### 示例代码实现 下面给出一段基础版本的Arduino C++源码片段,该段代码实现了让RGB LED循环显示不同颜色的效果。 ```cpp // 定义各颜色对应的PWM引脚号 const int redPin = 9; const int greenPin = 10; const int bluePin = 11; void setup() { // 设置所有涉及的GPIO模式为OUTPUT pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); } void loop(){ setColor(255, 0, 0); delay(1000); // 显示纯红色一秒钟 setColor(0, 255, 0); delay(1000); // 转变为纯绿色持续一秒... setColor(0, 0, 255); delay(1000); // ...再转成纯蓝色停留同样时间 // 更多组合可自行尝试添加 } /** * @brief 设定当前RGB LED发出指定颜色光 */ void setColor(int rValue,int gValue ,int bValue){ analogWrite(redPin,rValue ); analogWrite(greenPin,gValue ); analogWrite(bluePin,bValue ); } ``` 这段代码展示了如何设置特定颜色并使它们按照一定顺序交替变化。`analogWrite()`函数允许设定PWM占空比从而调节发光强度,进而影响最终呈现出的具体色调。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cloudier.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值