Вы не там ищете. Я же Вам написал. что ЕСТЬ, но Вы "поставили штамп" "стёб" и категорически подтвердили его (#299). Ну, стёб, так стеб, я и отвалислся. Если бы Вы вместо того, что штампы расставлять, спросили где и что, я бы сразу ответил, а так ... Вы лучше знаете, чего мне лезть?
Цифровизацией эмоций и преобразованием их в какие-то материальные образы (изображения и т.п.) занимается т.н. "перформативный театр". Их не так мало по всему миру. У них тоже датчики и всё такое. Не знаю, какие контроллеры, но те датчики, что видел к ардуино вполне подключаемы.
Начните читать отсюда, а там уже поймёте как и что искать.
Интересная тема. Если такой нейродатчик не игрушка-рандомайзер, то было бы забавно его к мониторингу прикрутить и вычислять уровень накопленной радости помесячно.
Индикатор - тренажёр для тренировки считывания "штрих кодов" без сканера. Может быть полезен противникам чипизации, нумерации, и просто пересчёта людей по пальцам в качестве адаптационного релакса.
///////////////////индикатор "штрих код"
#include <OLED_I2C.h>
OLED myOLED(SDA, SCL);
int t = 50; // пауза между считываниями потенциометра
int yn = 45; // координата нижней точки полоски
int yv = 2; // верхней точки полоски
int xx;// переменная хранения предыдущего значения данных с потенциометра
int num = 0; // переменная хранения числа
int k = 1; // счётчик полосок в числе
extern uint8_t SmallFont[];
void setup()
{
pinMode(11, OUTPUT);
digitalWrite(11, HIGH);
myOLED.begin();
myOLED.invert(0);//инверсия цвета
myOLED.setFont(SmallFont);
}
void loop()
{
int x = map(analogRead(A0), 0, 1023, 0, 50); //считывание новых данных с потенциометра
if (abs(x - xx) > 1) { // если потенциометр крутанули
myOLED.clrScr(); // очищаем дисплей
myOLED.drawRect(9, 0, 118, 63); //рамка
for (int i = 10; i < 118; i = i + 3) { // условие начертания 36 полос
bool b = random(0, 2); // псевдослучайный выбор цвета полосы-штриха
num = num + k * b; k = 2 * k; // перевод набора 3 полосок в число 0-7
if (k == 8) {
myOLED.printNumI(num, i - 5, 50); //дублирование 3 штрихов числом соответствующим
num = 0;
k = 1;
}
if (i % 9 == 1) {
myOLED.drawLine(i, yn + 10, i, yn); // метка над каждым числом для удобства визуального пересчёта штрихов в числа
}
if (b == 1) {
myOLED.drawLine(i, yn, i, yv); // видимый штрих из 3 отрезков и его положение
myOLED.drawLine(i + 1, yn, i + 1, yv); //
myOLED.drawLine(i + 2, yn, i + 2, yv); //
}
}
}
xx = x; // перевод текущего значения в предыдущее
myOLED.update(); delay(t);
}
Греешь со стороны платы феном до горячего состояния текстолита и аккуратно поддевая стекло отлепляешь его от платы. Причем поддевать его нужно между платой и скотчем, не оказывая давление на само стекло.
Важно не перегреть, иначе отвалятся припаянные детали и погорят пиксели на стекле, а также не переусердствовать с усилием на стекло - может лопнуть.
Чтобы поправить стекло, совсем не обязательно его снимать - достаточно нагреть плату и немного повернуть стекло в нужную сторону
А такой вопрос - где можно добыть готовые фонты-шрифты наших букв размером 32,48 на 24,32 например? Возникла фантазия - сделать шильдик носимый из 3 экранчиков, "аккума" и про мини 328. Правда пока минимизация размеров это вопрос.
А такой вопрос - где можно добыть готовые фонты-шрифты наших букв размером 32,48 на 24,32 например?
фонтов в инете куча, можно сконвертить в свой формат. Только имейте в виду, что один растровый фонт размером 32х24 всего на 30 символов уже займет весь флеш 328-й атмеги
Прикупил себе светодиодный бейдж 11*55 светодиодов по рублю за светодиод. Спросил у продавца где программа управления, он говорит внутри :-)... Ни хрена там нет. При подключении к ПК бейдж определился как LS32 Custm HID и всё. Поиски по обзорам привели опять на китайский ресурс. Скачал архив, поставил - программа по русски ни бе-бе (о чём честно написано в инструкции), но позволяет вставлять картинки, которые можно создавать редактором встроенным в неё, в который встроена возможность набирать текст, в котором есть кириллица разных размеров и видов. Вывод:какие китайцы молодцы все вместе и не очень по отдельности!
Написал продавцу чтобы не глумился над покупателями, дал ссылку, а он даже не прочитал.
Вопрос: как к Ардуино можно подсоединить такой чудный светодиодный экран? Может кто встречал самодельные программы-переходники для ПК? А то очень хочется шкалу какую нибудь сделать :-)
Гранаты, по ходу дела, не той системы. Интернеты пишут, что есть модификация бейджа с USB-Serial и там стоит обычный пролифик, который можно обойти, получив директный коннект на UART: http://www.daveakerman.com/?p=1440
Да конечно, я продавца молчание не понял, буду интересоваться дальше.
Жена тоже захотела, но зелёный, и с блютуз, и что б диск с программой был. В общем у другого продавца за 1000 уже купил. Написал про диск с ПО - сказал вышлет и ссылки на архив дал.
Кстати, что я сам нашёл архив имеет две программы "для просто людей и для профи" :-)
Это как? USB к ардуине подключать? Подключите через USB-host, потом с HID имейте долгие и бессмысленные отношения. На Али брали бейдж? Ссылка осталась?
Да, нет конечно. Программа на ПК, включающая по координатам светодиоды бейджа как вариант.
На уровне программ ПК - по гитхабам валяются скрипты на Питоне. Я просто в гугле по 'LS32 Custm HID ' поискал, а с найденных ресурсов попрыгал по ссылкам на реверс протоколов и пр.
Нафига возиться с тупым китайским бейджем, если можно взять такие же матрицы 8х8 - их подключение к ардуино давно отработано, народ массово делает из них бегущие строки, часы, термометры и прочее и прочее. Пара примеров есть у нас в "Проектах", есть такое и у гайвера, да вообще все кому не лень давно освоили такие дисплеи
Нафига возиться с тупым китайским бейджем, если можно взять такие же матрицы 8х8 - их подключение к ардуино давно отработано, народ массово делает из них бегущие строки, часы, термометры и прочее и прочее. Пара примеров есть у нас в "Проектах", есть такое и у гайвера, да вообще все кому не лень давно освоили такие дисплеи
На max7219 я делал поделки - светодиодный куб и бегущую строку с голосовым вводом. В первой родные матрицы заменял паяными сетками светодиодов, во второй закрывал светофильтром. Как то внешне они мне не очень нравятся. А тут такие изящные смд светодиоды, расположены лесенкой. Такие матрицы найти бы 8*8.
Я серьёзно спросил.., а вы...
а я серьёзно ответил
:-) Не уловил связи между эмоциями и внутренностями.
Обзор биометрических датчиков Ардуино.
http://digitrode.ru/articles/1523-biometricheskie-datchiki-sovmestimye-s...
Про эмоции нет.
Обзор биометрических датчиков Ардуино.
http://digitrode.ru/articles/1523-biometricheskie-datchiki-sovmestimye-s...
Про эмоции нет.
если там их нет, но это не значит что их нет в принципе, а связь - эмоции напрямую связаны со здоровьем )))
Косвенная есть наверное, но тогда проще не инструментально устанавливать эмоцию, а путём тест-опроса испытуемого :-)
Обзор биометрических датчиков Ардуино.
http://digitrode.ru/articles/1523-biometricheskie-datchiki-sovmestimye-s...
Про эмоции нет.
Вы не там ищете. Я же Вам написал. что ЕСТЬ, но Вы "поставили штамп" "стёб" и категорически подтвердили его (#299). Ну, стёб, так стеб, я и отвалислся. Если бы Вы вместо того, что штампы расставлять, спросили где и что, я бы сразу ответил, а так ... Вы лучше знаете, чего мне лезть?
Цифровизацией эмоций и преобразованием их в какие-то материальные образы (изображения и т.п.) занимается т.н. "перформативный театр". Их не так мало по всему миру. У них тоже датчики и всё такое. Не знаю, какие контроллеры, но те датчики, что видел к ардуино вполне подключаемы.
Начните читать отсюда, а там уже поймёте как и что искать.
Интересная тема. Если такой нейродатчик не игрушка-рандомайзер, то было бы забавно его к мониторингу прикрутить и вычислять уровень накопленной радости помесячно.
Косвенная есть наверное, но тогда проще не инструментально устанавливать эмоцию, а путём тест-опроса испытуемого :-)
Зачем так сложно?
Надо подходить конструктивно: задаем целевую эмоцию, например, страх, и обеспечиваем эту эмоцию у пациента доступными средствами.
Косвенная есть наверное, но тогда проще не инструментально устанавливать эмоцию, а путём тест-опроса испытуемого :-)
Зачем так сложно?
Надо подходить конструктивно: задаем целевую эмоцию, например, страх, и обеспечиваем эту эмоцию у пациента доступными средствами.
Да, здесь всё тонко-процесс измерения величины может существенно изменить её значение.
Начните читать отсюда, а там уже поймёте как и что искать.
Читаю, читаю всё одно к слову электроэнцефалограф приводит :-)
https://habr.com/ru/post/536532/
Индикатор - тренажёр для тренировки считывания "штрих кодов" без сканера. Может быть полезен противникам чипизации, нумерации, и просто пересчёта людей по пальцам в качестве адаптационного релакса.
///////////////////индикатор "штрих код" #include <OLED_I2C.h> OLED myOLED(SDA, SCL); int t = 50; // пауза между считываниями потенциометра int yn = 45; // координата нижней точки полоски int yv = 2; // верхней точки полоски int xx;// переменная хранения предыдущего значения данных с потенциометра int num = 0; // переменная хранения числа int k = 1; // счётчик полосок в числе extern uint8_t SmallFont[]; void setup() { pinMode(11, OUTPUT); digitalWrite(11, HIGH); myOLED.begin(); myOLED.invert(0);//инверсия цвета myOLED.setFont(SmallFont); } void loop() { int x = map(analogRead(A0), 0, 1023, 0, 50); //считывание новых данных с потенциометра if (abs(x - xx) > 1) { // если потенциометр крутанули myOLED.clrScr(); // очищаем дисплей myOLED.drawRect(9, 0, 118, 63); //рамка for (int i = 10; i < 118; i = i + 3) { // условие начертания 36 полос bool b = random(0, 2); // псевдослучайный выбор цвета полосы-штриха num = num + k * b; k = 2 * k; // перевод набора 3 полосок в число 0-7 if (k == 8) { myOLED.printNumI(num, i - 5, 50); //дублирование 3 штрихов числом соответствующим num = 0; k = 1; } if (i % 9 == 1) { myOLED.drawLine(i, yn + 10, i, yn); // метка над каждым числом для удобства визуального пересчёта штрихов в числа } if (b == 1) { myOLED.drawLine(i, yn, i, yv); // видимый штрих из 3 отрезков и его положение myOLED.drawLine(i + 1, yn, i + 1, yv); // myOLED.drawLine(i + 2, yn, i + 2, yv); // } } } xx = x; // перевод текущего значения в предыдущее myOLED.update(); delay(t); }С голубым свечением экранчики по приятнее. Если бы китайцы ещё ровно клеили дисплеи к платам, было бы совсем хорошо :-)
Интересно, никто не пробовал отделить дисплей от платки ножичком, что бы поправить?
/////////////////// индикатор перебора-сдвигания страниц #include <OLED_I2C.h> OLED myOLED(SDA, SCL); extern const unsigned char schkala_A[]; extern const unsigned char schkala_B[]; extern const unsigned char schkala_C[]; extern const unsigned char schkala_D[]; extern const unsigned char schkala_E[]; extern const unsigned char schkala_F[]; int t = 30; // пауза между считываниями потенциометра void setup() { pinMode(11, OUTPUT); digitalWrite(11, HIGH); myOLED.begin(); myOLED.invert(0);//инверсия цвета } void loop() { int p = map(analogRead(A0), 0, 1023, 1, 383); // считывание потенциометра myOLED.clrScr(); // очищаем дисплей ////////////////////////// if (p <= 64) { myOLED.drawBitmap(0, 0, schkala_A, 64, 64); myOLED.drawBitmap(12, 0, schkala_B, 64, 64); myOLED.drawBitmap(24, 0, schkala_C, 64, 64); myOLED.drawBitmap(36, 0, schkala_D, 64, 64); myOLED.drawBitmap(48, 0, schkala_E, 64, 64); myOLED.drawBitmap(60 + p, 0, schkala_F, 64, 64); } //////////// if (p <= 128 && p > 64) { myOLED.drawBitmap(0, 0, schkala_A, 64, 64); myOLED.drawBitmap(12, 0, schkala_B, 64, 64); myOLED.drawBitmap(24, 0, schkala_C, 64, 64); myOLED.drawBitmap(36, 0, schkala_D, 64, 64); myOLED.drawBitmap(48 + p - 64, 0, schkala_E, 64, 64); myOLED.drawBitmap(124, 0, schkala_F, 64, 64); } //////////// if (p <= 192 && p > 128) { myOLED.drawBitmap(0, 0, schkala_A, 64, 64); myOLED.drawBitmap(12, 0, schkala_B, 64, 64); myOLED.drawBitmap(24, 0, schkala_C, 64, 64); myOLED.drawBitmap(36 + p - 128, 0, schkala_D, 64, 64); myOLED.drawBitmap(124-12, 0, schkala_E, 64, 64); myOLED.drawBitmap(124, 0, schkala_F, 64, 64); } //////////// if (p <= 256 && p > 192) { myOLED.drawBitmap(0, 0, schkala_A, 64, 64); myOLED.drawBitmap(12, 0, schkala_B, 64, 64); myOLED.drawBitmap(24+p-192, 0, schkala_C, 64, 64); myOLED.drawBitmap(124-24, 0, schkala_D, 64, 64); myOLED.drawBitmap(124-12, 0, schkala_E, 64, 64); myOLED.drawBitmap(124, 0, schkala_F, 64, 64); } //////////// if (p <= 320 && p > 256) { myOLED.drawBitmap(0, 0, schkala_A, 64, 64); myOLED.drawBitmap(12+p-256, 0, schkala_B, 64, 64); myOLED.drawBitmap(124-36, 0, schkala_C, 64, 64); myOLED.drawBitmap(124-24, 0, schkala_D, 64, 64); myOLED.drawBitmap(124-12, 0, schkala_E, 64, 64); myOLED.drawBitmap(124, 0, schkala_F, 64, 64); } //////////// if (p <= 384 && p > 320) { myOLED.drawBitmap(0+p-320, 0, schkala_A, 64, 64); myOLED.drawBitmap(124-48, 0, schkala_B, 64, 64); myOLED.drawBitmap(124-36, 0, schkala_C, 64, 64); myOLED.drawBitmap(124-24, 0, schkala_D, 64, 64); myOLED.drawBitmap(124-12, 0, schkala_E, 64, 64); myOLED.drawBitmap(124, 0, schkala_F, 64, 64); } myOLED.update(); delay(t); }#include <avr/pgmspace.h> const unsigned char schkala_A[]PROGMEM = { 0XFF,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01, 0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01, 0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01, 0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0XFF, 0XFF,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,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,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,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE, 0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F, 0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,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,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,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,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80, 0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80, 0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80, 0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0XFF }; const unsigned char schkala_B[]PROGMEM = { 0XFF,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01, 0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01, 0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0XC1,0XC1,0XC1,0XC1, 0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0X01,0X01,0X01,0X01,0X01,0XFF, 0XFF,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,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,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,0X0F,0X0F,0X0F,0X0F, 0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,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,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,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,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0, 0XF0,0XF0,0XF0,0XF0,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,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,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,0XFF, 0XFF,0X80,0X80,0X80,0X80,0X80,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83, 0X83,0X83,0X83,0X83,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80, 0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80, 0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0XFF }; const unsigned char schkala_C[]PROGMEM = { 0XFF,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01, 0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01, 0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0XC1,0XC1,0XC1,0XC1, 0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0X01,0X01,0X01,0X01,0X01,0XFF, 0XFF,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,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,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,0X0F,0X0F,0X0F,0X0F, 0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE, 0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F, 0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0, 0XF0,0XF0,0XF0,0XF0,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,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,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,0XFF, 0XFF,0X80,0X80,0X80,0X80,0X80,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83, 0X83,0X83,0X83,0X83,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80, 0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80, 0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0XFF }; const unsigned char schkala_D[]PROGMEM = { 0XFF,0X01,0X01,0X01,0X01,0X01,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1, 0XC1,0XC1,0XC1,0XC1,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01, 0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0XC1,0XC1,0XC1,0XC1, 0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0X01,0X01,0X01,0X01,0X01,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F, 0X0F,0X0F,0X0F,0X0F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0X0F,0X0F,0X0F, 0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,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,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,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,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0, 0XF0,0XF0,0XF0,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XF0,0XF0,0XF0,0XF0, 0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X80,0X80,0X80,0X80,0X80,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83, 0X83,0X83,0X83,0X83,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80, 0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X83,0X83,0X83,0X83, 0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X80,0X80,0X80,0X80,0X80,0XFF }; const unsigned char schkala_E[]PROGMEM = { 0XFF,0X01,0X01,0X01,0X01,0X01,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1, 0XC1,0XC1,0XC1,0XC1,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01, 0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0XC1,0XC1,0XC1,0XC1, 0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0X01,0X01,0X01,0X01,0X01,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F, 0X0F,0X0F,0X0F,0X0F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0X0F,0X0F,0X0F, 0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE, 0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F, 0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0, 0XF0,0XF0,0XF0,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XF0,0XF0,0XF0,0XF0, 0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X80,0X80,0X80,0X80,0X80,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83, 0X83,0X83,0X83,0X83,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80, 0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X83,0X83,0X83,0X83, 0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X80,0X80,0X80,0X80,0X80,0XFF }; const unsigned char schkala_F[]PROGMEM = { 0XFF,0X01,0X01,0X01,0X01,0X01,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1, 0XC1,0XC1,0XC1,0XC1,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01, 0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0X01,0XC1,0XC1,0XC1,0XC1, 0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0X01,0X01,0X01,0X01,0X01,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F, 0X0F,0X0F,0X0F,0X0F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0X0F,0X0F,0X0F, 0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE, 0XFE,0XFE,0XFE,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFE,0XFE,0XFE,0XFE, 0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F, 0X7F,0X7F,0X7F,0X7F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X7F,0X7F,0X7F, 0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0, 0XF0,0XF0,0XF0,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XF0,0XF0,0XF0,0XF0, 0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0XFF, 0XFF,0X80,0X80,0X80,0X80,0X80,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83, 0X83,0X83,0X83,0X83,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80, 0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X80,0X83,0X83,0X83,0X83, 0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X83,0X80,0X80,0X80,0X80,0X80,0XFF };Вариант перелистывания страниц, удобно для меню может быть.
Интересно, никто не пробовал отделить дисплей от платки ножичком, что бы поправить?
У меня два прямоугольных есть - стекляшка на двусторонний скотч приклеена к плате.
Греешь со стороны платы феном до горячего состояния текстолита и аккуратно поддевая стекло отлепляешь его от платы. Причем поддевать его нужно между платой и скотчем, не оказывая давление на само стекло.
Важно не перегреть, иначе отвалятся припаянные детали и погорят пиксели на стекле, а также не переусердствовать с усилием на стекло - может лопнуть.
Чтобы поправить стекло, совсем не обязательно его снимать - достаточно нагреть плату и немного повернуть стекло в нужную сторону
Короче - без фанатизма!
Погрел, попробовал сдвинуть - сдвинул. Но через некоторое время дисплей частично сполз назад :-)
Забавно, что голубого свечения (слева) экран отличается от других размерами во всех трёх осях.
А голубые - они всегда такие. Радужные, одним словом. У них все через задницу.
Детский вопрос: как добавить шрифт в библиотеку?
Детский вопрос: как добавить шрифт в библиотеку?
Постиг таинство.
Какой красивый фонт-шрифт для часов :-)
/////////////проверка одновременной работы 3 экранов на 3 разных индикаторах-шкалах #include <OLED_I2C.h> OLED myOLED(SDA, SCL); #define disp_1 12 // управляющие дисплееями выводы #define disp_2 11 #define disp_3 10 int t = 1000; // пауза между считываниями потенциометра extern uint8_t BigZif_0_9[];//внебиблиотечные цифры - самопальный шрифт void setup() { delay(50); ////// подключение всех дисплеев pinMode(disp_1, OUTPUT); digitalWrite(disp_1, HIGH); myOLED.begin(); digitalWrite(disp_1, LOW); delay(50); ////// pinMode(disp_2, OUTPUT); digitalWrite(disp_2, HIGH); myOLED.begin(); digitalWrite(disp_2, LOW); delay(50); //////// pinMode(disp_3, OUTPUT); digitalWrite(disp_3, HIGH); myOLED.begin(); digitalWrite(disp_3, LOW); delay(50); //////// myOLED.setFont(BigZif_0_9);//внебиблиотечные цифры - самопальный шрифт myOLED.invert(0);//инверсия цвета } void loop() { myOLED. printNumI(random(0, 3), 0, 0); myOLED.printNumI(random(0, 4), 63, 0); //первая пара myOLED.drawLine(127, 0, 127, 63); dis_3(); myOLED. printNumI(random(0, 6), 0, 0); myOLED.printNumI(random(0, 10), 63, 0); //вторая пара myOLED.drawLine(0, 0, 0, 63); dis_2(); delay(t); } //////////////////////////// //////////////////////////// /////////////////////////// void dis_1() { //функции обновления изображений на экранах digitalWrite(disp_1, HIGH); myOLED.update(); digitalWrite(disp_1, LOW); myOLED.clrScr(); // очищаем дисплей } void dis_2() { digitalWrite(disp_2, HIGH); myOLED.update(); digitalWrite(disp_2, LOW); myOLED.clrScr(); // очищаем дисплей } void dis_3() { digitalWrite(disp_3, HIGH); myOLED.update(); digitalWrite(disp_3, LOW); myOLED.clrScr(); // очищаем дисплей } /////////////////////////Детский вопрос: как добавить шрифт в библиотеку?
Постиг таинство.
Какой красивый фонт-шрифт для часов :-)
Для таких вещей нужен и дисплейчик соответствующий.
http://arduino.ru/forum/proekty/bibliotechka-dlya-oled-displeya-ssd1322-4-wire-spi-256x64-16-ottenkov-serogo
https://www.youtube.com/watch?v=c7SvhwqGSiw
Красивый, есть даже зелёные, но стоит от 1400 с гаком - как 10 штук ssd1306 :-)
Попробовал имитацию перекидных табличек-цифр, не понравилось. Пришлось цифры аш в две половинки-фонты преобразовывать.
/////////////проверка одновременной работы 3 экранов на 3 разных индикаторах-шкалах #include <OLED_I2C.h> OLED myOLED(SDA, SCL); #define disp_1 12 // управляющие дисплееями выводы #define disp_2 11 #define disp_3 10 int t = 1500; // пауза между считываниями потенциометра extern uint8_t V_BigZif_0_9[];//внебиблиотечные цифры - самопальный шрифт extern uint8_t N_BigZif_0_9[];//внебиблиотечные цифры - самопальный шрифт int n=1;// int nn=0;// void setup() { delay(50); ////// подключение всех дисплеев pinMode(disp_1, OUTPUT); digitalWrite(disp_1, HIGH); myOLED.begin(); digitalWrite(disp_1, LOW); delay(50); ////// pinMode(disp_2, OUTPUT); digitalWrite(disp_2, HIGH); myOLED.begin(); digitalWrite(disp_2, LOW); delay(50); //////// pinMode(disp_3, OUTPUT); digitalWrite(disp_3, HIGH); myOLED.begin(); digitalWrite(disp_3, LOW); delay(50); //////// myOLED.invert(0);//инверсия цвета } void loop() { n++;if(n>9){n=0;} ///////////////// myOLED.setFont(V_BigZif_0_9);//внебиблиотечные цифры - самопальный шрифт myOLED. printNumI(2, 0, 0);myOLED.printNumI(3, 63, 0);//первая пара myOLED.setFont(N_BigZif_0_9);//внебиблиотечные цифры - самопальный шрифт myOLED. printNumI(2, 0, 32);myOLED.printNumI(3, 63, 32);//первая пара myOLED.drawLine(127, 0, 127, 63); dis_3(); myOLED.setFont(V_BigZif_0_9);//внебиблиотечные цифры - самопальный шрифт myOLED. printNumI(5, 0, 0);myOLED.printNumI(n, 63, 0);//вторая пара myOLED.setFont(N_BigZif_0_9);//внебиблиотечные цифры - самопальный шрифт myOLED. printNumI(5, 0, 32);myOLED.printNumI(nn, 63, 32);//вторая пара myOLED.drawLine(0, 0, 0, 63); dis_2(); delay(t/4); //////////// myOLED.setFont(V_BigZif_0_9);//внебиблиотечные цифры - самопальный шрифт myOLED. printNumI(2, 0, 0);myOLED.printNumI(3, 63, 0);//первая пара myOLED.setFont(N_BigZif_0_9);//внебиблиотечные цифры - самопальный шрифт myOLED. printNumI(2, 0, 32);myOLED.printNumI(3, 63, 32);//первая пара myOLED.drawLine(127, 0, 127, 63); dis_3(); myOLED.setFont(V_BigZif_0_9);//внебиблиотечные цифры - самопальный шрифт myOLED. printNumI(5, 0, 0);myOLED.printNumI(n, 63, 0);//вторая пара myOLED.setFont(N_BigZif_0_9);//внебиблиотечные цифры - самопальный шрифт myOLED. printNumI(5, 0, 32);myOLED.printNumI(n, 63, 32);//вторая пара myOLED.drawLine(0, 0, 0, 63); dis_2(); delay(t); //////////////// nn=n;// } //////////////////////////// //////////////////////////// /////////////////////////// void dis_1() { //функции обновления изображений на экранах digitalWrite(disp_1, HIGH); myOLED.update(); digitalWrite(disp_1, LOW); myOLED.clrScr(); // очищаем дисплей } void dis_2() { digitalWrite(disp_2, HIGH); myOLED.update(); digitalWrite(disp_2, LOW); myOLED.clrScr(); // очищаем дисплей } void dis_3() { digitalWrite(disp_3, HIGH); myOLED.update(); digitalWrite(disp_3, LOW); myOLED.clrScr(); // очищаем дисплей } /////////////////////////А такой вопрос - где можно добыть готовые фонты-шрифты наших букв размером 32,48 на 24,32 например? Возникла фантазия - сделать шильдик носимый из 3 экранчиков, "аккума" и про мини 328. Правда пока минимизация размеров это вопрос.
А такой вопрос - где можно добыть готовые фонты-шрифты наших букв размером 32,48 на 24,32 например?
фонтов в инете куча, можно сконвертить в свой формат. Только имейте в виду, что один растровый фонт размером 32х24 всего на 30 символов уже займет весь флеш 328-й атмеги
Не нашёл быстрого способа кроме такого, но попытка вставить рисунок шрифта самого автора ни к чему не привела :-(
http://rinkydinkelectronics.com/t_make_font_file.php
b707 А как вы посчитали? у меня получилось 32*3*30=2880 байт...
Это при условии что 24-это высота символа (3 байта)
у меня получилось 32*3*30=2880 байт...
Это да.
а нет ли часом проекта часов на 2х дисплеях как на скринах выше?
У меня нет.
Прикупил себе светодиодный бейдж 11*55 светодиодов по рублю за светодиод. Спросил у продавца где программа управления, он говорит внутри :-)... Ни хрена там нет. При подключении к ПК бейдж определился как LS32 Custm HID и всё. Поиски по обзорам привели опять на китайский ресурс. Скачал архив, поставил - программа по русски ни бе-бе (о чём честно написано в инструкции), но позволяет вставлять картинки, которые можно создавать редактором встроенным в неё, в который встроена возможность набирать текст, в котором есть кириллица разных размеров и видов. Вывод:какие китайцы молодцы все вместе и не очень по отдельности!
Написал продавцу чтобы не глумился над покупателями, дал ссылку, а он даже не прочитал.
Вопрос: как к Ардуино можно подсоединить такой чудный светодиодный экран? Может кто встречал самодельные программы-переходники для ПК? А то очень хочется шкалу какую нибудь сделать :-)
Гранаты, по ходу дела, не той системы. Интернеты пишут, что есть модификация бейджа с USB-Serial и там стоит обычный пролифик, который можно обойти, получив директный коннект на UART: http://www.daveakerman.com/?p=1440
Понял смутно, при соединении вместо com1 появилось usb0. А сом будет наверное если купить 12*48 светодиодов :-)
Всё равно хочется на уровне готовой программы переходник получить.
А голубые - они всегда такие. Радужные, одним словом. У них все через задницу.
Ты, Миха, какой-то не толлерантный. :))
Всё равно хочется на уровне готовой программы переходник получить.
Это как? USB к ардуине подключать? Подключите через USB-host, потом с HID имейте долгие и бессмысленные отношения.
На Али брали бейдж? Ссылка осталась?
https://aliexpress.ru/item/33049006615.html?spm=a2g39.orderlist.0.0.79ab...
Да конечно, я продавца молчание не понял, буду интересоваться дальше.
Жена тоже захотела, но зелёный, и с блютуз, и что б диск с программой был. В общем у другого продавца за 1000 уже купил. Написал про диск с ПО - сказал вышлет и ссылки на архив дал.
Кстати, что я сам нашёл архив имеет две программы "для просто людей и для профи" :-)
Это как? USB к ардуине подключать? Подключите через USB-host, потом с HID имейте долгие и бессмысленные отношения. На Али брали бейдж? Ссылка осталась?
Да, нет конечно. Программа на ПК, включающая по координатам светодиоды бейджа как вариант.
На уровне программ ПК - по гитхабам валяются скрипты на Питоне. Я просто в гугле по 'LS32 Custm HID ' поискал, а с найденных ресурсов попрыгал по ссылкам на реверс протоколов и пр.
Нафига возиться с тупым китайским бейджем, если можно взять такие же матрицы 8х8 - их подключение к ардуино давно отработано, народ массово делает из них бегущие строки, часы, термометры и прочее и прочее. Пара примеров есть у нас в "Проектах", есть такое и у гайвера, да вообще все кому не лень давно освоили такие дисплеи
А вообще, хотите большую строку - осваивайте большие матрицы 32х16 или 64х32, как в моей теме про DMD ниже :)
На max7219 я делал поделки - светодиодный куб и бегущую строку с голосовым вводом. В первой родные матрицы заменял паяными сетками светодиодов, во второй закрывал светофильтром. Как то внешне они мне не очень нравятся. А тут такие изящные смд светодиоды, расположены лесенкой. Такие матрицы найти бы 8*8.
Чудной продавец! На мою ссылку с ПО написал:
Не могли бы вы Выполнить инструкцию, чтобы попробовать?
Ну что с ним делать!? Как объяснить, что покупатели не должны самостоятельно искать ПО к товару.
Кстати попробовал версию для профи :-)
Вариант интересней гораздо, но всё равно использовать просто как экран-информатор с текущей сменой данных нельзя.
Попробовал ради интереса, подключил УНО. Перезагружает её, потом что то передаёт.
Хм... у меня таких штуков есть несколько, надо будет на досуге поиграться.
И маленьких есть и больших. ПО на всех одно и то же (ага, вон то самое, для профи).
Схемотехника тоже интересна. У производителя всё патентами закрыто :-)
Дошёл таки мультиплексор из Китая.
/////////////проверка одновременной работы 16 экранов #include <OLED_I2C.h> OLED myOLED(SDA, SCL); //SDA - A4 //SCL - A5 //ПОДКЛЮЧЕНИЕ ВЫВОДОВ //HP4067 мультиплексор // #define S0 2 // #define S1 3 #define S2 4 #define S3 5 int t = 1000; // пауза extern uint8_t BigZif_0_9[]; void setup() { pinMode(S0, OUTPUT); digitalWrite(S0, LOW); pinMode(S1, OUTPUT); digitalWrite(S1, LOW); pinMode(S2, OUTPUT); digitalWrite(S2, LOW); pinMode(S3, OUTPUT); digitalWrite(S3, LOW); delay(50); ////// подключение всех 16 дисплеев for (int i = 0; i < 16; i++) { kanal_(i); myOLED.begin(); delay(25); } myOLED.setFont(BigZif_0_9 ); } void loop() { for (int i = 0; i < 16; i++) { myOLED.clrScr(); // очищаем дисплей myOLED.printNumI(i, 1, 1);//выводим номер экрана на экран kanal_(i); myOLED.update(); } delay(t); for (int i = 0; i < 16; i++) { myOLED.clrScr(); // очищаем дисплей myOLED.printNumI(16, 1, 1);//выводим число 16 на все экраны kanal_(i); myOLED.update(); } delay(t); } //////////////////////////// //////////////////////////// //функция выбора экрана для передачи изображения void kanal_(byte k) { if (k >= 0 && k < 16) { digitalWrite(S0, k % 2); digitalWrite(S1, (k % 4) / 2); digitalWrite(S2, (k % 8) / 4); digitalWrite(S3, k / 8); } }Опробовал на таком скетче. От обновления на 1 экране до обновления на 16 проходит примерно 1,5-2 сек.
Есть в римских цифрах какая то магия :-)
Оказывается, можно параллелить несколько экранов. Удобно при создании, например, часов кругового обзора.
Есть в римских цифрах какая то магия :-)
ОТОЖ, в уме Папюс так и вертится глядя на оные )))
Нет в них магии, тоска безысходная, сказала супруга.
Пересмотрел все её часы за жизнь, и правда, на всех только арабские или штрихи! Как я о ней мало знаю !!!
Макет круговой часовой башни делал с учётом иных магий.
Есть круглые индикаторы, к слову.
Но это все бездушно... Моторчик с жужжащим и щелкающим редуктором - вот тема для таких часов.
Я ещё пьезоизлучатель добавил, каждый час фрагмент мелодии отыгрывает.
Чисто с моторчиком и редуктором - мысль не приходила, с сервоприводами замысел был.