Помогите разобраться с дисплеем OLED LCD Display I2C 0.96 IIC Serial 128X64

WaikMan
Offline
Зарегистрирован: 14.11.2015

raptoridze пишет:

у меня не заработала(( но экран заработал через SPI интерфейс (

 

А как подключать по SPI? там же вроде разводки нет... Может и у меня тоже получится переделать.

raptoridze
Offline
Зарегистрирован: 10.01.2014

я тестером померял вроде есть разводка

экран -  ардуина уно

CS - D12

RES - D13

D/C - D11

SCL - D10

SDA - D9

GRN - GRN

VCC -  +5v

библа адафруит SPI

DMW2mail
Offline
Зарегистрирован: 13.11.2015

Добрый вечер, а как насчет подключения такого дисплея KCS057QV1AJ-G23? Реально это сделать? Подключить к ардуино уно

PaulIV
Offline
Зарегистрирован: 11.10.2015

PaulIV пишет:

WaikMan пишет:

PaulIV пишет:

 Интересно то, что при отрицательных температурах цифра смещена вправо, т.е. не стоит по центру, как в случае с положительными цифрами.

Это потому что цифра с минусом (-4), а минуса в шрифте нет и поэтому там пустое место выводится (пробел) - поэтому и смещается, но без минуса.

Именно об этом я интуитивно догадывался. При двузначных минусовые температурах цифра задевает знак градуса :))) Выход один - надо в библиотеке как-то добавить отсутствующий минус... Пока не знаю как, но попробую.

Спасибо

andriano пишет:

Вообще-то их можно добавить в фонт.

andriano, WaikMan

всё-таки не понимаю, как можно добавить "-" в шрифт BigNumbers. Решил, что в файле DefaultFonts достаточно заменить существующую строку

fontdatatype BigNumbers[] PROGMEM =
{
0x0e, 0x18, 0x2d, 0x0d,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // -
 
 
на собственную и всё, но нет. В чем фокус?
...
fontdatatype BigNumbers[] PROGMEM =
{
0x0e, 0x18, 0x2d, 0x0d,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // -
...
 
Спасибо

 

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

PaulIV, Вы уверены, что Вам нужен именно BigNumbers, а не MegaNumbers?

raptoridze
Offline
Зарегистрирован: 10.01.2014

а никто не встречался с таким багом? уже второй экран - полоска все время горит слева... 

PaulIV
Offline
Зарегистрирован: 11.10.2015

andriano пишет:

PaulIV, Вы уверены, что Вам нужен именно BigNumbers, а не MegaNumbers?

Браво adriano!

Невнимательность. Сейчас добавил (не менял количество символов 0х0D) и увидел этот "-", где ":" (они сменяли друг друга...

fontdatatype MegaNumbers[] PROGMEM =

{
0x18,0x28,0x2D,0x0E,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -
 
Потом поменял 0х0D на 0x0E - это же количество символов в шрифте. Однако, так и не увидел "-" при отрицательных температурах  :))) чтобы автоматически подтянулся...
 
Минус должен подтягиваться автоматически при отрицательных температурах ?
Я прописал его поверх пробела перед цифрой. Потом сместил значек градуса вправо. 
 
Но для чего же тогда при низких температурах сделали смещение цифры вправо... ? Оставили бы по центру и было бы нормально.
 
PaulIV
Offline
Зарегистрирован: 11.10.2015

Всем привет.

Вот ведь неприятности с часиками... Задумал следущее: добавить кнопку на порт8 и диод на порт9 (порт с PWM) arduino nano. По часам либо с нажатием кнопки, порт9 активируется (включая свет). И так же по часам или нажатию кнопки порт9 "медлено гаснет" (выключая лампу через Диммер). Вместо лампы временно поставил светодиод, чтобы PWM испытать. Отдельно каждая програмка работали: часики отдельно, кнопка отдельно. Однако, объединив с часми, диод перестал управляться - горит постоянно. Тут уж не до диммера и PWM. Упрощал код, чтобы свою ошибку найти, но...

#define LED 9   // светодиод
#define BUTTON8 8 // кнопка

#include <OLED_I2C.h>         // Подключение библиотеки для дисплея
OLED  myOLED(SDA, SCL, 8);    
extern uint8_t MegaNumbers[]; // Подключение больших шрифтов
extern uint8_t SmallFont[];   // Подключение маленьких шрифтов

#include <DS1307.h>           // Подключение библиотеки для часового модуля
DS1307 rtc(A0, A1);
Time t;

int brightness = 255;

void setup() {
  Serial.begin(9600);
  pinMode(LED, OUTPUT);    // tell Arduino LED is an output
  pinMode(BUTTON8, INPUT);  // and BUTTON is an input

//  myOLED.begin();
  rtc.halt(false); 
//  rtc.setDOW(MONDAY);         // Настройка дня недели  
//  rtc.setTime(12, 0, 0);      // Настройка времени 
//  rtc.setDate(16, 11, 2015);  // Настройка даты
}

void loop(){

  if (digitalRead(BUTTON8) == HIGH) // Управление светом
  {
   digitalWrite(LED, HIGH);
   }
else
  {
    digitalWrite(LED, LOW);
  }

 
}

 нашел, что если строку // myOLED.begin(); сделать коментарием, то это позволяет вернуть функцию кнопки и диода, но тогда часики не работают. 

Почему это так? 

 

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

А как Вы используете 8-й пин?

Вы его пытаетесь использовать и для инициализации дисплея, и для кнопки.

PaulIV
Offline
Зарегистрирован: 11.10.2015

Нет, порт8 на nano чисто случайно выбрал под кнопку. Дисплей физически к нему никак... не подключен. Сейчас глянул на распиновку nano... полагаю, он специфичный... стоило внимательнее выбирать. Уже выбрал другой порт и вроде как работает. Мои ИЗВИНЕНИЯ....

И спасибо, что откликаетесь на вопросы. 

Logik
Offline
Зарегистрирован: 05.08.2014

raptoridze пишет:

 полоска все время горит слева... 

 

так там и справа, симетрично, полоска вроде, на бантике самки микимауса просматривается хороше. Это сразу после сброса такое? Питание нормальное?

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

PaulIV пишет:

Нет, порт8 на nano чисто случайно выбрал под кнопку. Дисплей физически к нему никак... не подключен.

Аппаратно - да, а программно?

У Вас в коде есть строчка:

OLED  myOLED(SDA, SCL, 8);

Это значит, Вы сообщаете библиотеке дисплея, что пин 8 предназначен ему и он может поступать с ним, как ему заблагорассудится.

А потом этот же пин (которым распоряжается библиотека дисплея) пытаетесь использовать под кнопку. Отсюда и закономерный результат.

PaulIV
Offline
Зарегистрирован: 11.10.2015

Andriano,

СПАСИБО за пояснения, взял другой порт, сейчас всё намного лучше :) сам виноват

Удачи

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Дело не в том, кто виноват, а в осознании того факта, что "распиновка нано" совсем не так специфична.

raptoridze
Offline
Зарегистрирован: 10.01.2014

не справа вроде норм

нот полоска то была то проподала, потом появилась и горит ... питание +5в с ардуины пробывал другие ардуины тоже самое .....  горит сразу после инициализации

shved86
Offline
Зарегистрирован: 26.11.2015

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

Gnomych
Offline
Зарегистрирован: 02.09.2015

to shved86

Добрый день. Я считаю, что будет достаточно просто очистить экран  

myOLED.clrScr();

myOLED.update(); и после этого ни чего на него не выводить, он должен оставаться темным.

Gnomych
Offline
Зарегистрирован: 02.09.2015

Добрый день. Помогите разобраться с данной конструкцией :

Цитата:

fontdatatype BigNumbers[] PROGMEM =

{
0x0e, 0x18, 0x2d, 0x0d,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // -

 
Интересует четыре числа сразу после фигурных скобок и как идет выборка конкретного элемента, по номеру строки или по символам в конце строки??? можно ли добавить вручную символ, что в результате изменится из четырех чисел и как потом вызвать конкретный символ.

 

Logik
Offline
Зарегистрирован: 05.08.2014

Gnomych пишет:

Интересует четыре числа сразу после фигурных скобок и как идет выборка конкретного элемента, по номеру строки или по символам в конце строки??? можно ли добавить вручную символ, что в результате изменится из четырех чисел и как потом вызвать конкретный символ.

В тех числах размер символа - высота и ширина в пикселях. И ещё шото маловажное - может число символов в таблице, не помню точно, я всегда обходился без них.  Выборка по смешению в таблице.

Gnomych
Offline
Зарегистрирован: 02.09.2015

Logik пишет:

Gnomych пишет:

Интересует четыре числа сразу после фигурных скобок и как идет выборка конкретного элемента, по номеру строки или по символам в конце строки??? можно ли добавить вручную символ, что в результате изменится из четырех чисел и как потом вызвать конкретный символ.

В тех числах размер символа - высота и ширина в пикселях. И ещё шото маловажное - может число символов в таблице, не помню точно, я всегда обходился без них.  Выборка по смешению в таблице.

Спасибо, я уже частично сам с цефирями разобрался, например: MegaNumbers[] первые две соответствуют размеру шрифта, т.е. 0х18,0х28, соответствует шрифту 24х40, далее 0х2D - 45 ? так пока и не понял что сие означает, а завершает четверку 0x0D - 13, что соответствует количеству символов в данном шрифте.

PaulIV пишет:

Но для чего же тогда при низких температурах сделали смещение цифры вправо... ? Оставили бы по центру и было бы нормально.

Пробовал заменить пробел на "-", в часах начало двоеточие меняться с минусом. Что интересно «:» вызывается символом «/», а "-" выводится по пробелу. Для осознания отсутствия минуса и сдвига вправо при выводе отрицательных температур нужно курить в сторону формирования вывода температуры. Скорее всего в обработку температуры попадает признак минусовой температуры и это не правильно обрабатывается, в результате возникает коллизия при выводе и на экран выводится пустое место, а затем температура.

Хотелось бы разобраться в формировании самого шрифта и его последующей обработки при выводе на OLED. Может кто даст ссылку на данные темы? К сожалению, по статье http://arduino-project.net/kak-sozdat-svoi-shrifty-tft/, создать шрифты у меня не получилось, что делаю ни так не пойму. Ссылка на видео по этой статье не работает :(.

raptoridze
Offline
Зарегистрирован: 10.01.2014

Переведите хекс в двоичную систему и будет понятнее

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Gnomych пишет:

Интересует четыре числа сразу после фигурных скобок и как идет выборка конкретного элемента, по номеру строки или по символам в конце строки??? можно ли добавить вручную символ, что в результате изменится из четырех чисел и как потом вызвать конкретный символ.

1. По очереди: ширна символа в пикселях, высота символа в пикселях, смещение (ASCII код) первого символа в таблице, количество символов в таблице.

2. Ни номер строки, ни символы в конце строки вообще ни при чем. Таблица знекогенератора - массив. При записи в тексте программы этот массив может быть разбит на строки как угодно и на работу программы это ни коми образом не скажется. Смещение в массиве вычисляется на основании кода ASCII символа и первых трех чисел в заголовке. Примерно так: смещение_нужного_символа = (код_символа - смещение_начала_таблицы)*(высота_символа*ширина_символа/количество_битов_в_байте)

Gnomych
Offline
Зарегистрирован: 02.09.2015

Спасибо andriano, попробую разобраться. По крайней мере понял почему 0х2d. Если не затруднит прокоментируйте мои суждения. Я так понимаю, что при работе скетча просто берется выводимый мною символ в соответствии с кодом ASCII. Например в скетче я пишу "/" при обработке он преобразуется в вид 0х2F который всталяется в формулу и в последствии высчитывается его положение в массиве и т.д. Применительно к шрифту (скорее к массиву с определённым наборо символов) BigNumbers из DefaultFonts.c к библиотеке OLED_I2C.h это будет выглядеть так: (0x2f-0x2d)*(0x18*0x0e/0x08)=0x54. Именно начиная с 85 (DEC) элемента массива и начинается фрагмент "/", и используется для него 42 элемента в массиве, а затем идет другой.

От сюда рождается вывод, что-бы вывести правильно разного рода "-", "=", "+" и т.д. нужно создать знаки (начертить) в соответствии с кодировкой расширить массив символов с 13 до 26 и тогда он будет содержать все символы ASCII начиная 0x20 (пробел) и оканчивая 0x39 ("9"). "Заголовок" массива в этом случае теперь должен выглядеть так: {0x0e, 0x18, 0x20, 0x1a, ....................} 

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Gnomych пишет:

Я так понимаю, что при работе скетча

О каком скетче идет речь, не знаю.

Цитата:

просто берется выводимый мною символ в соответствии с кодом ASCII. Например в скетче я пишу "/" при обработке он преобразуется в вид 0х2F

Никакого преобразования не происходит. Символ "/" изначально (согласно стандарту, придуманному американцами во времена изобретения телеграфа) имеет код 47 - десятичный или 2F - шестнадцатиричный. А шестнадцатеричные числа я языках с С/С++ записываются с префиксом "0х".

Цитата:

который всталяется в формулу и в последствии высчитывается его положение в массиве и т.д. Применительно к шрифту (скорее к массиву с определённым наборо символов) BigNumbers из DefaultFonts.c к библиотеке OLED_I2C.h это будет выглядеть так: (0x2f-0x2d)*(0x18*0x0e/0x08)=0x54. Именно начиная с 85 (DEC) элемента массива и начинается фрагмент "/", и используется для него 42 элемента в массиве, а затем идет другой.

Возможно, и я не совсем точно выразился. В массиве знакогенератора присутствует заголовок (упомянутые 4 байта) и блок данных. Смещение - не с начала массива, а с начала блока данных, т.е. нужно пропустить еще 4 байта заголовка.

Цитата:

От сюда рождается вывод, что-бы вывести правильно разного рода "-", "=", "+" и т.д. нужно создать знаки (начертить) в соответствии с кодировкой расширить массив символов с 13 до 26 и тогда он будет содержать все символы ASCII начиная 0x20 (пробел) и оканчивая 0x39 ("9"). "Заголовок" массива в этом случае теперь должен выглядеть так: {0x0e, 0x18, 0x20, 0x1a, ....................} 

Всего символов ASCII 95 штук (а не 26), и, кстати, этот факт можно проследить по другим (более мелким) фонтам, которые содержат как раз 95 символов. Еще в кодовую таблицу входят 33 управляющих кода: от 0 до 31 и 127, но на экране (и бумаге) они не отображаются, а потому в знакогенератор не входят.

И в заключение еще 2 замечания:

1. Знакогненераторы для крупных символов требуют для довольно большого объема памяти для хранения. Поэтому в ряде особо крупных фонтов разработчик ограничил допустимое количество символов тринадцатью. Прежде, чем расширять таблицы, посчитайте, хватит ли у Вас для них памяти.

2. Если мне не изменяет память, разработчик несколько видоизменил таблицу ASCII для "больших" фонтов, заменив начертание одного из тринадцати символа на начертание другого.

Gnomych
Offline
Зарегистрирован: 02.09.2015

 andriano Спасибо за комментарий. Я имел ввиду не количество символов в таблице а расширение масива шрифтов с 13 до 26 элементов что-бы расширить кол-во символов.

В принципе мне просто нужно было понять как при необходимости внести свои коррективы в шрифты. Редактирование на коленке я уже освоил, правда дедовским методом. Рисую символы ручками на сетке в Exele. Потом формирую код и вставляю код символа в масив. Пока эксперементировал, осознал, что всю имеющуюся графику присутствующую в проекте часы-термометр можно запросто нарисовать в размерах MegaNumbers шрифта и выглядеть это будет нормально.

Нашел удобную таблицу ASCII, может кому пригодится http://foxtools.ru/ASCII#1251

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

1. Существуют программы, которые позволяют самому нарисовать фонт нужного размера или подкорректировать существующий. Сам ими не пользовался.

2. Графику лучше выводить как графику, а не как символы. Для вывода графики существуют специальные процедуры в библиотеке - ими лучше и пользоваться. Тем более, что размер битмапа можно сделать, какой нужно, не привязываясь к размеру того или иного фонта.

AlexRyzh
Offline
Зарегистрирован: 11.11.2015

Использовал русский шрифт, так-то нормально, но например температуру вывожу через перемнную с датчика в виде 23.7 и получается что вместо точки баква ю. И значение температуры (или влажности) имеет вид 23ю7

Библиотеку качал с 29-го топика http://arduino.ru/forum/programmirovanie/pomogite-razobratsya-s-displeem-oled-lcd-display-i2c-096-iic-serial-128x64#comment-106052

Gnomych
Offline
Зарегистрирован: 02.09.2015

AlexRyzh пишет:

Использовал русский шрифт, так-то нормально, но например температуру вывожу через перемнную с датчика в виде 23.7 и получается что вместо точки баква ю. И значение температуры (или влажности) имеет вид 23ю7

Библиотеку качал с 29-го топика http://arduino.ru/forum/programmirovanie/pomogite-razobratsya-s-displeem-oled-lcd-display-i2c-096-iic-serial-128x64#comment-106052

Нужно убедиться, что в шрифтах вообще есть точка. Используй для вывода цифр "цифровой шрифт", там точка точно должна быть, а вообще проблема обсуждалась выше. Я долго не мог понять как вообще эти шрифты устроены. 

AlexRyzh
Offline
Зарегистрирован: 11.11.2015

Для дисплея OLED LCD Display Module I2C 0.96

Подскажите, где взять или как сделать шрифт крупне примерно в 2 раза чем SmallFont?

AlexRyzh
Offline
Зарегистрирован: 11.11.2015

Дисплей OLED LCD Display Module I2C 0.96 работает с библиотекой OLED_I2C (вот этот дисплей http://ru.aliexpress.com/item/New-0-96-I2C-IIC-Serial-128X64-OLED-LCD-LED-Display-Module-For-Arduino-55785/32357566914.html )

Возможно ли запустить его библиотекой от Adafult?

Библиотеки Adafruit_SSD1306 и Adafruit ( Adafruit_GFX.h ) установлены. Пробовал все демо запускать из Adafruit_SSD1306 (ssd1306_128x64_i2c.ino ) запустить - не получается. При компиляции выдает ошибку и выделяет строку #error("Height incorrect, please fix Adafruit_SSD1306.h!");

Megawollt
Offline
Зарегистрирован: 06.12.2015

А что делать тем, у кого spi дисплей, но тоже хочется русский?

AlexRyzh
Offline
Зарегистрирован: 11.11.2015

Megawollt пишет:
А что делать тем, у кого spi дисплей, но тоже хочется русский?

Что за spi дисплей? он же не один в мире.

Посмотрите, может эта статья поможет с русским

http://radiomanoff.at.ua/index/st7920_u8glib_spi_avrstudio_russifikacija...

arduinec
Offline
Зарегистрирован: 01.09.2015

Megawollt пишет:
А что делать тем, у кого spi дисплей, но тоже хочется русский?

Использовать русифицированную библиотеку Adafruit-GFX:
http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafru...
 

GBFZERO
Offline
Зарегистрирован: 18.02.2016

Приветствую.

Относится данная просьба к автору поста №107

Не могли бы Вы дать инструкцию по сосзданию собственных шрифтов и символов под этот экранчик. Находил инструкцию для utft с екселевским файликом для упрощения составления символов, но не получилось - символ не тот получается.

Megawollt
Offline
Зарегистрирован: 06.12.2015

Возникла еще одна непонятка. Речь идет о русификации библиотеки adafruit gfx, а я использую adafruit sd 1306. В чем их отличие?

arduinec
Offline
Зарегистрирован: 01.09.2015

Megawollt пишет:
Возникла еще одна непонятка. Речь идет о русификации библиотеки adafruit gfx, а я использую adafruit sd 1306. В чем их отличие?

Adafruit-GFX является основной библиотекой для дисплеев и другие библиотеки Adafruit пользуются её возможностями, в том числе и Adafruit-SSD1306.

mfxim
Offline
Зарегистрирован: 11.03.2016

s1981 пишет:
Приобрел данный дисплей, скачал библиотеки, но них..я не работает брал отсюда: http://www.youtube.com/watch?v=niA3aPu3-dQ&index=9&list=UU7aH7HVqDvwB1xN... может библиотеки кривые может этот голый мужик пиз...ит. Но ничего не работает, все обшарил. Вот ошибки при компиляции: E:\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp: In constructor 'RobotControl::RobotControl()': E:\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp:8: error: 'LCD_CS' was not declared in this scope E:\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp:8: error: 'DC_LCD' was not declared in this scope E:\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp:8: error: 'RST_LCD' was not declared in this scope E:\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp: In member function 'void RobotControl::begin()': E:\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp:18: error: 'MUXA' was not declared in this scope E:\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp:18: error: 'MUXB' was not declared in this scope E:\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp:18: error: 'MUXC' was not declared in this scope E:\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp:18: error: 'MUXD' was not declared in this scope E:\arduino-1.0.5-r2\libraries\Robot_Control\ArduinoRobot.cpp:19: error: 'MUX_IN' was not declared in this scope Помогите ради христа, очень надо. Заранее благодарю

LCD_CS RST_LCD DC_LCD MUXA MUXB MUX_IN' в начало скетчя и в начало int

Pavlik
Offline
Зарегистрирован: 09.01.2016

  myOLED.clrScr(); // Стираем все с дисплея
  myOLED.setBrightness(10); //Устанавливаем яркость дисплея (в скобрах ставим число от 0 до 255)
   
  if(digitalRead(Pinknopka) == HIGH && flag==0) //если кнопка нажата и перемення flag равна 0 , то ... 
     { 
       mkmstranica_displeya++;   
       flag=1; //это нужно для того что бы с каждым нажатием кнопки происходило только одно действие плюс 100% защита от "дребезга кнопки"  
         
  if(mkmstranica_displeya > 4)//ограничим количество страниц
     { 
       mkmstranica_displeya=1; //так как мы используем только одну кнопку то переключать страницы будем циклично 
     } 
     } 
       
  if(digitalRead(Pinknopka) == LOW && flag==1) //если кнопка НЕ нажата и переменная flag = 1, то ... 
     { 
       flag=0; //обнуляем переменную "knopka" 
     } 
      
  if(mkmstranica_displeya == 1)//первая страница
    { 
       myOLED.setFont(RusFont); 
       myOLED.print("NTVGTHFNEHF YF EKBWT", CENTER, 0);
     //myOLED.setFont(MegaNumbers); 
       myOLED.setFont(BigNumbers); 
       myOLED.print(String(temp1,2), CENTER, 12);
    } 
 
  if(mkmstranica_displeya ==2 )//вторая страница 
    { 
       myOLED.setFont(RusFont); 
       myOLED.print("NTVGTHFNEHF GJUHT<F", CENTER, 0);     
       myOLED.setFont(RusFont); 
       myOLED.print("Yf ekbwt  ", CENTER, 12);
       myOLED.setFont(SmallFont); 
       myOLED.print(String(temp1,2), 86, 12); 
       myOLED.print("~C", 116, 12); 
 
       myOLED.setFont(RusFont); 
       myOLED.print("Ljvf  ", CENTER, 22);
       myOLED.setFont(SmallFont); 
       myOLED.print(String(temp2,2), 86, 22); 
       myOLED.print("~C", 116, 22);
 
       myOLED.setFont(RusFont); 
       myOLED.print("D gjuht,t     ", CENTER, 32);
       myOLED.setFont(SmallFont); 
       myOLED.print(String(temp3,2), 86, 32); 
       myOLED.print("~C", 116, 32);
  
       myOLED.setFont(RusFont); 
       myOLED.print("Lfnxbr LYN-22     ", LEFT, 42);
       myOLED.setFont(SmallFont); 
       myOLED.print(String(t1,2), 86, 42); 
       myOLED.print("~C", 116, 42);  
    } 
      
   if(mkmstranica_displeya==3)//третья страница
    { 
       myOLED.setFont(RusFont); 
       myOLED.print("YFCNHJQRB", CENTER, 0);  
       myOLED.print("Gjllth;. ntgth. -  ", CENTER, 12);
       myOLED.setFont(SmallFont); 
      } 
 
       
  if(mkmstranica_displeya==4)//четвертая страница
    { 
        
// myOLED.setFont(RusFont);
//  myOLED.print("Ntvgthfnehf", CENTER, 0); 
  } 
 

Вы так хорошо всё знаете, подскажите пожалуйста.

За основу взял код ваших часов.

Но захотел сделать одну вещь, добавил кнопку (тоже код чей то взял)

Все работает так как мне надо, НО если я:

1) Добавляю строки с выводом чего то в монитор порта

2) Или расскоментирую последние две строки в приведенном выше куске кода

Всё капец, на дисплее отображается всё, кроме показаний температуры. абсолютно везде, на любой "странице" дисплея.

размер скетча 21878 из 30720

serial.begin(9600) пробывал увеличивать, думал из-за этого.

Подскажите, что еще может быть? Куда копать?

 

 

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

1. Кроме размера кода неплохо бы контролировать размер занятой оперативной памяти.

2. В программировании принято нумеровать, начиная с 0 , а не с 1. ПРоверьте, что страницы нумеруются именно от 1 до 4, а не от 0 до 3.

Pavlik
Offline
Зарегистрирован: 09.01.2016

andriano пишет:

1. Кроме размера кода неплохо бы контролировать размер занятой оперативной памяти.

2. В программировании принято нумеровать, начиная с 0 , а не с 1. ПРоверьте, что страницы нумеруются именно от 1 до 4, а не от 0 до 3.

Второе точно отпадает, работает как нужно. Хоть и начинается не с нуля.

А вот по поводу первого спасибо. Использова 1.0.6, там про память ничего не выводится. Поставил последнюю 1.6.8 сразу выдало

Скетч использует 17 110 байт (55%) памяти устройства. Всего доступно 30 720 байт.
Глобальные переменные используют 1 759 байт (85%) динамической памяти, оставляя 289 байт для локальных переменных. Максимум: 2 048 байт.
Недостаточно памяти, программа может работать нестабильно.
 
Кстати удивило, то что в 1.0.6 скетч весил 20782, а тут аж 17000 байт. Странно. 
Осталось теперь как то научится находить, то что занимает так много памяти.
 
Во всяком случае спасибо вам.
andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Pavlik пишет:

Осталось теперь как то научится находить, то что занимает так много памяти.

Я бы начал с того, что перенес все текстовые константы в PROGMEM.

Вероятно также, что 1кбайт из двух занимает экранный буфер дисплея.

raptoridze
Offline
Зарегистрирован: 10.01.2014

у меня в моем проекте код занимает 32250 байт из 32256 в уне

и память на 95% при этом все ровно работает ))

ищите гдето утечку, обращение к массиву большему чем задикларированному

типа обьявлено int i[10]; а обращение к i[10]  даст похожий эффект

 

пс

и уходите от типов String,  этот тип тащит за собой большую библиотеку.... 

используйте массивы чаров

MacSys
Offline
Зарегистрирован: 18.03.2016

Всем приветы, не знаю почему, но у меня библиотека OLED_I2C не работает с моим экраном 1.3" OLED I2C

На экране примерно такое содержание при заливке скетча в Mega2560

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

Если использовать библиотеку u8glib и раскоментировать там строки ssd1306 или sh1106 то на экране отображается нормально читаемая информация. Перепроверил листинг инициализации в OLED_i2C всё соотвествует строкам в u8glib, но работать не хочет.

vampo
Offline
Зарегистрирован: 07.06.2016

У меня картина один в один. заказал с китая три дисплея 1.3", все три так показывают.  Причем 0,96" и 1.54" дисплеи показывают нормально.  Библиотеки пробовал три штуки OLED_I2C Adafruit и OzOLED из них Адафрукт показывает, но кверхногами и всеравно сдвинуто в бок. :(

 

vampo
Offline
Зарегистрирован: 07.06.2016

Ожил дисплей, но только с библиотекой MicroLCD

https://github.com/stanleyhuangyc/MultiLCD/tree/master/MicroLCD

 

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

насколько я помню, в 1.3" OLED стоит другой контроллер, не SSD1306.

Как в MicroLCD дела с кириллицей и загрузкой своих шрифтов?

MacSys
Offline
Зарегистрирован: 18.03.2016

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

Павел_воля
Offline
Зарегистрирован: 04.12.2016

Привет всем!

Купил дисплейчик OLED 128 x 64 , чип Ssd1306

двухцветный. Проблема такая что по оси x пиксели высвечиваются одна возле одной все четко в линию, а вот по оси y высвечиваются через пиксель как бы линия одна засвечена потом пропуск и опять есть . Кстати при отправке дисплею данные "0xFF" высвечиваются только 4 бита из 8 через один!  Что это такой дисплей или я как-то не так с прогой намудрил.!? Дисплейчик подключен к меге328р типа мини ардуинка. Пробовал все библы все равно также. Что это, кто что знает!?

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

попробуй в библиотеке указать другой контроллер из серии SSD13xx.

Павел_воля
Offline
Зарегистрирован: 04.12.2016

Перепробовал все библы от всех, все так же само! Вопрос, можно ли переключить/паять под spi интерфейс, там же только резисторы нужно правильно перепаять?