Как отображать переменные на 0,96-дюймовом OLED-дисплее с библиотекой u8glib?

У меня есть Arduino Uno и 0,96-дюймовый дисплей I2C Oled с 4 контактами. Вот мои коды Arduino:

#include "U8glib.h"

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);    // VDD=5V SCL=A5 SDA=A4

int a = 10;

void setup(void) {
}

void loop(void) {

  u8g.setFont(u8g_font_gdr25r);
  u8g.drawStr(8, 30, "E");
  u8g.setFont(u8g_font_gdr25r);
  u8g.drawStr(30, 30,"l");
  delay(2000);  

  // u8g.println(a); // Этот сырой код не работает
  // задержка(2000);
}

Я пытаюсь указать, что переменная целочисленного типа называется "a" на OLED-экране, но в библиотеке u8glib ее нет

println((целое) а);

для этого. Я вижу только

u8g.drawStr();

функция, которая не может обрабатывать целочисленные переменные для отображения. Как мне это сделать?

, 👍3


2 ответа


Лучший ответ:

5

На странице пользовательского справочника по U8glib упоминается несколько способов печати значения числа с использованием ASCII символы.

Например, следуя идее при втором упоминании sprintf по ссылке выше:

char buf[9];
sprintf (buf, "%d", a);
u8g.drawStr(33, 33, buf);

Редактировать: Вышеприведенный пример следует за примером по ссылке, но я вычеркнул его, потому что в целом snprintf безопаснее, чем sprintf . См. ниже.

enum {BufSize=9}; // Если a короткий, используйте меньшее число, например 5 или 6
char buf[BufSize];
snprintf (buf, BufSize, "%d", a);
u8g.drawStr(33, 33, buf);

Другой способ — через print. (Поищите U8GLIB::print по приведенной выше ссылке, а также см. Print документы arduino.cc).

Например:

u8g.print(a);

Чтобы получить эффект новой строки, вам может понадобиться переменная, отслеживающая номер текущей строки; добавьте к нему 1, чтобы получить номер следующей строки, и используйте его как параметр позиции в вызове drawStr.

,

0

Хорошо, я нашел решение (спасибо, @jwpat7). Вот мой рабочий код:

#include "U8glib.h"

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);  // VDD=5V GND=GND SCL=A5 SDA=A4

int a = 0;

void setup() {      }

void loop() {

u8g.firstPage(); 
 do {
u8g.setFont(u8g_font_gdr25r);
//u8g.drawStr(8, 30, "Ээээ");

char buf[9];
sprintf (buf, "%d", a);
u8g.drawStr(18, 3, buf);

  } while( u8g.nextPage() );
  delay(200); 
}
,