如何使用 HT1632 只接受文本打印数字

How to print a number on with HT1632 only accepting text

刚买了一块8x32的点阵板(led矩阵),用Arduino控制。问题是我只能在 github 上的库中使用文本。但不是数字,我该怎么做?

我要把代码放在下面,滚动文本的代码和库中指定用于设置文本的函数的部分代码。

编写滚动文本的arduino代码在这里:

#include <HT1632.h>
#include <font_5x4.h>
#include <images.h>

int i = 0;
int wd;
char disp[] = "Hello, how are you?";
int x = 10;

void setup() {
  HT1632.begin(A5, A4, A3);

  wd = HT1632.getTextWidth(disp, FONT_5X4_END, FONT_5X4_HEIGHT);
}
void loop() {
  HT1632.renderTarget(1);
  HT1632.clear();

  HT1632.drawText(disp, OUT_SIZE - i, 2, FONT_5X4, FONT_5X4_END,
                  FONT_5X4_HEIGHT);
  HT1632.render();

  i = (i + 1) % (wd + OUT_SIZE);

  delay(100);
}

指定打印文本的库代码是这样的:

void HT1632Class::drawText(const char text[], int x, int y, const byte font[],
                           int font_end[], uint8_t font_height,
                           uint8_t gutter_space) {
  int curr_x = x;
  char i = 0;
  char currchar;

  // Check if string is within y-bounds
  if (y + font_height < 0 || y >= COM_SIZE)
    return;

  while (true) {
    if (text[i] == '[=11=]')
      return;

    currchar = text[i] - 32;
    if (currchar >= 65 &&
        currchar <=
            90) // If character is lower-case, automatically make it upper-case
      currchar -= 32; // Make this character uppercase.

    if (currchar < 0 || currchar >= 64) { // If out of bounds, skip
      ++i;
      continue; // Skip this character.
    }

    // Check to see if character is not too far right.
    if (curr_x >= OUT_SIZE)
      break; // Stop rendering - all other characters are no longer within the
             // screen

    // Check to see if character is not too far left.
    int chr_width = getCharWidth(font_end, font_height, currchar);
    if (curr_x + chr_width + gutter_space >= 0) {
      drawImage(font, chr_width, font_height, curr_x, y,
                getCharOffset(font_end, currchar));

      // Draw the gutter space
      for (char j = 0; j < gutter_space; ++j)
        drawImage(font, 1, font_height, curr_x + chr_width + j, y, 0);
    }

    curr_x += chr_width + gutter_space;
    ++i;
  }
}

你需要看看snprintf。这允许您像 printf 一样格式化一串字符。它允许您将 int 之类的内容转换为字符串的一部分。

一个例子:

int hour = 10;
int minutes = 50;
char buffer[60];

int status = snprintf(buffer, 60, "the current time is: %i:%i\n", hour, minutes);

缓冲区现在包含:"the current time is: 10:50"(以及 [=15=] 之后的几个空字符)。