Подключения Oled дисплея не через i2c

Тема в разделе "Arduino & Shields", создана пользователем EandV, 3 апр 2019.

  1. Andrey12

    Andrey12 Гик

    Да, правильно, какую библиотеку дисплея используете?
     
  2. EandV

    EandV Нерд

    OLED_I2C
     
  3. Andrey12

    Andrey12 Гик

    ну их с такими названиями несколько, ссылку на нее можно? Или архив библиотеки приложите к сообщению.
     
  4. EandV

    EandV Нерд

    Прошу прощения, попутал, я использую библиотеку iarduin:confused:LED_txt.h, т.к. в ней более адекватно русский шрифт сделан.

    Качал отсюда:
    https://lesson.iarduino.ru/page/urok-8-russkiy-yazyk-na-oled-displee-128x64/

    Выложил архив отдельно на яндекс диск.
    https://yadi.sk/d/acDGOjd8_wGvNg
     
  5. Andrey12

    Andrey12 Гик

    Попробуй, писал на коленке, может и не работает проверить негде сейчас.
    Дополненная библиотека в прикрепленном файле
    Код (C++):
    #include <iarduino_OLED_txt.h>                                         // Подключаем библиотеку iarduino_OLED_txt.
    iarduino_OLED_txt myOLED(0x3C);                                        // Объявляем объект myOLED, указывая адрес дисплея на шине I2C: 0x3C или 0x3D.
                                                                           //
    extern uint8_t SmallFontRus[];                                         // Подключаем шрифт SmallFontRus.
                                                                           // Если Вы не используете Кириллицу, то лучше подключить шрифт SmallFont, он займет меньше места в памяти программ.
    void setup(){                                                          //
        myOLED.begin();                                                    // Инициируем работу с дисплеем.
        myOLED.setFont(SmallFontRus);                                      // Указываем шрифт который требуется использовать для вывода цифр и текста.
                                                                           //
        myOLED.print( 123456789 , 0, 0);                                   // Выводим целое положительное число начиная с 0 столбца 0 строки.
        myOLED.print(-123456789 , 0, 1);                                   // Выводим целое отрицательное число начиная с 0 столбца 1 строки.
        myOLED.print( 123456789 , 0, 2, HEX);                              // Выводим целое положительное число начиная с 0 столбца 2 строки, в 16-ричной системе счисления.
        myOLED.print( 123456789 , 0, 3, OCT);                              // Выводим целое положительное число начиная с 0 столбца 3 строки, в 8-ричной системе счисления.
        myOLED.print(-123.456789, 0, 4);                                   // Выводим число с плавающей точкой  начиная с 0 столбца 4 строки, по умолчанию отобразится 2 знака после запятой.
        myOLED.print( 123.456789, 0, 5, 3);                                // Выводим число с плавающей точкой  начиная с 0 столбца 5 строки, указывая 3 знака после запятой.
        myOLED.print( 123       , 0, 6, BIN);                              // Выводим целое положительное число начиная с 0 столбца 6 строки, в 2-ичной системе счисления.
        myOLED.print( 123       , 0, 7, 12);                               // Выводим целое положительное число начиная с 0 столбца 7 строки, в 12-ричной системе счисления.


        delay(3000);
        myOLED.displaySleep(true); // засыпаем
        delay(3000);
        myOLED.displaySleep(false); // просыпаемся

    }                                                                      //
                                                                           //
    void loop(){}                                                          //
     
     

    Вложения:

    EandV нравится это.
  6. EandV

    EandV Нерд

    Спасибо большое ! Вечерком потестирую.

    Я вчера попробовал убрать мосфет из схемы и вместо ухода в сон просто очищал дисплей. Потребляет полностью очищенный экран 1мА. В приницпе тоже годится.
     
    Andrey12 нравится это.
  7. EandV

    EandV Нерд

    Ещё раз спасибо! Библиотека рабочая, в режиме сна амперметр показывает 0,000А!

    Но, что самое забавное, проблема была в другом. Пробовал по разному переписывать скетч, тестировать отдельные куски и т.д.
    Выяснилось, что косяк был вот здесь:
    Код (C++):
    if (RTC.read(tm)) {
    myOLED.print(tm.Hour,1, 6);      
    myOLED.print(":",15, 6);
    myOLED.print(tm.Minute,21, 6);
    myOLED.print(":",35, 6);
    myOLED.print(tm.Second,42, 6);
    }  
    Ардуина в одной строчке сразу обращается по I2C к двум модулям: с DS3231 снимает время, на Дисплей посылает данные.
    Когда были включены всякие уходы в сон, отключения через мосфет и т.д. косяков не было заметно, когда начал тестить отдельно, дисплей в какие-то моменты сходил с ума, показывал "рябь" как кинескопы старых телевизоров и т.д., модуль времени тоже тупил.
    Разнес во времени: сначала присвоение показателей с S3231 переменным, потом вывод на дисплей значений переменных и всё стало нормально работать.
     
  8. parovoZZ

    parovoZZ Гуру

    ну молодец!
     
  9. カオナシ

    カオナシ Нерд

    Не увидел. По моему, последовательно.
     
  10. EandV

    EandV Нерд

    Как бы то ни было, теперь работает!

    Всем спасибо, за советы!