C++程序猿,来动动手帮帮忙吧

2015-04-29 17:14:19 +08:00
 shom
不懂C,自己只能改demo print出字符,想请大家帮忙改一下让屏幕显示系统信息,比如cpu,mem,net,storge等信息,或者提供个demo.
这是个raspbarry pi的oled库的demo,我自己把一些没用的部分去掉了。
源代码在这里 https://github.com/hallard/ArduiPi_OLED

<code>
#include "ArduiPi_OLED_lib.h"
#include "Adafruit_GFX.h"
#include "ArduiPi_OLED.h"

#include <getopt.h>
#include <sys/sysinfo.h>
#include <stdio.h>

// Instantiate the display
ArduiPi_OLED display;

// Config Option
struct s_opts
{
int oled;
} ;

int sleep_divisor = 1 ;

// default options values
s_opts opts = {
OLED_SH1106_I2C_128x64 // Default oled
};

void testdrawchar(void) {
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);

for (uint8_t i=0; i < 168; i++) {
if (i == '\n') continue;
display.write(i);
if ((i > 0) && (i % 21 == 0))
display.print("\n");
}
display.display();
}

void helloword() {
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(5,0);
display.clearDisplay();
display.print("Uptine: %ddays, %dhours \n");
display.display();
}

int main(int argc, char **argv)
{
int i;
// I2C change parameters to fit to your LCD
if ( !display.init(OLED_I2C_RESET,opts.oled) )
exit(EXIT_FAILURE);

display.begin();
display.clearDisplay();

// hello world.
helloword();
display.display();
sleep(5);
display.clearDisplay();


// draw the first ~12 characters in the font
testdrawchar();
display.display();
sleep(2);
display.clearDisplay();

// text display tests
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("Hello, world!\n");
display.setTextColor(BLACK, WHITE); // 'inverted' text
display.printf("%f\n", 3.141592);
display.setTextSize(2);
display.setTextColor(WHITE);
display.printf("0x%8X\n", 0xDEADBEEF);
display.display();
sleep(2);

// horizontal bargraph tests loads
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
for ( i =0 ; i<=100 ; i++)
{
display.clearDisplay();
display.setCursor(0,0);
display.print("Gauge Graph!\n");
display.printf(" %03d %%", i);
display.drawHorizontalBargraph(0,16, (int16_t) display.width(),16,1, i);
display.display();
usleep(25000/sleep_divisor);
}

// vertical bargraph tests
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
for ( i =0 ; i<=100 ; i++)
{
display.clearDisplay();
display.setCursor(0,0);
display.print("Gauge !\n");
display.printf("%03d %%", i);
display.drawVerticalBargraph(114,0,8,(int16_t) display.height(),1, i);
display.display();
usleep(25000/sleep_divisor);
}
// Free PI GPIO ports
display.close();
}
</code>
886 次点击
所在节点    C
2 条回复
northisland
2015-04-29 17:46:59 +08:00
你不能只拿一个显示器的文档、库和说明书,
查看怎么去查主机的信息


结合你的操作系统,我知道可以用
FILE *fp = popen(command, "r");
fgets(buffer, sizeof(buffer), fp);
调用命令行得到一些系统数据


你贴上来这些应该是屏幕测试程序
khan
2015-04-30 10:38:00 +08:00
http://www.cppblog.com/Khan/archive/2008/06/23/54364.html

我写过一个 dylib, 可以获取系统信息. 支持 linux 和 win, 您可以直接使用源码
另外v2dx居然不支持语法高亮或 markdown, 真是相当蛋疼.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/187287

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX