LED矩阵:
Arduino UNO R4 WiFi配有内置 12x8 LED 矩阵,可对其进行编程以显示图形、动画、充当界面,甚至玩游戏。
该矩阵及其 API 可以通过几种不同的方式进行编程,每种方式都适合不同的应用。
#include "Arduino_LED_Matrix.h"
UNO R4 WiFi 的 LED 矩阵库的工作原理是创建一个帧,然后将其加载到显示该帧的缓冲区中。
帧就是我们所说的在任意给定时刻显示在矩阵上的“图像”。如果动画是一系列图像,则帧就是该系列中的其中一个图像。
为了控制 UNO R4 WiFi 上的 12x8 LED 矩阵,您需要至少 96 位大小的内存空间。该库提供了两种方法来做到这一点。
我们接下来的代码将使用官方提供的LED 矩阵工具来创建:
单击此处转到 LED 矩阵工具
// 引入Arduino_LED_Matrix库,用于控制LED矩阵
#include "Arduino_LED_Matrix.h"
// 创建一个ArduinoLEDMatrix对象,用于操作LED矩阵
ArduinoLEDMatrix matrix;
void setup() {
// 初始化串口通信,波特率为115200
Serial.begin(115200);
// 初始化LED矩阵
matrix.begin();
}
// 定义一个常量数组D,用于存储字母"D"的LED矩阵数据
const uint32_t D[] = {
0x1e011010,
0x81081081,
0x81101e0,
};
// 定义一个常量数组K,用于存储字母"K"的LED矩阵数据
const uint32_t K[] = {
0x10813014,
0x1801401,
0x30108108,
};
void loop(){
// 将字母"D"的LED矩阵数据加载到matrix对象中,并显示在LED矩阵上
matrix.loadFrame(D);
// 延时500毫秒,让字母"D"显示一段时间
delay(500);
// 将字母"K"的LED矩阵数据加载到matrix对象中,并显示在LED矩阵上
matrix.loadFrame(K);
// 延时500毫秒,让字母"K"显示一段时间
delay(500);
}
代码烧录后视频效果展示:
// 引入Arduino图形库和LED矩阵库
#include "ArduinoGraphics.h"
#include "Arduino_LED_Matrix.h"
// 创建一个ArduinoLEDMatrix对象,用于控制LED矩阵
ArduinoLEDMatrix matrix;
void setup() {
// 初始化LED矩阵
matrix.begin();
}
void loop() {
// 开始绘制图形
matrix.beginDraw();
// 设置画笔颜色为白色(0xFFFFFFFF表示ARGB格式的白色)
matrix.stroke(0xFFFFFFFF);
// 设置文本滚动速度为100毫秒
matrix.textScrollSpeed(100);
// 定义要显示的文本内容
const char text[] = " EEWorld! ";
// 设置文本字体为5x7点阵字体
matrix.textFont(Font_5x7);
// 设置文本起始位置和颜色(0, 1表示从第二行开始,0xFFFFFF表示白色)
matrix.beginText(0, 1, 0xFFFFFF);
// 在LED矩阵上打印文本
matrix.println(text);
// 设置文本滚动方向为向左滚动
matrix.endText(SCROLL_LEFT);
// 结束绘制图形
matrix.endDraw();
}
代码烧录后视频效果展示:
DAC正弦波:
Arduino UNO R4 WiFi 具有内置DAC (数模转换器),用于将数字信号转换为模拟信号。此功能可用于构建大量有趣的音频项目,但也可用作专业实验室设备,例如廉价的函数发生器。
接线方式:
#include "analogWave.h" // 引入模拟波形生成库
analogWave wave(DAC); // 创建一个analogWave类的实例,使用DAC引脚
int freq = 10; // 频率,单位为赫兹,可根据需要更改
void setup() {
Serial.begin(115200); // 初始化串行通信,波特率为115200
wave.sine(freq); // 生成初始频率的正弦波
}
void loop() {
// 从A5引脚读取模拟值,并将其映射到频率范围
freq = map(analogRead(A5), 0, 1024, 0, 10000);
// 将更新后的频率打印到串行监视器
Serial.println("当前频率为 " + adcValue + " 赫兹");
wave.freq(freq); // 将波形发生器的频率设置为更新后的值
delay(1000); // 延迟一秒钟后重复
}
用OPAMP放大DAC信号;用ADC采集并且打印数据到串口:
#include "analogWave.h" // 包含用于模拟波形生成的库
#include <OPAMP.h> // 包含OPAMP库
analogWave wave(DAC); // 创建一个analogWave类的实例,使用DAC引脚
int freq = 10; // 频率,单位为赫兹,可根据需要更改
unsigned long previousMillis = 0; // 存储上一次读取ADC值的时间
const unsigned long interval = 10; // 读取ADC值的时间间隔,单位为毫秒
void setup() {
Serial.begin(921600); // 初始化串行通信,波特率为921600
wave.sine(freq); // 生成初始频率的正弦波
OPAMP.begin(OPAMP_SPEED_LOWSPEED); // 初始化OPAMP为低速模式
analogReadResolution(12); // 将模拟读取分辨率更改为12位
}
void loop() {
unsigned long currentMillis = millis(); // 获取当前时间
// 每隔interval毫秒读取一次ADC值
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis; // 更新上一次读取的时间
int adcValue = analogRead(A5); // 返回0-4095之间的值
Serial.println(adcValue); // 将ADC值打印到串行监视器
}
}
串口波形显示: