本帖最后由 jinglixixi 于 2021-8-2 19:48 编辑
在Wio终端,配有麦克风及音频信号采集电路,其工作原理图见图1所示。
图1 电路原理图 本次测试有2个目标,即音频信号采集和数据曲线显示。 1.音频信号采集 要进行音频信号采集的只需正确指导信号采集的引脚即可,因为所采集的信号为模拟信号,故需使用函数analogRead(),其次就是使用串行通讯将采集的数据显示出来,其程序及上传结果如图2所示。
图2 程序及上传 在上传后,通过串口监视器可观察到图3所示的结果,若打开串口监视器,则可观察到图4所示的波形。
图3 采集数据
图4 数据波形
2.屏幕显示波形 在Wio终端,不但能采集音频信号,还可借助其液晶屏的强大显示性能来显示数据波形,其效果如图5所示。 在使用其波形显示功能前,应安装LCD 库和Linechart库以获得支持。 图5波形显示
其波形显示程序为:
- #include"seeed_line_chart.h" //include the library
- #include <math.h>
- TFT_eSPI tft;
- #define max_size 50 //maximum size of data
- doubles data; //Initilising a doubles type to store data
- TFT_eSprite spr = TFT_eSprite(&tft); // Sprite
- void setup() {
- pinMode(WIO_MIC, INPUT);
- tft.begin();
- tft.setRotation(3);
- spr.createSprite(TFT_HEIGHT,TFT_WIDTH);
- }
- void loop() {
- spr.fillSprite(TFT_DARKGREY);
- int val = analogRead(WIO_MIC);
- if (data.size() == max_size) {
- data.pop();//this is used to remove the first read variable
- }
- data.push(val); //read variables and store in data
- //Settings for the line graph title
- auto header = text(0, 0)
- .value("Microphone Reading")
- .align(center)
- .color(TFT_WHITE)
- .valign(vcenter)
- .width(tft.width())
- .thickness(2);
- header.height(header.font_height() * 2);
- header.draw(); //Header height is the twice the height of the font
- //Settings for the line graph
- auto content = line_chart(20, header.height()); //(x,y) where the line graph begins
- content
- .height(tft.height() - header.height() * 1.5) //actual height of the line chart
- .width(tft.width() - content.x() * 2) //actual width of the line chart
- .based_on(0.0) //Starting point of y-axis, must be a float
- .show_circle(true) //drawing a cirle at each point, default is on.
- .y_role_color(TFT_WHITE)
- .x_role_color(TFT_WHITE)
- .value(data) //passing through the data to line graph
- .color(TFT_RED) //Setting the color for the line
- .draw();
- spr.pushSprite(0, 0);
- delay(50);
- }
复制代码
此外,在进行其他的A/D转换时,我们也可将程序中的采集对象修改为自己的引脚并借助该程序来实现数据曲线的绘制。
|