Как отображать переменные на 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();
функция, которая не может обрабатывать целочисленные переменные для отображения. Как мне это сделать?
@Bay, 👍3
2 ответа
Лучший ответ:
На странице пользовательского справочника по 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
.
Хорошо, я нашел решение (спасибо, @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);
}
- Как заставить текст мигать на экране ssd1306 i2c
- Чтение оперативной памяти с OLED-контроллера SH1106 через I2C
- Отправка и получение различных типов данных через I2C в Arduino
- Как работают функции вне цикла void?
- OVF в последовательном мониторе вместо данных
- ЖК-дисплей I2C отображает странные символы
- Соединение I2C зависает Ведущий если ведомый отключается
- Экран LCD 16*02 I2C показывает только первый напечатанный символ