我正在编写一个裸机 C 语言测试程序,用于捕获一些传感器数据,分析并绘制它。数据非常简单,我只有一个串行控制台接口。尽管如此,我还是想仅使用等宽 ASCII 字符来绘制波形。
有没有标准的、推荐的方法来做这样的事情?
256 | *
| *
| *
| * *
128 | * *
| * * *
| * ** *
| ** *** * * * **
0 _______________________________
这只是一对嵌套循环。
size_t n = 26;
for ( size_t y = 8; y--; ) {
int miny = ( y + 0 ) * 8;
int maxy = ( y + 1 ) * 8;
for ( size_t x = 0; x < n; ++x ) {
putchar( miny <= samples[ x ] && samples[ x ] < maxy ? '*' : ' ' );
}
putchar( '\n' );
}
gnuplot
的管道。
#include <stdlib.h>
#include <stdio.h>
int main(void) {
FILE *gnu = popen("gnuplot", "w");
if(!gnu) { perror("gnuplot"); return EXIT_FAILURE; }
fprintf(gnu, "set term dumb\n"
"$Data <<EOD\n"
"10\n10\n70\n10\n10\n10\n"
"100\n130\n160\n230\n260\n200\n"
"160\n130\n100\n10\n10\n10\n60\n"
"70\n80\n60\n20\n10\nEOD\n"
"plot $Data\n");
pclose(gnu);
return EXIT_SUCCESS;
}
给我,
300 +--------------------------------------------------------------------+
| + + + + |
| $Data A |
250 |-+ A +-|
| |
| A |
| |
200 |-+ A +-|
| |
| A A |
150 |-+ +-|
| A A |
| |
100 |-+ A A +-|
| |
| A A A |
| A A |
50 |-+ +-|
| |
| A A A A + A A A + A A |
0 +--------------------------------------------------------------------+
0 5 10 15 20 25
您尚未真正提供您正在使用的终端功能的详细信息。