zoologist 发表于 2023-10-7 10:43:15

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]
查看完整版本: ESP32 FireBeetle VGA 语音波形显示