Arduino实用教程(四)

您所在的位置:网站首页 3dmax怎么修改灯光亮度高低的颜色参数 Arduino实用教程(四)

Arduino实用教程(四)

2024-04-02 21:18| 来源: 网络整理| 查看: 265

LED灯是最常见的Arduino模块,上一节我们讲了控制Arduino板自带的LED灯。 这一节还讲LED灯,讲外接、可控亮度的LED灯。

1.PWM

Pulse Width Modulation简称PWM 数字接口只能输出0或1两种状态,PWM通过在0、1两种状态中快速切换,生成一个介于0、1之间的值。 比如1000ms中,400ms处于1,600ms处于0,两种状态均匀分布,就输出了一个0.4的值。

具体可以参加 https://www.arduino.cc/en/Tutorial/PWM

2.LED模块

你的LED模块可能是这样子

也可能是这样子

不管长什么样,只要单色可调光LED,都是三根线。 标注字符IN的是控制线、VCC是电源线、GND是地线。

3.连接模块

Mega开发板,2-13都是pwm接口,随便选一个都可以。 Uno开发板,3,5,6,9,10,11是pwm接口,可以在开发板上看到接口数字边上有个~。

LED灯IN连接到Mega D2接口;VCC接到Mega 5V接口;GND接到Mega GND接口。 早期的开发板,为了防止电压不稳定击穿电子器件,需要连接个电阻。 现在的开发板,只在接马达时需要增加一块扩展板。

4.修改PIN脚

修改此处的13为2

pinMode(13, OUTPUT);

修改此处的13为2

void loop() { digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(13, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second }

上传代码到开发板。 可以看到这个外界的LED灯也像内置的LED灯一样闪烁了。

5.优化代码

在setup函数之前增加宏定义LED_PIN

define LED_PIN 2 void setup() { ...

将代码中的PIN脚13都用LED_PIN替换,以后再更换PIN脚就很方便了。

6.调节LED亮度

用analogWrite函数控制PWM接口,第一个参数是PIN脚,第二个是输出到这个接口的值,范围0~255. analogWrite(LED_PIN, 10)这行代码使LED灯发出微弱的光。

void loop() { analogWrite(LED_PIN, 10); } 7.动态调整亮度

我们通过串口输入一个介于0-255的数字来调整LED灯亮度。

本例我们用到四个串口函数

7.1 初始化

在setup函数里设置串口波特率

void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); } 7.2 检测串口是否有数据输入

Serial.available()返回true表示串口有数据待读取

void loop() { while (Serial.available()) ... 7.3 从串口读入一个long型数字

Serial.parseInt()读取串口中输入的字符串。如果输入的是非数字,会被解析为0.

void loop() { while (Serial.available()) { Serial.parseInt(); 7.4 改变LED灯亮度

analogWrite函数用来给模拟接口写入数据。 第一个参数指定PIN脚,第二个参数指定写入PIN的值。

long ledLevel = 10; void loop() { while (Serial.available()) { ledLevel = Serial.parseInt(); } analogWrite(LED_PIN, ledLevel); }

因为analogWrite接受的值在0-255之间,所以代码可以做些优化。 用uint8_t代替long型。

uint8_t ledLevel = 10; void loop() { while (Serial.available()) { ledLevel = Serial.parseInt(); } analogWrite(LED_PIN, ledLevel); } 7.5 输出Debug信息

print输出参数信息。 println输出参数信息,并回车。

uint8_t ledLevel = 10; void loop() { while (Serial.available()) { ledLevel = Serial.parseInt(); Serial.print("ledLevel="); Serial.println(ledLevel); } analogWrite(LED_PIN, ledLevel); } 7.6 串口模拟器设置修改

串口模拟器稍作修改,右下角这里改成“没有结束符”。 否则parseInt会把结束符解析成0,导致LED灯错误熄灭。

7.7 测试


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3