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流水效果
}
}