2 Arduino基本数字输出功能LED灯

I/O端口原理

I/O英文全称是 Input/Output,即输入/输出。单片机端口是标准双向口,就是说,单片机的端口既可以作为输出信号端(如控制灯亮灭、继电器吸合释放、喇叭发声等),也可以作为输入信号端(如按键信号输入、红外形输入、开关信号输入等)

单片机知识点补充

Arduino UNO R3:
引脚图
实物图在这里插入图片描述

高低电平:一般来说+5V为电平1,接地为0.

LED:LED的长引脚是正极,LED内部电极体积小的正极。

面包板:从原理图可以看到,面包板上下区是横向5位相通,一般用于接电源和接地,中间区域是纵向5位相通,通常用于放置电路元件和电路连接线。(面包板的核心组件是内部的金属弹性卡槽)
基本原理图

特别注意当我们使用单片机进行连接电路时,首先要设计好电路,如LED灯的电流大小要通过加电阻进行控制。(由VCC接到GND接法LED灯称之为拉电流;由VCC接到VCC接法称之为灌电流)

灌电流连接方式称为:共阳连接(led的阳极连接在一起)
拉电流连接方法称为:共阴连接(led的阴极连接在一起)
在这里插入图片描述
开关两种状态(开/闭)与电位器(可调电阻)将他们的状态是如何传送给arduino的呢?利用的是digitalRead()和analogRead()两种函数,也就是读取数字量和读取模拟量。

实战1——闪烁LED指示灯

法一:利用CPU独立工作

// LED连接到引脚13
// 引脚定义:
int LED = 13;
// 复位后初始化内容
void setup() {
  // 初始化数字端口为输出模式
  pinMode(LED_BUILTIN, OUTPUT);
}

// 主循环
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // LED引脚置高电平
  delay(1000);                       // 延迟1s
  digitalWrite(LED_BUILTIN, LOW);    // LED引脚变为低电平
  delay(1000);                       // 延迟1s
}

法二:CPU与定时器一起工作(即不使用延时函数的led闪烁程序)

// 定义引脚
const int ledPin =  13;      // led连接的引脚
// 变量
int ledState = LOW;             // led状态,亮或者灭
long previousMillis = 0;        // 存储最后一次的led状态
// 这里使用了长整型变量,因为使用了ms,瞬间的数值变化非常大。
long interval = 1000;           // 间隔闪烁的时间长度

void setup() {
  // 初始化引脚输出模式
  pinMode(ledPin, OUTPUT);      
}

void loop()
{
  // 这里还可以添加其他的程序
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > interval) {
    // 保存当前值,方便下次再次和当前时间比较
    previousMillis = currentMillis;   
    // 如果led熄灭就把它点亮,反之亦然
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;
    // 把对应的LED状态反应到led引脚上。
	// 之前都是用变量再处理,处理完成后把最终结果输出到终端。
    digitalWrite(ledPin, ledState);
  }
}

在这里插入图片描述

实战2——LED简易流水灯

程序思路如下:
首先熄灭所有LED,然后点亮第一个,等待200ms熄灭第一个,然后点亮第二个,等待200ms,熄灭第二个然后…

// 引脚定义
const int ledCount = 6;    // led个数

int ledPins[] = { 
  0,1,2, 3, 4, 5, };   // 对应的led引脚


void setup() {
  // 循环设置,把对应的led都设置成输出
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    pinMode(ledPins[thisLed], OUTPUT); 
  }
}

void loop() {
  // 熄灭所有led,不同的电路连接也会得到点亮所有led
    for (int num = 0; num < 6; num++) {
      digitalWrite(ledPins[num], HIGH);
    } //
  // 循环顺序点亮led然后等待200ms后熄灭
  for (int num = 0; num < 6; num++) {
      digitalWrite(ledPins[num], LOW);
      delay(200);
      digitalWrite(ledPins[num], HIGH);
  // 这样就形成了简易的led流水效果  
    } 
  }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

啥都鼓捣的小yao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值