Вывод текста с библиотекой U8glib и I2C дисплеем.
- Войдите на сайт для отправки комментариев
Сб, 10/02/2018 - 20:34
Доброго времени суток господа Гуру.
Помогите пожалуйста разобраться, нужно что бы текст на дисплее менялся о определенной цикличностью.
например ("12345") 1 секунда ("23456") 1 секунда и так по кругу.
Я нашел в примерах библиотеке пример похожий на тот что мне нужно.
Поправил его так как нужно мне НО нечего работать не хочет ужу 3 день сижу и все никак.
То есть он компелируется но на дисплее тишина.
Ткните пальцем или поправьте что не так.
В этом деле я новичек и только учусь часть команд мне просто не понятно.
Заранее большое спасибо!!!
#include "U8glib.h" U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI uint8_t offset = 0; void draw(void) { // graphic commands to redraw the complete screen should be placed here u8g.setFont(u8g_font_unifont); } void setup(void) { } void rotate(void) { static uint8_t dir = 0; static unsigned long next_rotation = 0; if ( next_rotation < millis() ) { switch(dir) { case 0: do{ u8g.setFont(u8g_font_unifont); u8g.drawStr( 0+0, 20+0, "Hello!"); u8g.drawStr( 0+2, 20+16, "Hello!"); } while (u8g.nextPage()); break; case 1: do{ u8g.setFont(u8g_font_6x10); u8g.setColorIndex(1); u8g.setPrintPos(0, 9); u8g.print("RTTGBV"); u8g.setFont(u8g_font_courB24n); u8g.setColorIndex(1); u8g.setPrintPos(20, 22); u8g.print("FDDCVB"); } while (u8g.nextPage()); // dispLED.point(false); break; case 2: do{ u8g.setFont(u8g_font_6x10); u8g.setColorIndex(1); u8g.setPrintPos(0, 9); u8g.print("1234"); u8g.setFont(u8g_font_courB24n); u8g.setColorIndex(1); u8g.setPrintPos(20, 22); u8g.print("CuWERF"); u8g.setColorIndex(1); u8g.drawLine(22,53,20,10); } while (u8g.nextPage()); break; } dir++; dir &= 3; next_rotation = millis(); next_rotation += 1000; } } void loop(void) { // screen rotation rotate(); // picture loop u8g.firstPage(); do { draw(); } while( u8g.nextPage() ); // rebuild the picture after some delay delay(100); }А Вы просто, без сдвигов, вывести слово можете?
Да это я уже строчки взял с примера, пробовал по разному.
Не работает. На дисплее нечего.
Погодите. Вы хотите что-то там менять и двигать. А просто без всяких меняний строку вывести можете? Пример HelloWorld запускали? Работает?
скеич HelloWorid работает без проблем.
Все скейчи с примеров библиотеки работают без проблем.
Я просто подобрал скейч похожий для моих нужд с примера библиотеки,
(Rotation) и поправил его но видать что то не так.
Ну, а Rotation работает? Ну так вернитесь к нему и меняйте его шаг за шагом, а не сразу, добиваясь, чтобы на каждом шаге работало.
Да там не совсем так. Там просто надпись по кругу крутилась.
Вот так.
Да, я Вам что говорю. Возьимте какой-нибудь пример. И начинайте его переделывать маленькими шашками. Чуть поменял - убедился, что работает, ещё поменял. И так сделаете. А сделать сразу Вы пока не можете. Научитесь со временем.
Так вроде так и делал. Без всего одну строчку на дислей вывести могу.
А вот здесь где ошибка не понятно?
u8g2.sendbuffer(); попробуй
u8g2.senbduffer не работает.
вот выкинул все лишнее и тоже самое.
На дисплее нечего.
Вот еще поправил но так и не работает.
#include "U8glib.h" U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI uint8_t offset = 0; void draw(void) { // graphic commands to redraw the complete screen should be placed here u8g.setFont(u8g_font_unifont); } void setup(void) { } void set(void) { static uint8_t set = 0; static unsigned long next_set = 0; if ( next_set < millis() ) { switch(set) { case 0: do{ u8g.setFont(u8g_font_unifont); u8g.setPrintPos(0, 22); u8g.print("Hello World !"); } while (u8g.nextPage()); break; case 1: do{ u8g.setFont(u8g_font_unifont); u8g.setPrintPos(0, 22); u8g.print("World Hello !"); } while (u8g.nextPage()); break; case 2: do{ u8g.setFont(u8g_font_unifont); u8g.setPrintPos(0, 22); u8g.print(" Hello Hello !"); } while (u8g.nextPage()); break; } set++; set &= 3; next_set = millis(); next_set += 1000; } } void loop(void) { // set(); // picture loop u8g.firstPage(); do { draw(); } while( u8g.nextPage() ); // rebuild the picture after some delay delay(100); }У меня вот так, правда дисплей по SPI подключен
#include "U8glib.h" /* Create an instance for the SSD1306 OLED display in SPI mode * connection scheme: * D0=sck=Pin 10 * D1=mosi=Pin 9 * CS=Pin 12 * DC=A0=Pin 11 * Reset=Pin 14 */ U8GLIB_SSD1306_128X64 u8g(10, 9, 12, 11, 14); void draw(void) { // graphic commands to redraw the complete screen should be placed here u8g.setFont(u8g_font_unifont); //u8g.setFont(u8g_font_osb21); u8g.drawStr( 0, 12, "Hello Bobrovich!"); u8g.setFont(u8g_font_unifont); u8g.drawStr( 18, 32, "Hello World!"); u8g.setFont(u8g_font_9x18B); u8g.drawStr( 22, 52, "+23 17%"); } void setup() { /* nothing to do here */ } void loop() { u8g.firstPage(); /* Keep looping until finished drawing screen */ do { int steps = 16; int dx = 128/steps; int dy = 64/steps; int y = 0; for(int x=0; x<128; x+=dx) { u8g.drawLine(x, 0, 127, y); u8g.drawLine(127-x, 63, 0, 63-y); y+=dy; } } while(u8g.nextPage()); }bobrovich, выложите код правильно, пожалуйста.
И еще - полезно смотреть на даты сообщений, вряд ли ТС спустя год ждет еще каких-то советов :)