Вывод текста с библиотекой U8glib и I2C дисплеем.

Ahatolii
Offline
Зарегистрирован: 10.12.2017

Доброго времени суток господа Гуру. 

Помогите пожалуйста разобраться, нужно что бы текст на дисплее менялся о определенной цикличностью.

например ("12345") 1 секунда ("23456") 1 секунда и так по кругу.

Я нашел в примерах библиотеке пример похожий на тот что мне нужно.

Поправил его так как нужно мне НО нечего работать не хочет ужу 3 день сижу и все никак.

То есть он компелируется но на дисплее тишина.

Ткните пальцем или поправьте что не так. 

В этом деле я новичек  и только учусь часть команд мне просто не понятно.

Заранее большое спасибо!!! 

Ahatolii
Offline
Зарегистрирован: 10.12.2017
#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);
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А Вы просто, без сдвигов, вывести слово можете?

Ahatolii
Offline
Зарегистрирован: 10.12.2017

Да это я уже строчки взял с примера, пробовал по разному.

Не работает. На дисплее нечего.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Погодите. Вы хотите что-то там менять и двигать. А просто без всяких меняний строку вывести можете? Пример HelloWorld запускали? Работает?

Ahatolii
Offline
Зарегистрирован: 10.12.2017

скеич HelloWorid   работает без проблем.

Все скейчи с примеров библиотеки  работают без проблем.

Я просто подобрал скейч похожий для моих нужд с примера библиотеки,

(Rotation) и поправил его но видать что то не так.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, а Rotation работает? Ну так вернитесь к нему и меняйте его шаг за шагом, а не сразу, добиваясь, чтобы на каждом шаге работало.

Ahatolii
Offline
Зарегистрирован: 10.12.2017

Да там не совсем так. Там просто надпись по кругу крутилась.

Ahatolii
Offline
Зарегистрирован: 10.12.2017
      case 0: u8g.undoRotation(); break;
      case 1: u8g.setRot90(); break;
      case 2: u8g.undoRotation(); break;
      case 3: u8g.setRot90(); break;
      case 4: u8g.undoRotation(); break;
      case 5: u8g.setRot180(); break;
 
 
Ahatolii
Offline
Зарегистрирован: 10.12.2017

Вот так.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да, я Вам что говорю. Возьимте какой-нибудь пример. И начинайте его переделывать маленькими шашками. Чуть поменял - убедился, что работает, ещё поменял. И так сделаете. А сделать сразу Вы пока не можете. Научитесь со временем.

Ahatolii
Offline
Зарегистрирован: 10.12.2017

Так вроде так и делал. Без всего одну строчку на дислей вывести могу.

А вот здесь где ошибка не понятно?

 

Hayabusa
Offline
Зарегистрирован: 29.03.2012

u8g2.sendbuffer(); попробуй

Ahatolii
Offline
Зарегистрирован: 10.12.2017

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 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.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;
 
    }
    
    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);
}
 
Ahatolii
Offline
Зарегистрирован: 10.12.2017

Вот еще поправил но так и не работает.

#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);
}

 

bobrovich
bobrovich аватар
Offline
Зарегистрирован: 06.03.2019

У меня вот так, правда дисплей по 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());
  
}

 

 
b707
Offline
Зарегистрирован: 26.05.2017

bobrovich, выложите код правильно, пожалуйста.

И еще - полезно смотреть на даты сообщений, вряд ли ТС спустя год ждет еще каких-то советов :)