Ардуино и дисплей покупателя - vfd как подключить/управлять

Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Аватара пользователя
Energizer-A
Вымогатель припоя
Сообщения: 617
Зарегистрирован: Вт мар 03, 2015 20:13:46
Откуда: рядом с "не резиновой" живу в деревне

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение Energizer-A »

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

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение Alexey1969 »

Забавно вышло
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение kalobyte »

нашел фотки своих индикаторов
1 обычный с внешним контроллером
второй с драйвером в стекле

Изображение Изображение Изображение

сейчас еще есть возможность на ебее купить 2 штуки за 6 евров
и еще я нашел по 2.50 за штуку и можно даже в берлине взять и не платить за доставку

которые на фотках я их тоже за копейки взял давно

остался вопрос, можно ли их запитать от 5в 500ма зарядника с повышайкой до 12в
вроде бы я запитывал от бп, но уже не помню сколько они жрут

у меня есть идея сделать с модулем есп8266, чтобы можно было отображать на них что угодно и управление было легкое по сети
тематические ответы только в форуме, в приват не пишите
Аватара пользователя
Energizer-A
Вымогатель припоя
Сообщения: 617
Зарегистрирован: Вт мар 03, 2015 20:13:46
Откуда: рядом с "не резиновой" живу в деревне

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение Energizer-A »

Колбы так себе.. очень большое расстояние между строчками - если делать большие цифры смотрятся плохо.. да и сами платы очень широкие.. обрезать может быть большой проблемой если захочется делать компактный корпус.
[uquote="kalobyte",url="/forum/viewtopic.php?p=4425260#p4425260"]... есть идея сделать с модулем есп8266, чтобы можно было отображать на них что угодно и управление было легкое по сети[/uquote]
Хорошая идея 8) я и сделал именно так- на основе кода "простые часы с wifi" о чем писал чуть выше и ссылку давал ..но не доделал до конца - не впихнул все хотелки в код.. работают больше- года развивать код типа времени нет..а скорее просто лень - работает и ладно.
Аватара пользователя
SNMetamorph
Родился
Сообщения: 15
Зарегистрирован: Вс июл 03, 2016 16:02:22
Контактная информация:

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение SNMetamorph »

[uquote="abomin",url="/forum/viewtopic.php?p=4241654#p4241654"]

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)
}
[/uquote]
Благодарю! Крайне полезная информация. В ближайшее время планирую доделать библиотеку для работы с этим дисплеем, в общий доступ, разумеется, выложу. И подобный нигде и никак не документированный функционал мне крайне полезен! Напишите, как вас в коде библиотеки упомянуть, если вы не против, конечно :solder:
Аватара пользователя
devicepro
Родился
Сообщения: 3
Зарегистрирован: Вс апр 03, 2016 14:32:42

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение devicepro »

Для упихивания в компактный корпус/бутылку/трубу отлично подходят дисплеи POSIFLEX PD-2800/320. К тому же есть масса предложений на Авито.
Изображение Изображение Изображение
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение kalobyte »

Energizer-A писал(а):Хорошая идея 8) я и сделал именно так- на основе кода "простые часы с wifi" о чем писал чуть выше и ссылку давал
я наверное не совсем точно выразился

я имел в виду не слать в контроллер индикатора данные для его знакогенератора
а приделать есп напрямую к ДРАЙВЕРУ индикатора, а контроллер тот древний выкинуть

однако я посмотрел на фотки и загуглил даташит на драйвер

это плохой, негодный драйвер
в нем нет собственного генератора и нет экранного буфера озу, только регистры и высоковольтные драйверы анодов

так же в нем нет шины спи, только входы регистров и таких линеек регистров 4 штуки

поэтому есп будет нагружена сильно софтовым бит бангом, хотя при ее скорости даже в 80мгц это наверное не так уж и страшно
весь вопрос в асинхронности работы кода управления драйвером и кодом вебсервера

вот даташит на драйвер SED2800FVA
Изображение

так что лучше тупо слать байты в юарт
вчера пришла идея в другой теме - сделать из такого индикатора индикатор уровня аудиосигнала :)))

интересно, насколько он шустрый на 115200 будет, чтобы успевать отрисовывать 40 символов
тематические ответы только в форуме, в приват не пишите
Аватара пользователя
Energizer-A
Вымогатель припоя
Сообщения: 617
Зарегистрирован: Вт мар 03, 2015 20:13:46
Откуда: рядом с "не резиновой" живу в деревне

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение Energizer-A »

Под каждый индикатор мысли излагать в большом количестве ну нафиг.. Про ногодрыг, идею отбросил потому что пришлось бы осваивать в объеме ртос, к чему не готов. Да и актуальности не особо чувствую - вполне хватает текстового отображения. наверное проще недостающее мнемоники закинуть в не используемые страницы devicepro, уже делал это успешно в pos labau/poslab правя дампы sm5964.. у меня пока нет параллельного программатора для этого чипа а лить с помощью штатного загрузчика ещё нужно разобраться возможно ли - потому что он может быть запущен только из юзер программы и при этом не факт что такая возможность есть в коде и как попасть на адрес загрузчика и можно ли вопрос открытый.. нужно попробовать разобраться - в этом нет у меня нужных навыков..
Что до скорости отображения линейки - если не все знаки обновлять то вполне справится.. иначе так себе индикатор - тормоза заметны и на меньшей динамике.
Последний раз редактировалось Energizer-A Вс июн 04, 2023 17:23:14, всего редактировалось 1 раз.
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение kalobyte »

Energizer-A писал(а):Что до скорости отображения линейки - если не все знаки обновлять то вполне справится..
а у тебя он на какой скорости работает? 9600?
да и как не все знаки обновлять? а как тогда затирать то, что не должно светиться? для этого же формируют после еще пробелы?
тематические ответы только в форуме, в приват не пишите
Аватара пользователя
Energizer-A
Вымогатель припоя
Сообщения: 617
Зарегистрирован: Вт мар 03, 2015 20:13:46
Откуда: рядом с "не резиновой" живу в деревне

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение Energizer-A »

Да 9600. На часах в нынешней стадии хватает.
Знаки да- тереть пробелом и писать знак выставляя курсор в нужную позицию
Либы которые выкладывал это делают так же как и команды протоколов - разница отсутствует.. просто переносимость кода выше
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение kalobyte »

я думаю мне проще на стороне хоста сформировать массив байт для отправки в порт и потом его сразу загнать
главное чтобы хватило скорости в 115200

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

я еще только что купил 2 сканера штрих и 2х мерных кодов
https://sps.honeywell.com/ru/ru/product ... ee-scanner

короче 2 индикатора и 2 сканера + пересылка = 12 евров 8)
тематические ответы только в форуме, в приват не пишите
Аватара пользователя
SNMetamorph
Родился
Сообщения: 15
Зарегистрирован: Вс июл 03, 2016 16:02:22
Контактная информация:

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение SNMetamorph »

[uquote="STekLyAToR",url="/forum/viewtopic.php?p=4425655#p4425655"][uquote="abomin",url="/forum/viewtopic.php?p=4241654#p4241654"]

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)
}
[/uquote]
Благодарю! Крайне полезная информация. В ближайшее время планирую доделать библиотеку для работы с этим дисплеем, в общий доступ, разумеется, выложу. И подобный нигде и никак не документированный функционал мне крайне полезен! Напишите, как вас в коде библиотеки упомянуть, если вы не против, конечно :solder:[/uquote]

Ну что же, библиотеку для дисплея Futaba M202MD10C я доделал. Уже доступна на гитхабе вместе с тестовыми скетчами: https://github.com/SNMetamorph/FutabaVfdM202MD10C
А также, в течение пары дней библиотека уже должна быть доступна в ардуиновском менеджере библиотек.
Аватара пользователя
Energizer-A
Вымогатель припоя
Сообщения: 617
Зарегистрирован: Вт мар 03, 2015 20:13:46
Откуда: рядом с "не резиновой" живу в деревне

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение Energizer-A »

Зачетно вышло.. наверное эта библиотека должна называться по имени протокола или дисплея, а не колбы - общение не с колбой напрямую ведь?
Аватара пользователя
SNMetamorph
Родился
Сообщения: 15
Зарегистрирован: Вс июл 03, 2016 16:02:22
Контактная информация:

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение SNMetamorph »

[uquote="Energizer-A",url="/forum/viewtopic.php?p=4426102#p4426102"]Зачетно вышло.. наверное эта библиотека должна называться по имени протокола или дисплея, а не колбы - общение не с колбой напрямую ведь?[/uquote]
А так и есть. Это не название колбы, а название дисплея целиком. Оно там даже шелкографией нанесено на печатной плате.
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение kalobyte »

STekLyAToR писал(а):Ну что же, библиотеку для дисплея Futaba M202MD10C я доделал.
а с чем связано, что для печати на русском у тебя в примере символы кодированы? почему нельзя просто написать нормальными буквами?
иде это интерпретирует как утф8 по 2 байта?

а нет ли там какого макроса, чтобы при компиляции оно конвертировалось в аскии? или наверное ардуиновская иде даже позволяет написать такой макрос?
тематические ответы только в форуме, в приват не пишите
Аватара пользователя
SNMetamorph
Родился
Сообщения: 15
Зарегистрирован: Вс июл 03, 2016 16:02:22
Контактная информация:

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение SNMetamorph »

[uquote="kalobyte",url="/forum/viewtopic.php?p=4426244#p4426244"]
STekLyAToR писал(а):Ну что же, библиотеку для дисплея Futaba M202MD10C я доделал.
а с чем связано, что для печати на русском у тебя в примере символы кодированы? почему нельзя просто написать нормальными буквами?
иде это интерпретирует как утф8 по 2 байта?

а нет ли там какого макроса, чтобы при компиляции оно конвертировалось в аскии? или наверное ардуиновская иде даже позволяет написать такой макрос?[/uquote]
Потому что у файла кодировка текста UTF-8, а дисплей принимает CP866, поэтому я просто нужную строку вручную закодировал в CP866 и вбил байтами.

А по поводу конвертации текста в нужную кодировку - хорошая идея. Современный С++ в целом позволяет такие вещи делать во время компиляции без особых проблем, то есть это сделать можно вообще без задействования вычислительных возможностей микроконтроллера, всё будет посчитано заранее. В данном случае нам надо конвертировать UTF-8 в CP866.
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение kalobyte »

STekLyAToR писал(а):то есть это сделать можно вообще без задействования вычислительных возможностей микроконтроллера, всё будет посчитано заранее.
об этом и речь, чтобы на этапе компиляции компилятор сам понимал, что строки надо компилить в такую-то кодировку однобайтную

что-то я пока не нашел как это делается
https://forum.arduino.cc/t/why-serial-w ... t/597153/8
тут походу в строках сериала иде сама конвертирует в аскии, хотя сам скетч сохраняется в утф8

гимор только в том, что русских таблиц было несколько
866 это дос, а в редакторе может быть 1251 виндовс
индикатор имеет только досовскую таблицу и могут вылезти каракули
тематические ответы только в форуме, в приват не пишите
Аватара пользователя
SNMetamorph
Родился
Сообщения: 15
Зарегистрирован: Вс июл 03, 2016 16:02:22
Контактная информация:

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение SNMetamorph »

[uquote="kalobyte",url="/forum/viewtopic.php?p=4426498#p4426498"]
STekLyAToR писал(а):то есть это сделать можно вообще без задействования вычислительных возможностей микроконтроллера, всё будет посчитано заранее.
об этом и речь, чтобы на этапе компиляции компилятор сам понимал, что строки надо компилить в такую-то кодировку однобайтную

что-то я пока не нашел как это делается
https://forum.arduino.cc/t/why-serial-w ... t/597153/8
тут походу в строках сериала иде сама конвертирует в аскии, хотя сам скетч сохраняется в утф8

гимор только в том, что русских таблиц было несколько
866 это дос, а в редакторе может быть 1251 виндовс
индикатор имеет только досовскую таблицу и могут вылезти каракули[/uquote]
Вся суть в том, что кодировка UTF-8, является обратно совместимой с ASCII, поэтому ничего даже и не надо конвертировать.
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение kalobyte »

тогда в строках буквы русские будут нормально отображаться на индикаторе? при компиляции компилятор обрежет 1 байт в каждой букве?
тематические ответы только в форуме, в приват не пишите
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: Ардуино и дисплей покупателя - vfd как подключить/управл

Сообщение serg_svd »

Там перекодировка в CP866 у меня 5 строчек заняла. Ничего сложного. И проблема с буквой Ё/ё решена.
Хотя встречал знакогенератор на этих дисплеях, где местами поменяли буквы Ъ и Ь.
Ответить

Вернуться в «Arduino»