在影视作品中,我们经常能看到使用下面的波形演示声音。这次我们的作品就是在 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[WIDTH];
-
- 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); 这样就能够实现前面提到的效果,是不是非常简单?
工作测试视频:
参考:
|