1017浏览
查看: 1017|回复: 0

[ESP8266/ESP32] ESP32 FireBeetle VGA 语音波形显示

[复制链接]
在影视作品中,我们经常能看到使用下面的波形演示声音。这次我们的作品就是在 VGA 显示器上展示实时波形。

ESP32 FireBeetle VGA 语音波形显示图1

硬件方面直接使用之前的设计【参考1】,我们需要做的只是编写软件:

ESP32 FireBeetle VGA 语音波形显示图2


  1. #include "fabgl.h"
  2. const int WIDTH = 640;
  3. const int HEIGHT = 400;
  4. const int BKNOISE = 100;
  5. const int CENTERLINE = 200;
  6. // 实验测试取得,最大的在 155
  7. const int MAXVALUE = 155;
  8. // VGA 显示
  9. fabgl::VGA16Controller DisplayController;
  10. Canvas cv(&DisplayController);
  11. #define AUDIO_IN_PIN    A0            // Signal in on this pin
  12. //int Volume[WIDTH];
  13. void setup() {
  14.   Serial.begin(115200);
  15.   DisplayController.begin();
  16.   // 设定分辨率
  17.   DisplayController.setResolution(VGA_640x400_60Hz);
  18.   cv.setPenColor(Color::Red);
  19.   cv.setBrushColor(Color::White);
  20.   cv.setScrollingRegion(0, 0, WIDTH - 1, HEIGHT - 1);
  21. }
  22. int value = 0;
  23. int maxvalue=0;
  24. void loop() {
  25.   cv.scroll(1, 0);
  26.   value = analogRead(AUDIO_IN_PIN)>>4;
  27.   if (value > BKNOISE) {
  28.     value = value - BKNOISE;
  29.   } else {
  30.     value = 0;
  31.   }
  32.   if (value > BKNOISE) {
  33.     value = value - BKNOISE;
  34.   }
  35.   value=map(value,0,MAXVALUE,0,255);
  36.   cv.drawLine(0, CENTERLINE-value, 0,CENTERLINE+value);
  37.   delay(10);
  38. }
复制代码

代码方面非常简单,只需要2个步骤:
1.     使用  cv.scroll(1, 0) 函数,将屏幕所有内容右移一个像素;
2.     在屏幕最左侧绘制直线
cv.drawLine(0, CENTERLINE-value,0,CENTERLINE+value);
这样就能够实现前面提到的效果,是不是非常简单?

工作测试视频:

参考:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail