Ардуино и дисплей покупателя - vfd как подключить/управлять
- Energizer-A
- Вымогатель припоя
- Сообщения: 617
- Зарегистрирован: Вт мар 03, 2015 20:13:46
- Откуда: рядом с "не резиновой" живу в деревне
Re: Ардуино и дисплей покупателя - vfd как подключить/управл
Сегодня пильнул платку ba63, чтоб влезала в бутылку через донышко пиленное снизу прям в торец..
плату отрезал в ширину - вверху по жёлтой полоске шелкографии, а по низу как видно на фотке.
В итоге влетело легко и никакие важные дорожки не перерезаются.
Платки есп8266 и клок с батарейкой запаиваю на укороченных штырях -зачищая маску на плате индикатора,
ba63 хорошо будет показывать только текст из за особенности самой колбы, большие цифры не очень будут смотреться..
по этому и морочиться не стану.
https://cloud.mail.ru/public/TTe2/Nb5bcKzUs.
плату отрезал в ширину - вверху по жёлтой полоске шелкографии, а по низу как видно на фотке.
В итоге влетело легко и никакие важные дорожки не перерезаются.
Платки есп8266 и клок с батарейкой запаиваю на укороченных штырях -зачищая маску на плате индикатора,
ba63 хорошо будет показывать только текст из за особенности самой колбы, большие цифры не очень будут смотреться..
по этому и морочиться не стану.
https://cloud.mail.ru/public/TTe2/Nb5bcKzUs.
- Alexey1969
- Вымогатель припоя
- Сообщения: 622
- Зарегистрирован: Чт мар 05, 2009 05:31:16
- Откуда: г. Кемерово
- Контактная информация:
Re: Ардуино и дисплей покупателя - vfd как подключить/управл
нашел фотки своих индикаторов
1 обычный с внешним контроллером
второй с драйвером в стекле

сейчас еще есть возможность на ебее купить 2 штуки за 6 евров
и еще я нашел по 2.50 за штуку и можно даже в берлине взять и не платить за доставку
которые на фотках я их тоже за копейки взял давно
остался вопрос, можно ли их запитать от 5в 500ма зарядника с повышайкой до 12в
вроде бы я запитывал от бп, но уже не помню сколько они жрут
у меня есть идея сделать с модулем есп8266, чтобы можно было отображать на них что угодно и управление было легкое по сети
1 обычный с внешним контроллером
второй с драйвером в стекле
сейчас еще есть возможность на ебее купить 2 штуки за 6 евров
и еще я нашел по 2.50 за штуку и можно даже в берлине взять и не платить за доставку
которые на фотках я их тоже за копейки взял давно
остался вопрос, можно ли их запитать от 5в 500ма зарядника с повышайкой до 12в
вроде бы я запитывал от бп, но уже не помню сколько они жрут
у меня есть идея сделать с модулем есп8266, чтобы можно было отображать на них что угодно и управление было легкое по сети
тематические ответы только в форуме, в приват не пишите
- Energizer-A
- Вымогатель припоя
- Сообщения: 617
- Зарегистрирован: Вт мар 03, 2015 20:13:46
- Откуда: рядом с "не резиновой" живу в деревне
Re: Ардуино и дисплей покупателя - vfd как подключить/управл
Колбы так себе.. очень большое расстояние между строчками - если делать большие цифры смотрятся плохо.. да и сами платы очень широкие.. обрезать может быть большой проблемой если захочется делать компактный корпус.
[uquote="kalobyte",url="/forum/viewtopic.php?p=4425260#p4425260"]... есть идея сделать с модулем есп8266, чтобы можно было отображать на них что угодно и управление было легкое по сети[/uquote]
Хорошая идея
я и сделал именно так- на основе кода "простые часы с wifi" о чем писал чуть выше и ссылку давал ..но не доделал до конца - не впихнул все хотелки в код.. работают больше- года развивать код типа времени нет..а скорее просто лень - работает и ладно.
[uquote="kalobyte",url="/forum/viewtopic.php?p=4425260#p4425260"]... есть идея сделать с модулем есп8266, чтобы можно было отображать на них что угодно и управление было легкое по сети[/uquote]
Хорошая идея
- SNMetamorph
- Родился
- Сообщения: 15
- Зарегистрирован: Вс июл 03, 2016 16:02:22
- Контактная информация:
Re: Ардуино и дисплей покупателя - vfd как подключить/управл
[uquote="abomin",url="/forum/viewtopic.php?p=4241654#p4241654"]
VFD дисплей Futaba M202MD10C. Часы на ESP8266 в среде Arduino.
Библиотекой не оформлял (пока лень разбираться))
Скетч прилагаю. В нём надо вписать имя вашей сети и её пароль.
[/uquote]
Благодарю! Крайне полезная информация. В ближайшее время планирую доделать библиотеку для работы с этим дисплеем, в общий доступ, разумеется, выложу. И подобный нигде и никак не документированный функционал мне крайне полезен! Напишите, как вас в коде библиотеки упомянуть, если вы не против, конечно
VFD дисплей Futaba M202MD10C. Часы на ESP8266 в среде Arduino.
Библиотекой не оформлял (пока лень разбираться))
Скетч прилагаю. В нём надо вписать имя вашей сети и её пароль.
Спойлер
Код: Выделить всё
// serialesp8266clock.ino
//
// Libraries needed:
// Time.h & TimeLib.h: https://github.com/PaulStoffregen/Time
// Timezone.h: https://github.com/JChristensen/Timezone
// NTPClient.h: https://github.com/arduino-libraries/NTPClient
// ESP8266WiFi.h & WifiUDP.h: https://github.com/ekstrand/ESP8266wifi
// Вывод на VFD дисплей Futaba M202MD10C, выравнивание текста, кириллицу и анимацию прикрутил abomin
#include <ESP8266WiFi.h>
#include <WifiUDP.h>
#include <String.h>
#include <Wire.h>
#include <NTPClient.h>
#include <Time.h>
#include <TimeLib.h>
#include <Timezone.h>
// Define NTP properties
#define NTP_OFFSET 60 * 60 // In seconds
#define NTP_INTERVAL 60 * 1000 // In miliseconds
#define NTP_ADDRESS "ca.pool.ntp.org" // change this to whatever pool is closest (see ntp.org)
// Set up the NTP UDP client
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
const char* ssid = "SSID"; // insert your own ssid
const char* password = "PASSWORD"; // and password
String date;
String t;
const char * days[] = {"Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"} ;
const char * months[] = {"Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря"} ;
const byte CYR_init_string[7] = {0x00, 0x01, 0x02, 0x0A, 0x14, 0x04, 0x20}; // кодовая страница СР-866, курсор выключить, яркость 20%
const int dispStringSize = 20; // сколько символов в строке дисплея
const int kadr = 60; // задержка для смены спрайта
const byte userDefinedSymbol[] = {0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1C, 0x1D, 0x1E};
const byte fromL2R[] = {0x1D, 0x1C, 0x1A, 0x19, 0x1A, 0x1C, 0x1D, 0x1D};
const byte fromR2L[] = {0x18, 0x17, 0x16, 0x15, 0x15, 0x16, 0x17, 0x18};
const byte sprite[][8] = {
{0x00, 0x70, 0xE8, 0xF8, 0xF8, 0x70, 0x00, 0X00}, // Pacman 1, user defined symbol #15
{0x00, 0x70, 0xE8, 0xF8, 0xE0, 0x70, 0x00, 0X00}, // Pacman 2, user defined symbol #16
{0x00, 0x70, 0xF8, 0xC0, 0xE0, 0x70, 0x00, 0X00}, // Pacman 3, user defined symbol #17
{0x00, 0x70, 0xE0, 0xC0, 0xC0, 0x60, 0x00, 0X00}, // Pacman 4, user defined symbol #18
{0x00, 0x70, 0xB8, 0xF8, 0xF8, 0x70, 0x00, 0X00}, // Pacman 5, user defined symbol #19
{0x00, 0x70, 0xB8, 0xF8, 0x38, 0x70, 0x00, 0X00}, // Pacman 6, user defined symbol #1A
{0x00, 0x70, 0xF8, 0x18, 0x38, 0x70, 0x00, 0X00}, // Pacman 7, user defined symbol #1C
{0x00, 0x70, 0x38, 0x18, 0x18, 0x30, 0x00, 0X00}, // Pacman 8, user defined symbol #1D
{0x00, 0x70, 0xA8, 0xF8, 0x88, 0x70, 0x00, 0X00} // Pacman 9, user defined symbol #1E
};
// Перекодировка русского текста для вывода в serial
char* RUS(char* StrIn)
{
char* StrOut=StrIn; // сначала выходную строку приравниваем к входной
uint8_t i[4]={0,0,StrIn[0],StrIn[1]}; // создаём "рабочий" байтовый массив из 4-х членов: 0-счётик нечётных байтов входной строки, 1-счётик чётных байтов входной строки, 2-нечётный байт, 3-чётный байт
while(i[2]>0&&i[0]<255) // проверяем, что не конец массива (тогда нулевой байт) и ограничиваем длину строки в 254 символов
{
if(i[2]==0xd0&&i[3]>0x8F&&i[3]<0xC0) // проверка - кирилица? от "А" до "п"?
{
StrOut[i[1]]=i[3]-0x10;i[0]++; // переводим в СР-866
}
else if(i[2]==0xd0&&i[3]==0x81) // проверка - кирилица? "Ё"?
{
StrOut[i[1]]=0xF0;i[0]++; // меняем на Ё СР-866
}
else if(i[2]==0xd1&&i[3]>0x7F&&i[3]<0x90) // проверка - кирилица? от "р" до "я"?
{
StrOut[i[1]]=i[3]+0x60;i[0]++; // переводим в СР-866
}
else if(i[2]==0xd1&&i[3]==0x91) // проверка - кирилица? "ё"?
{
StrOut[i[1]]=0xF1;i[0]++; // меняем на ё СР-866
}
else
{
StrOut[i[1]]=i[2];
}
i[0]++;
i[1]++;
i[2]=StrIn[i[0]];
i[3]=StrIn[i[0]+1];
}
StrOut[i[1]]='\0';
return StrOut;
}
// п-п печати спрайта
void printSprite(byte a, int b, int c) {
Serial.write(0x10); // задать вывод символа
Serial.write(b); // в b-е знакоместо
Serial.write(a); // вывод спрайта a
delay (c);
}
// п-п очистки (забоя) последнего символа
void backspace() {
Serial.write(8); // backspace
Serial.write(32); // space
}
// п-п задания след. позиции вывода символа слева вверху
void goLeftUpCorner() {
Serial.write(0x10); // задать вывод символа
Serial.write(0x00); // в нулевое знакоместо
}
// Выравнивание строки по центру
String centerJustify(String inputString)
{
int needSpaces = (dispStringSize - inputString.length()) / 2;
String outputString = "";
for(int i = 0; i < needSpaces; i++)
outputString += ' ';
outputString += inputString;
for(int i = 0; i < (needSpaces - 1); i++)
outputString += ' ';
return outputString;
}
//
void setup ()
{
Serial.begin(9600); // most ESP-01's use 115200 but this could vary
timeClient.begin(); // Start the NTP UDP client
// инициализировать дисплей
for(int i=0; i<7; i++)
Serial.write(CYR_init_string[i]);
// набиваем пользовательские символы:
for(int j=0; j<9; j++) { // девять пользовательских символов
Serial.write(03);
Serial.write(userDefinedSymbol[j]);
for(int i=0; i<8; i++) // 8 байт на символ
Serial.write(sprite[j][i]);}
// Connect to wifi
Serial.println("");
Serial.print(RUS("Подключаюсь к WiFi"));
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print(RUS("Подключено к WiFi at "));
Serial.print(WiFi.localIP());
delay(1000);
Serial.println("");
Serial.println("");
}
void loop()
{
if (WiFi.status() == WL_CONNECTED) //Check WiFi connection status
{
date = ""; // clear the variables
t = "";
// update the NTP client and get the UNIX UTC timestamp
timeClient.update();
unsigned long epochTime = timeClient.getEpochTime();
// convert received time stamp to time_t object
time_t local, utc;
utc = epochTime;
// Then convert the UTC UNIX timestamp to local time
TimeChangeRule MSK = {"MSK", Second, Sun, Mar, 2, +120}; //UTC - 5 hours - change this as needed
// TimeChangeRule usEST = {"EST", First, Sun, Nov, 2, -360}; //UTC - 6 hours - change this as needed
Timezone tMSK(MSK, MSK);
local = tMSK.toLocal(utc);
// now format the date variables into string with proper names for month, day etc
date += day(local);
date += " ";
date += months[month(local)-1];
date += " ";
date += year(local);
// сформировать выровненную по центру строку даты
char dateChar[date.length()+1];
date.toCharArray(dateChar, sizeof(dateChar));
String dateString = centerJustify(RUS(dateChar));
// format the time
if(hour(local) < 10) // add a space if hour is under 10
t += " ";
t += hour(local);
t += ":";
if(minute(local) < 10) // add a zero if minute is under 10
t += "0";
t += minute(local);
// сформировать выровненную по центру строку времени и дня недели
String dayNow = days[weekday(local)-1];
char dayChar[23];
dayNow.toCharArray(dayChar, 23);
String timeDayChar866 = t + ' ' + RUS(dayChar);
String timeDayString = centerJustify(timeDayChar866);
// Display the date and time
goLeftUpCorner();
Serial.println(timeDayString);
Serial.print(dateString);
delay (5000);
// анимация Pacman
for(int i=38; i>19; i--) { // нижняя строка
for(int k=0; k<8; k++)
printSprite(fromR2L[k], i, kadr);
backspace(); }
for(int i=0; i<20; i++) { // верхняя строка
for(int k=0; k<8; k++)
printSprite(fromL2R[k], i, kadr);
backspace(); }
printSprite(0x1E, 19, 1000);
backspace();
goLeftUpCorner();
}
else // attempt to connect to wifi again if disconnected
{
WiFi.begin(ssid, password);
delay(1000);
}
// delay(10000); //Send a request to update every 10 sec (= 10,000 ms)
}
Благодарю! Крайне полезная информация. В ближайшее время планирую доделать библиотеку для работы с этим дисплеем, в общий доступ, разумеется, выложу. И подобный нигде и никак не документированный функционал мне крайне полезен! Напишите, как вас в коде библиотеки упомянуть, если вы не против, конечно
Re: Ардуино и дисплей покупателя - vfd как подключить/управл
я наверное не совсем точно выразилсяEnergizer-A писал(а):Хорошая идеяя и сделал именно так- на основе кода "простые часы с wifi" о чем писал чуть выше и ссылку давал
я имел в виду не слать в контроллер индикатора данные для его знакогенератора
а приделать есп напрямую к ДРАЙВЕРУ индикатора, а контроллер тот древний выкинуть
однако я посмотрел на фотки и загуглил даташит на драйвер
это плохой, негодный драйвер
в нем нет собственного генератора и нет экранного буфера озу, только регистры и высоковольтные драйверы анодов
так же в нем нет шины спи, только входы регистров и таких линеек регистров 4 штуки
поэтому есп будет нагружена сильно софтовым бит бангом, хотя при ее скорости даже в 80мгц это наверное не так уж и страшно
весь вопрос в асинхронности работы кода управления драйвером и кодом вебсервера
вот даташит на драйвер SED2800FVA
так что лучше тупо слать байты в юарт
вчера пришла идея в другой теме - сделать из такого индикатора индикатор уровня аудиосигнала
интересно, насколько он шустрый на 115200 будет, чтобы успевать отрисовывать 40 символов
тематические ответы только в форуме, в приват не пишите
- Energizer-A
- Вымогатель припоя
- Сообщения: 617
- Зарегистрирован: Вт мар 03, 2015 20:13:46
- Откуда: рядом с "не резиновой" живу в деревне
Re: Ардуино и дисплей покупателя - vfd как подключить/управл
Под каждый индикатор мысли излагать в большом количестве ну нафиг.. Про ногодрыг, идею отбросил потому что пришлось бы осваивать в объеме ртос, к чему не готов. Да и актуальности не особо чувствую - вполне хватает текстового отображения. наверное проще недостающее мнемоники закинуть в не используемые страницы devicepro, уже делал это успешно в pos labau/poslab правя дампы sm5964.. у меня пока нет параллельного программатора для этого чипа а лить с помощью штатного загрузчика ещё нужно разобраться возможно ли - потому что он может быть запущен только из юзер программы и при этом не факт что такая возможность есть в коде и как попасть на адрес загрузчика и можно ли вопрос открытый.. нужно попробовать разобраться - в этом нет у меня нужных навыков..
Что до скорости отображения линейки - если не все знаки обновлять то вполне справится.. иначе так себе индикатор - тормоза заметны и на меньшей динамике.
Что до скорости отображения линейки - если не все знаки обновлять то вполне справится.. иначе так себе индикатор - тормоза заметны и на меньшей динамике.
Последний раз редактировалось Energizer-A Вс июн 04, 2023 17:23:14, всего редактировалось 1 раз.
Re: Ардуино и дисплей покупателя - vfd как подключить/управл
а у тебя он на какой скорости работает? 9600?Energizer-A писал(а):Что до скорости отображения линейки - если не все знаки обновлять то вполне справится..
да и как не все знаки обновлять? а как тогда затирать то, что не должно светиться? для этого же формируют после еще пробелы?
тематические ответы только в форуме, в приват не пишите
- Energizer-A
- Вымогатель припоя
- Сообщения: 617
- Зарегистрирован: Вт мар 03, 2015 20:13:46
- Откуда: рядом с "не резиновой" живу в деревне
Re: Ардуино и дисплей покупателя - vfd как подключить/управл
Да 9600. На часах в нынешней стадии хватает.
Знаки да- тереть пробелом и писать знак выставляя курсор в нужную позицию
Либы которые выкладывал это делают так же как и команды протоколов - разница отсутствует.. просто переносимость кода выше
Знаки да- тереть пробелом и писать знак выставляя курсор в нужную позицию
Либы которые выкладывал это делают так же как и команды протоколов - разница отсутствует.. просто переносимость кода выше
Re: Ардуино и дисплей покупателя - vfd как подключить/управл
я думаю мне проще на стороне хоста сформировать массив байт для отправки в порт и потом его сразу загнать
главное чтобы хватило скорости в 115200
попробую это сделать на шарпе, там можно таймер софтовый организовать
в моих индикаторах есть еще ртс и дтр сигналы, типа можно узнать, когда индикатор готов к новой порции
я еще только что купил 2 сканера штрих и 2х мерных кодов
https://sps.honeywell.com/ru/ru/product ... ee-scanner
короче 2 индикатора и 2 сканера + пересылка = 12 евров
главное чтобы хватило скорости в 115200
попробую это сделать на шарпе, там можно таймер софтовый организовать
в моих индикаторах есть еще ртс и дтр сигналы, типа можно узнать, когда индикатор готов к новой порции
я еще только что купил 2 сканера штрих и 2х мерных кодов
https://sps.honeywell.com/ru/ru/product ... ee-scanner
короче 2 индикатора и 2 сканера + пересылка = 12 евров
тематические ответы только в форуме, в приват не пишите
- SNMetamorph
- Родился
- Сообщения: 15
- Зарегистрирован: Вс июл 03, 2016 16:02:22
- Контактная информация:
Re: Ардуино и дисплей покупателя - vfd как подключить/управл
[uquote="STekLyAToR",url="/forum/viewtopic.php?p=4425655#p4425655"][uquote="abomin",url="/forum/viewtopic.php?p=4241654#p4241654"]
VFD дисплей Futaba M202MD10C. Часы на ESP8266 в среде Arduino.
Библиотекой не оформлял (пока лень разбираться))
Скетч прилагаю. В нём надо вписать имя вашей сети и её пароль.
[/uquote]
Благодарю! Крайне полезная информация. В ближайшее время планирую доделать библиотеку для работы с этим дисплеем, в общий доступ, разумеется, выложу. И подобный нигде и никак не документированный функционал мне крайне полезен! Напишите, как вас в коде библиотеки упомянуть, если вы не против, конечно
[/uquote]
Ну что же, библиотеку для дисплея Futaba M202MD10C я доделал. Уже доступна на гитхабе вместе с тестовыми скетчами: https://github.com/SNMetamorph/FutabaVfdM202MD10C
А также, в течение пары дней библиотека уже должна быть доступна в ардуиновском менеджере библиотек.
VFD дисплей Futaba M202MD10C. Часы на ESP8266 в среде Arduino.
Библиотекой не оформлял (пока лень разбираться))
Скетч прилагаю. В нём надо вписать имя вашей сети и её пароль.
Спойлер
Код: Выделить всё
// serialesp8266clock.ino
//
// Libraries needed:
// Time.h & TimeLib.h: https://github.com/PaulStoffregen/Time
// Timezone.h: https://github.com/JChristensen/Timezone
// NTPClient.h: https://github.com/arduino-libraries/NTPClient
// ESP8266WiFi.h & WifiUDP.h: https://github.com/ekstrand/ESP8266wifi
// Вывод на VFD дисплей Futaba M202MD10C, выравнивание текста, кириллицу и анимацию прикрутил abomin
#include <ESP8266WiFi.h>
#include <WifiUDP.h>
#include <String.h>
#include <Wire.h>
#include <NTPClient.h>
#include <Time.h>
#include <TimeLib.h>
#include <Timezone.h>
// Define NTP properties
#define NTP_OFFSET 60 * 60 // In seconds
#define NTP_INTERVAL 60 * 1000 // In miliseconds
#define NTP_ADDRESS "ca.pool.ntp.org" // change this to whatever pool is closest (see ntp.org)
// Set up the NTP UDP client
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
const char* ssid = "SSID"; // insert your own ssid
const char* password = "PASSWORD"; // and password
String date;
String t;
const char * days[] = {"Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"} ;
const char * months[] = {"Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря"} ;
const byte CYR_init_string[7] = {0x00, 0x01, 0x02, 0x0A, 0x14, 0x04, 0x20}; // кодовая страница СР-866, курсор выключить, яркость 20%
const int dispStringSize = 20; // сколько символов в строке дисплея
const int kadr = 60; // задержка для смены спрайта
const byte userDefinedSymbol[] = {0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1C, 0x1D, 0x1E};
const byte fromL2R[] = {0x1D, 0x1C, 0x1A, 0x19, 0x1A, 0x1C, 0x1D, 0x1D};
const byte fromR2L[] = {0x18, 0x17, 0x16, 0x15, 0x15, 0x16, 0x17, 0x18};
const byte sprite[][8] = {
{0x00, 0x70, 0xE8, 0xF8, 0xF8, 0x70, 0x00, 0X00}, // Pacman 1, user defined symbol #15
{0x00, 0x70, 0xE8, 0xF8, 0xE0, 0x70, 0x00, 0X00}, // Pacman 2, user defined symbol #16
{0x00, 0x70, 0xF8, 0xC0, 0xE0, 0x70, 0x00, 0X00}, // Pacman 3, user defined symbol #17
{0x00, 0x70, 0xE0, 0xC0, 0xC0, 0x60, 0x00, 0X00}, // Pacman 4, user defined symbol #18
{0x00, 0x70, 0xB8, 0xF8, 0xF8, 0x70, 0x00, 0X00}, // Pacman 5, user defined symbol #19
{0x00, 0x70, 0xB8, 0xF8, 0x38, 0x70, 0x00, 0X00}, // Pacman 6, user defined symbol #1A
{0x00, 0x70, 0xF8, 0x18, 0x38, 0x70, 0x00, 0X00}, // Pacman 7, user defined symbol #1C
{0x00, 0x70, 0x38, 0x18, 0x18, 0x30, 0x00, 0X00}, // Pacman 8, user defined symbol #1D
{0x00, 0x70, 0xA8, 0xF8, 0x88, 0x70, 0x00, 0X00} // Pacman 9, user defined symbol #1E
};
// Перекодировка русского текста для вывода в serial
char* RUS(char* StrIn)
{
char* StrOut=StrIn; // сначала выходную строку приравниваем к входной
uint8_t i[4]={0,0,StrIn[0],StrIn[1]}; // создаём "рабочий" байтовый массив из 4-х членов: 0-счётик нечётных байтов входной строки, 1-счётик чётных байтов входной строки, 2-нечётный байт, 3-чётный байт
while(i[2]>0&&i[0]<255) // проверяем, что не конец массива (тогда нулевой байт) и ограничиваем длину строки в 254 символов
{
if(i[2]==0xd0&&i[3]>0x8F&&i[3]<0xC0) // проверка - кирилица? от "А" до "п"?
{
StrOut[i[1]]=i[3]-0x10;i[0]++; // переводим в СР-866
}
else if(i[2]==0xd0&&i[3]==0x81) // проверка - кирилица? "Ё"?
{
StrOut[i[1]]=0xF0;i[0]++; // меняем на Ё СР-866
}
else if(i[2]==0xd1&&i[3]>0x7F&&i[3]<0x90) // проверка - кирилица? от "р" до "я"?
{
StrOut[i[1]]=i[3]+0x60;i[0]++; // переводим в СР-866
}
else if(i[2]==0xd1&&i[3]==0x91) // проверка - кирилица? "ё"?
{
StrOut[i[1]]=0xF1;i[0]++; // меняем на ё СР-866
}
else
{
StrOut[i[1]]=i[2];
}
i[0]++;
i[1]++;
i[2]=StrIn[i[0]];
i[3]=StrIn[i[0]+1];
}
StrOut[i[1]]='\0';
return StrOut;
}
// п-п печати спрайта
void printSprite(byte a, int b, int c) {
Serial.write(0x10); // задать вывод символа
Serial.write(b); // в b-е знакоместо
Serial.write(a); // вывод спрайта a
delay (c);
}
// п-п очистки (забоя) последнего символа
void backspace() {
Serial.write(8); // backspace
Serial.write(32); // space
}
// п-п задания след. позиции вывода символа слева вверху
void goLeftUpCorner() {
Serial.write(0x10); // задать вывод символа
Serial.write(0x00); // в нулевое знакоместо
}
// Выравнивание строки по центру
String centerJustify(String inputString)
{
int needSpaces = (dispStringSize - inputString.length()) / 2;
String outputString = "";
for(int i = 0; i < needSpaces; i++)
outputString += ' ';
outputString += inputString;
for(int i = 0; i < (needSpaces - 1); i++)
outputString += ' ';
return outputString;
}
//
void setup ()
{
Serial.begin(9600); // most ESP-01's use 115200 but this could vary
timeClient.begin(); // Start the NTP UDP client
// инициализировать дисплей
for(int i=0; i<7; i++)
Serial.write(CYR_init_string[i]);
// набиваем пользовательские символы:
for(int j=0; j<9; j++) { // девять пользовательских символов
Serial.write(03);
Serial.write(userDefinedSymbol[j]);
for(int i=0; i<8; i++) // 8 байт на символ
Serial.write(sprite[j][i]);}
// Connect to wifi
Serial.println("");
Serial.print(RUS("Подключаюсь к WiFi"));
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print(RUS("Подключено к WiFi at "));
Serial.print(WiFi.localIP());
delay(1000);
Serial.println("");
Serial.println("");
}
void loop()
{
if (WiFi.status() == WL_CONNECTED) //Check WiFi connection status
{
date = ""; // clear the variables
t = "";
// update the NTP client and get the UNIX UTC timestamp
timeClient.update();
unsigned long epochTime = timeClient.getEpochTime();
// convert received time stamp to time_t object
time_t local, utc;
utc = epochTime;
// Then convert the UTC UNIX timestamp to local time
TimeChangeRule MSK = {"MSK", Second, Sun, Mar, 2, +120}; //UTC - 5 hours - change this as needed
// TimeChangeRule usEST = {"EST", First, Sun, Nov, 2, -360}; //UTC - 6 hours - change this as needed
Timezone tMSK(MSK, MSK);
local = tMSK.toLocal(utc);
// now format the date variables into string with proper names for month, day etc
date += day(local);
date += " ";
date += months[month(local)-1];
date += " ";
date += year(local);
// сформировать выровненную по центру строку даты
char dateChar[date.length()+1];
date.toCharArray(dateChar, sizeof(dateChar));
String dateString = centerJustify(RUS(dateChar));
// format the time
if(hour(local) < 10) // add a space if hour is under 10
t += " ";
t += hour(local);
t += ":";
if(minute(local) < 10) // add a zero if minute is under 10
t += "0";
t += minute(local);
// сформировать выровненную по центру строку времени и дня недели
String dayNow = days[weekday(local)-1];
char dayChar[23];
dayNow.toCharArray(dayChar, 23);
String timeDayChar866 = t + ' ' + RUS(dayChar);
String timeDayString = centerJustify(timeDayChar866);
// Display the date and time
goLeftUpCorner();
Serial.println(timeDayString);
Serial.print(dateString);
delay (5000);
// анимация Pacman
for(int i=38; i>19; i--) { // нижняя строка
for(int k=0; k<8; k++)
printSprite(fromR2L[k], i, kadr);
backspace(); }
for(int i=0; i<20; i++) { // верхняя строка
for(int k=0; k<8; k++)
printSprite(fromL2R[k], i, kadr);
backspace(); }
printSprite(0x1E, 19, 1000);
backspace();
goLeftUpCorner();
}
else // attempt to connect to wifi again if disconnected
{
WiFi.begin(ssid, password);
delay(1000);
}
// delay(10000); //Send a request to update every 10 sec (= 10,000 ms)
}
Благодарю! Крайне полезная информация. В ближайшее время планирую доделать библиотеку для работы с этим дисплеем, в общий доступ, разумеется, выложу. И подобный нигде и никак не документированный функционал мне крайне полезен! Напишите, как вас в коде библиотеки упомянуть, если вы не против, конечно
Ну что же, библиотеку для дисплея Futaba M202MD10C я доделал. Уже доступна на гитхабе вместе с тестовыми скетчами: https://github.com/SNMetamorph/FutabaVfdM202MD10C
А также, в течение пары дней библиотека уже должна быть доступна в ардуиновском менеджере библиотек.
- Energizer-A
- Вымогатель припоя
- Сообщения: 617
- Зарегистрирован: Вт мар 03, 2015 20:13:46
- Откуда: рядом с "не резиновой" живу в деревне
Re: Ардуино и дисплей покупателя - vfd как подключить/управл
Зачетно вышло.. наверное эта библиотека должна называться по имени протокола или дисплея, а не колбы - общение не с колбой напрямую ведь?
- SNMetamorph
- Родился
- Сообщения: 15
- Зарегистрирован: Вс июл 03, 2016 16:02:22
- Контактная информация:
Re: Ардуино и дисплей покупателя - vfd как подключить/управл
[uquote="Energizer-A",url="/forum/viewtopic.php?p=4426102#p4426102"]Зачетно вышло.. наверное эта библиотека должна называться по имени протокола или дисплея, а не колбы - общение не с колбой напрямую ведь?[/uquote]
А так и есть. Это не название колбы, а название дисплея целиком. Оно там даже шелкографией нанесено на печатной плате.
А так и есть. Это не название колбы, а название дисплея целиком. Оно там даже шелкографией нанесено на печатной плате.
Re: Ардуино и дисплей покупателя - vfd как подключить/управл
а с чем связано, что для печати на русском у тебя в примере символы кодированы? почему нельзя просто написать нормальными буквами?STekLyAToR писал(а):Ну что же, библиотеку для дисплея Futaba M202MD10C я доделал.
иде это интерпретирует как утф8 по 2 байта?
а нет ли там какого макроса, чтобы при компиляции оно конвертировалось в аскии? или наверное ардуиновская иде даже позволяет написать такой макрос?
тематические ответы только в форуме, в приват не пишите
- SNMetamorph
- Родился
- Сообщения: 15
- Зарегистрирован: Вс июл 03, 2016 16:02:22
- Контактная информация:
Re: Ардуино и дисплей покупателя - vfd как подключить/управл
[uquote="kalobyte",url="/forum/viewtopic.php?p=4426244#p4426244"]
иде это интерпретирует как утф8 по 2 байта?
а нет ли там какого макроса, чтобы при компиляции оно конвертировалось в аскии? или наверное ардуиновская иде даже позволяет написать такой макрос?[/uquote]
Потому что у файла кодировка текста UTF-8, а дисплей принимает CP866, поэтому я просто нужную строку вручную закодировал в CP866 и вбил байтами.
А по поводу конвертации текста в нужную кодировку - хорошая идея. Современный С++ в целом позволяет такие вещи делать во время компиляции без особых проблем, то есть это сделать можно вообще без задействования вычислительных возможностей микроконтроллера, всё будет посчитано заранее. В данном случае нам надо конвертировать UTF-8 в CP866.
а с чем связано, что для печати на русском у тебя в примере символы кодированы? почему нельзя просто написать нормальными буквами?STekLyAToR писал(а):Ну что же, библиотеку для дисплея Futaba M202MD10C я доделал.
иде это интерпретирует как утф8 по 2 байта?
а нет ли там какого макроса, чтобы при компиляции оно конвертировалось в аскии? или наверное ардуиновская иде даже позволяет написать такой макрос?[/uquote]
Потому что у файла кодировка текста UTF-8, а дисплей принимает CP866, поэтому я просто нужную строку вручную закодировал в CP866 и вбил байтами.
А по поводу конвертации текста в нужную кодировку - хорошая идея. Современный С++ в целом позволяет такие вещи делать во время компиляции без особых проблем, то есть это сделать можно вообще без задействования вычислительных возможностей микроконтроллера, всё будет посчитано заранее. В данном случае нам надо конвертировать UTF-8 в CP866.
Re: Ардуино и дисплей покупателя - vfd как подключить/управл
об этом и речь, чтобы на этапе компиляции компилятор сам понимал, что строки надо компилить в такую-то кодировку однобайтнуюSTekLyAToR писал(а):то есть это сделать можно вообще без задействования вычислительных возможностей микроконтроллера, всё будет посчитано заранее.
что-то я пока не нашел как это делается
https://forum.arduino.cc/t/why-serial-w ... t/597153/8
тут походу в строках сериала иде сама конвертирует в аскии, хотя сам скетч сохраняется в утф8
гимор только в том, что русских таблиц было несколько
866 это дос, а в редакторе может быть 1251 виндовс
индикатор имеет только досовскую таблицу и могут вылезти каракули
тематические ответы только в форуме, в приват не пишите
- SNMetamorph
- Родился
- Сообщения: 15
- Зарегистрирован: Вс июл 03, 2016 16:02:22
- Контактная информация:
Re: Ардуино и дисплей покупателя - vfd как подключить/управл
[uquote="kalobyte",url="/forum/viewtopic.php?p=4426498#p4426498"]
что-то я пока не нашел как это делается
https://forum.arduino.cc/t/why-serial-w ... t/597153/8
тут походу в строках сериала иде сама конвертирует в аскии, хотя сам скетч сохраняется в утф8
гимор только в том, что русских таблиц было несколько
866 это дос, а в редакторе может быть 1251 виндовс
индикатор имеет только досовскую таблицу и могут вылезти каракули[/uquote]
Вся суть в том, что кодировка UTF-8, является обратно совместимой с ASCII, поэтому ничего даже и не надо конвертировать.
об этом и речь, чтобы на этапе компиляции компилятор сам понимал, что строки надо компилить в такую-то кодировку однобайтнуюSTekLyAToR писал(а):то есть это сделать можно вообще без задействования вычислительных возможностей микроконтроллера, всё будет посчитано заранее.
что-то я пока не нашел как это делается
https://forum.arduino.cc/t/why-serial-w ... t/597153/8
тут походу в строках сериала иде сама конвертирует в аскии, хотя сам скетч сохраняется в утф8
гимор только в том, что русских таблиц было несколько
866 это дос, а в редакторе может быть 1251 виндовс
индикатор имеет только досовскую таблицу и могут вылезти каракули[/uquote]
Вся суть в том, что кодировка UTF-8, является обратно совместимой с ASCII, поэтому ничего даже и не надо конвертировать.
Re: Ардуино и дисплей покупателя - vfd как подключить/управл
тогда в строках буквы русские будут нормально отображаться на индикаторе? при компиляции компилятор обрежет 1 байт в каждой букве?
тематические ответы только в форуме, в приват не пишите
Re: Ардуино и дисплей покупателя - vfd как подключить/управл
Там перекодировка в CP866 у меня 5 строчек заняла. Ничего сложного. И проблема с буквой Ё/ё решена.
Хотя встречал знакогенератор на этих дисплеях, где местами поменяли буквы Ъ и Ь.
Хотя встречал знакогенератор на этих дисплеях, где местами поменяли буквы Ъ и Ь.