V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shom
V2EX  ›  C

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

  •  
  •   shom · 2015-04-29 17:14:19 +08:00 · 1003 次点击
    这是一个创建于 3501 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不懂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>
    2 条回复    2015-04-30 10:38:00 +08:00
    northisland
        1
    northisland  
       2015-04-29 17:46:59 +08:00
    你不能只拿一个显示器的文档、库和说明书,
    查看怎么去查主机的信息


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


    你贴上来这些应该是屏幕测试程序
    khan
        2
    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, 真是相当蛋疼.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1258 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:16 · PVG 07:16 · LAX 15:16 · JFK 18:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.