学习笔记——Arduino Uno R3(二)

写在正文前的话
今天在书上看到Arduino语言的相关资料时,书本用两行代码表示了在传统AVR单片机开发中,将一个I/O口设置为输出高电平状态下需要以下操作:

DDRB |= (1<<5);
PORTB |= (1<<5);

其中PORTB和DDRB都是AVR单片机中的寄存器。

我在上半学期上嵌入式的课的时候,还有好多同学不知道这些逻辑运算符到底表示什么意思,就在这解释一下。(以后的文章碰到有关C语言或者硬件的知识点,我也会写在文中或下一次的正文前)

常见的三种基本运算:

运算符 中文意思
&= 与运算
^= 异或运算
1 = 或运算

P.S. 这里的或运算符打不出来,论坛的编辑器会自动转成表格,一次用1代替。

&=
x=0x02;//0x02
x&=0x01;//0x01
        //0x00按位与后的结果

这里的x &= 0x01 可以看成 x= x & 0x01, 与运算可以看为是按位进行乘法。

|=
x=0x02;//0x02
x&=0x01;//0x01
        //0x03 按位或运算的结果

这里的x |= 0x01 可以看成 x= x | 0x01, 与运算可以看为是按位进行加法。

^=
x=0x02;//0x02
x&=0x01;//0x01
        //0x03 按位异或运算的结果

这里的x ^= 0x01 可以看成 x= x ^ 0x01
口诀:相同取0,相异取1。

正文

数字I/O口的使用
1、数字信号
数字信号是以0,1表示的不连续信号。也就是以二进制形式表示的信号,在Arduino中数字信号用高低电平来表示。高电平为数字信号1,低电平为数字信号2。包括写有“A”编号的模拟输入引脚。使用这些引脚可以完成输入或输出数字信号的功能。在使用输入或输出功能前,需要先通过pinMode()函数配置引脚的模式为输入模式或输出模式。

pinMode(pin,mode);

其中pin表示指定配置的引脚编号,mode为指定配置的模式
可使用的三种模式如下表所示:

模式名称 说明
INPUT 输入模式
OUTPUT 输出模式
INPUT_PULLUP 输入上拉模式

配置为输出模式之后,还需要用digitaiWrite()函数使该引脚输出高电平或低电平。其调用形式为;

digitalWrite(pin,value);

value为要指定的输出电平,使用HIGH指定输出高电平,使用LOW指定输出低电平。

数字引脚除了用于输出信号外。还可用digitalRead()函数读取外部输入的信号。其调用形式为:

digitalRead(pin);

当Arduino以5V供电时,会将范围为-0.5~1.5V的输入电压作为低电平识别。而将范围在3-3.5V的输入电压作为高电平。所以即使输入电压不太准确,Arduino也可以正常识别。
P.S. 过高的输入电压会损坏Arduino

现在写文章的时间是2021年1月11日19:14:21,打算做第一个实验,流水灯闪烁,就以上面说的三种函数为范围来写。

首先,学过51和32的都知道,第一步是要配置I/O口,我们会用到这条:

pinMode(i, OUTPUT);

又因为要做的是流水灯,所以肯定得有一个for循环来轮流配置。有一说一,一行一次定义一个I/O口在我看来着实挺蠢的。那么在配置端口的前面套一个循环,如下:

{
    
    
  for (int i = 2; i < 8; i++)
    pinMode(i, OUTPUT);
}

第二步
要让流水灯逐个亮再逐个灭,除了要给循环之外,还需要给发光二极管高低电平。这时候就需要digitalWrite()来给电平。那么先亮再灭,所以先给高,再给低:

    digitalWrite(i, HIGH);
    delay(1000);
    digitalWrite(i, LOW);

我们来看一下板子
在这里插入图片描述

先从2-7的依次亮灭,再是7-2的依次亮灭,因此我们需要的是两个不同条件的for循环:

for (int i = 2; i < 7; i++)
for (int i = 7; i > 2; i--)

所以最后程序应该是:

void setup()
{
    
    
  for (int i = 2; i < 8; i++)
    pinMode(i, OUTPUT);
}

void loop()
{
    
    
  for (int i = 2; i < 7; i++)
  {
    
    
    digitalWrite(i, HIGH);
    delay(1000);
    digitalWrite(i, LOW);
  }
  for (int i = 7; i > 2; i--)
  {
    
    
    digitalWrite(i, HIGH);
    delay(1000);
    digitalWrite(i, LOW);
  }
}

P.S.注释我不写了,不会真有人看不懂吧,都1202了

那么我自己是还需要把实物做出来,买的套件里面有面包板杜邦线什么的。
需要5个220R的电阻,11条杜邦线,5个发光二极管,一个面包板,开发板+数据线。接线示意及成果如下:

Arduino Uno LED流水灯

视频看不了的话,网址如下:https://www.bilibili.com/video/BV1Ah41127Uo

猜你喜欢

转载自blog.csdn.net/weixin_41679822/article/details/112443539
UNO