GyverOLED. Вопросы по библиотеке

b707_2

★★✩✩✩✩✩
22 Июл 2020
182
51
код выкладывайте, иначе это обучение игре на гитаре без гитары
Не пробовали брать другую библиотеку для дисплея?
 

SashaPetrov

✩✩✩✩✩✩✩
22 Май 2019
54
5
код выкладывайте, иначе это обучение игре на гитаре без гитары
Не пробовали брать другую библиотеку для дисплея?
Используется microWire
C++:
#define OLED_EXTFONTS  // указываем, что используются расширенные шрифты
#define OLED_SOFT_BUFFER_64

#include <GyverOLED.h>
GyverOLED oled;

#include <MPU6050_tockn.h>
MPU6050 mpu6050(Wire);

//extern uint8_t ExtFont8x12[];

extern uint8_t ExtFont8x12[];

void setup() {
  Serial.begin(115200);

  oled.init(OLED128x64);
  oled.clear();
  oled.home();

  oled.setFont(ExtFont8x12);
  oled.print("Привет");
  Serial.println("Hello");
  oled.update();
  delay(1000);
  Serial.println("Start");
  Serial.println(millis()-1000);
  oled.clear();
  oled.home();
  mpu6050.begin();
}

long timer = 0;
void loop() {
  mpu6050.update();
  if (millis() - timer > 100) {
    oled.clear();
    oled.setCursor(0, 0);
    oled.print("T:");
    oled.setCursor(15, 0);
    oled.print(mpu6050.getTemp());

    oled.setCursor(0, 16);
    oled.print("X:");
    oled.setCursor(15, 16);
    oled.print(mpu6050.getAngleX());

    oled.setCursor(0, 30);
    oled.print("Y:");
    oled.setCursor(15, 30);
    oled.print(mpu6050.getAngleY());
    oled.update();
    timer = millis();
  }
}
Конфликт ? не правильное подключение ?
Нет, по отдельности всё работает. Сканер показывает адреса.
 
Изменено:

Kelll31

★✩✩✩✩✩✩
29 Дек 2018
24
24
Где то
Вот на всякий код сканера
C++:
/*
Тестировалось на Arduino IDE 1.8.5
Дата тестирования 26.10.2017г.
*/

#include <Wire.h>
 
void setup(){
 
    Wire.begin();     
    Serial.begin(9600);
    while (!Serial);
    Serial.println("\nI2C Scanner");
}

void loop(){
    byte error, address;
    int nDevices;
 
    Serial.println("Scanning...");
 
    nDevices = 0;
    for(address = 8; address < 127; address++ ){
        Wire.beginTransmission(address);
        error = Wire.endTransmission();
 
        if (error == 0){
            Serial.print("I2C device found at address 0x");
            if (address<16)
                Serial.print("0");
            Serial.print(address,HEX);
            Serial.println(" !");
 
            nDevices++;
        }
        else if (error==4) {
            Serial.print("Unknow error at address 0x");
            if (address<16)
                Serial.print("0");
            Serial.println(address,HEX);
        }
    }
    if (nDevices == 0)
        Serial.println("No I2C devices found\n");
    else
        Serial.println("done\n");
 
    delay(5000);
}
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,267
1,303
Москва
550 байт остается под разные динамические нужды. Есть какое то локальное большое выделение памяти в программе ? Массивы внутри функций ?
 

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
359
574
Гувер олед с буфером используешь? Тогда памяти скорее всего оперативка вылетает
 
  • Лойс +1
Реакции: SashaPetrov

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
359
574
@SashaPetrov, ну, как закодил. В примерах написано как включить буфер, как выключить, и как настроено по умолчанию
 

Matadon

✩✩✩✩✩✩✩
6 Окт 2019
25
0
Ребят, может показаться непрофессиональным, но нигде не могу найти библиотеку GyverOLED именно в zip-архиве, чтобы её в Arduino IDE добавить
Есть у кого-нибудь?
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
208
Ребят, может показаться непрофессиональным, но нигде не могу найти библиотеку GyverOLED именно в zip-архиве, чтобы её в Arduino IDE добавить
Есть у кого-нибудь?
1. Добавлять в Ардуино ИДЕ можно не только zip-архивы, но и папки.
2. Можно просто закинуть папку с библиотекой в Документы/Arduino/libraries/
3. В конце концов, запакуй ручками папку с библиотекой в zip-архив.
 
  • Лойс +1
Реакции: SashaPetrov

Matadon

✩✩✩✩✩✩✩
6 Окт 2019
25
0
1. Добавлять в Ардуино ИДЕ можно не только zip-архивы, но и папки.
2. Можно просто закинуть папку с библиотекой в Документы/Arduino/libraries/
3. В конце концов, запакуй ручками папку с библиотекой в zip-архив.
Пробовал уже папкой
При чём качал каждый файл библиотеки с гитхаба и редактировал содержимое в notepad++
Не хочет
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
208
Пробовал уже папкой
При чём качал каждый файл библиотеки с гитхаба и редактировал содержимое в notepad++
Не хочет
Зачем что-то редактировать в notepad-е?
Скачивай GyverLibs полностью с гитхаба. Там две папки GyverOLED, убери у нужной квадратные скобки из названия папки и можешь её устанавливать.
 
  • Лойс +1
Реакции: Matadon

v.palchik

✩✩✩✩✩✩✩
22 Ноя 2020
5
0
Всем привет!

При использовании библиотеки GyverOLED для вывода тестовой информации на дисплей OLED 0.93 SSD1306_128x64, не выводится на экран последняя строка (восьмая строка). Строка не выводится даже в приложенных к библиотеке примерах. При этом строка по факту есть, просто не печатается. Даже если вручную поставить курсор на восьмую строку методом setCursor или даже setCursorXY. При использовании других библиотек, такой проблемы не возникает.
Плата Arduini UNO (ATmega 328P), с nano такая же история.

Если кто-нибудь сталкивался с такой проблемой, подскажите пожалуйста как её победить!
 

v.palchik

✩✩✩✩✩✩✩
22 Ноя 2020
5
0
приведите код, пожалуйста

#include <GyverOLED.h>
GyverOLED<SSD1306_128x64,OLED_BUFFER> oled;

void setup() {
oled.init(); // Инциализация дисплея
oled.setContrast(255); // Макс. яркость
oled.setScale(1);
}

void loop() {

/* меню */
oled.clear();
oled.home(); // Курсор в левый верхний угол
oled.println("1");
oled.println("2");
oled.println("3");
oled.println("4");
oled.println("5");
oled.println("6");
oled.println("7");
oled.print("8");
oled.update(); // Выводим кадр на дисплей
}

 

bort707

★★★★★★✩
21 Сен 2020
3,066
914
вставляйте код как код, а не как непонятно что, есть же специальная кнопка в редакторе
вот так:
C++:
#include <GyverOLED.h>
GyverOLED<SSD1306_128x64,OLED_BUFFER> oled;

void setup() {
oled.init(); // Инциализация дисплея
oled.setContrast(255); // Макс. яркость
oled.setScale(1);
}

void loop() {

/* меню */
oled.clear();
oled.home(); // Курсор в левый верхний угол
oled.println("1");
oled.println("2");
oled.println("3");
oled.println("4");
oled.println("5");
oled.println("6");
oled.println("7");
oled.print("8");
oled.update(); // Выводим кадр на дисплей
}
По вопросу - а если последнюю строку вывода заменить на
C++:
oled.println("8");
 

v.palchik

✩✩✩✩✩✩✩
22 Ноя 2020
5
0
вставляйте код как код, а не как непонятно что, есть же специальная кнопка в редакторе
вот так:
C++:
#include <GyverOLED.h>
GyverOLED<SSD1306_128x64,OLED_BUFFER> oled;

void setup() {
oled.init(); // Инциализация дисплея
oled.setContrast(255); // Макс. яркость
oled.setScale(1);
}

void loop() {

/* меню */
oled.clear();
oled.home(); // Курсор в левый верхний угол
oled.println("1");
oled.println("2");
oled.println("3");
oled.println("4");
oled.println("5");
oled.println("6");
oled.println("7");
oled.print("8");
oled.update(); // Выводим кадр на дисплей
}
По вопросу - а если последнюю строку вывода заменить на
C++:
oled.println("8");
Я специально убрал println, но разницы нет. Также если вручную поставить курсор на строку и напечатать что-либо, разницы нет. С любым примером из библиотеки такая же ситуация
 

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
Вопрос, а если сделать oled.init(1,400); и да, я же правильно понимаю, что у вас не печатается 7мая строка?
oled.SetCursor(0,7) не работает, всё верно? Просто глянул код в библиотека, там всё вроде ровно, ровно 8 строк (0-7).
Чёт смотрю примеры и не могу понять правильно ли Вы создаёте oled, либо я не ту библиотеку смотрю.
#define OLED_SOFT_BUFFER_64 (ну если буфер на стороне МК)
#include <GyverOLED.h>
GyverOLED oled;
 

v.palchik

✩✩✩✩✩✩✩
22 Ноя 2020
5
0
Вопрос, а если сделать oled.init(1,400); и да, я же правильно понимаю, что у вас не печатается 7мая строка?
oled.SetCursor(0,7) не работает, всё верно? Просто глянул код в библиотека, там всё вроде ровно, ровно 8 строк (0-7).
Чёт смотрю примеры и не могу понять правильно ли Вы создаёте oled, либо я не ту библиотеку смотрю.
#define OLED_SOFT_BUFFER_64 (ну если буфер на стороне МК)
#include <GyverOLED.h>
GyverOLED oled;
Добрый день. Все правильно, не печатается 7я строка, если считать с 0. Сам метод oled.SetCursor(0,7) работает, только на экране ничего не отображается. Библиотеку использую GyverOLED dev, вот ссылка https://github.com/AlexGyver/GyverLibs/tree/master/GyverOLED [dev]

Если, например, использую вот этот пример из библиотеки, то 7я строка также не работает. Заметил, что в примере, где дисплей залит белым, там 7я строка тоже заливается.

C++:
#include <GyverOLED.h>
// попробуй с буфером и без
GyverOLED<SSD1306_128x64, OLED_NO_BUFFER> oled;
// можно передать адрес: GyverOLED oled(0x3C);

char Lorem_ipsum[] = "Lorem ipsum dolor sit amet, лорем ипсум долор сит амет привет народ ё, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip...";
void setup() {
  Serial.begin(9600);
  oled.init();              // инициализация

  // ускорим вывод, ВЫЗЫВАТЬ ПОСЛЕ oled.init()!!!
  Wire.setClock(400000L);   // макс. 800'000
 
  overlapTest();
  printTest();
  party();
  showText();
  scrollText();
  scaleText();
}

void loop() {
}

void party() {
  oled.clear();
  uint32_t tmr = millis();
  oled.setScale(3);
  oled.setCursor(10, 2);
  oled.print("ПЕННАЯ");
  oled.setScale(2);
  oled.setCursor(6, 5);
  oled.print("ВЕЧЕРИНКА!");
  oled.update();
  for (;;) {
    oled.invertDisplay(true);
    delay(200);
    oled.invertDisplay(false);
    delay(200);
    if (millis() - tmr > 5000) return;
  }
}

void overlapTest() {
  oled.clear();
  oled.setScale(1);
  oled.setCursorXY(0, 0);
  oled.print("LOL");
  oled.update();
  delay(500);
  oled.setCursorXY(0, 8);
  oled.print("KEK!");
  oled.update();
  delay(500);

  oled.setCursorXY(40, 4);
  oled.print("LOL");
  oled.update();
  delay(500);
  oled.setCursorXY(40, 12);
  oled.print("KEK!");
  oled.update();
  delay(500);

  oled.setScale(2);
  oled.setCursorXY(0, 24);
  oled.print("LOL");
  oled.update();
  delay(500);
  oled.setCursorXY(0, 40);
  oled.print("KEK!");
  oled.update();
  delay(500);

  oled.setCursorXY(60, 28);
  oled.print("LOL");
  oled.update();
  delay(500);
  oled.setCursorXY(60, 44);
  oled.print("KEK!");
  oled.update();
  delay(5000);
}

void printTest() {
  oled.clear();
  char data0[] = "Привет!";
  char data1 = 'b';
  int data2 = -50;
  float data3 = 1.25;
  oled.home();
  oled.setScale(1);
  oled.println(data0);
  oled.println(data1);
  oled.invertText(true);
  oled.println(data2);
  oled.println(data3);
  oled.invertText(false);
  oled.update();
  delay(5000);
}

void showText() {
  oled.clear();
  oled.home();
  oled.autoPrintln(true);
  oled.setScale(1);
  oled.print(Lorem_ipsum);
  oled.update();
  delay(5000);
}

void scrollText() {
  oled.clear();
  uint32_t tmr = millis();
  oled.autoPrintln(false);
  int val = 128;
  for (;;) {
    //oled.clear();   // ЗАКОММЕНТИРУЙ, ЕСЛИ ВКЛЮЧЕН БУФЕР
    oled.setScale(1);
    oled.setCursor(val, 0);
    oled.print(Lorem_ipsum);

    oled.setScale(2);
    oled.setCursor(val, 1);
    oled.print(Lorem_ipsum);

    oled.setScale(3);
    oled.setCursor(val, 4);
    oled.print(Lorem_ipsum);
    oled.update();
    val--;
    if (millis() - tmr > 5000) return;
  }
}

void scaleText() {
  oled.clear();
  uint32_t tmr = millis();
  byte scale = 1;
  oled.autoPrintln(true);
  for (;;) {
    oled.setScale(scale);
    oled.home();
    oled.print("Привет!");
    oled.update();
    delay(1000);
    oled.clear();
    scale++;
    if (scale > 4) scale = 1;
    if (millis() - tmr > 5000) return;
  }
}
 

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
тогда попробуйте beta там хоть понятно что всё учтено, честно в этой новой библиотеки подключен print.h, через него что-то работает... Если с https://github.com/AlexGyver/GyverLibs/tree/master/GyverOLED [beta] 7мая строка заработает, тогда надо будет копать.... просто напрямую я вообще не нашёл в этом классе функции println, если она и срабатывает, то где то через print.h
 
  • Лойс +1
Реакции: v.palchik