ESP32 FireBeetle VGA 语音波形显示
在影视作品中,我们经常能看到使用下面的波形演示声音。这次我们的作品就是在 VGA 显示器上展示实时波形。硬件方面直接使用之前的设计【参考1】,我们需要做的只是编写软件:
#include "fabgl.h"
const int WIDTH = 640;
const int HEIGHT = 400;
const int BKNOISE = 100;
const int CENTERLINE = 200;
// 实验测试取得,最大的在 155
const int MAXVALUE = 155;
// VGA 显示
fabgl::VGA16Controller DisplayController;
Canvas cv(&DisplayController);
#define AUDIO_IN_PIN A0 // Signal in on this pin
//int Volume;
void setup() {
Serial.begin(115200);
DisplayController.begin();
// 设定分辨率
DisplayController.setResolution(VGA_640x400_60Hz);
cv.setPenColor(Color::Red);
cv.setBrushColor(Color::White);
cv.setScrollingRegion(0, 0, WIDTH - 1, HEIGHT - 1);
}
int value = 0;
int maxvalue=0;
void loop() {
cv.scroll(1, 0);
value = analogRead(AUDIO_IN_PIN)>>4;
if (value > BKNOISE) {
value = value - BKNOISE;
} else {
value = 0;
}
if (value > BKNOISE) {
value = value - BKNOISE;
}
value=map(value,0,MAXVALUE,0,255);
cv.drawLine(0, CENTERLINE-value, 0,CENTERLINE+value);
delay(10);
}
代码方面非常简单,只需要2个步骤:1. 使用cv.scroll(1, 0) 函数,将屏幕所有内容右移一个像素;2. 在屏幕最左侧绘制直线cv.drawLine(0, CENTERLINE-value,0,CENTERLINE+value);这样就能够实现前面提到的效果,是不是非常简单?
工作测试视频:https://www.bilibili.com/video/BV1Gw411273d/?share_source=copy_web&vd_source=5ca375392c3dd819bfc37d4672cb6d54
参考:1.https://mc.dfrobot.com.cn/thread-316297-1-1.html
页:
[1]