В линуксе не работал, но вики говорит, что так и есть. Не спорю. В виндовой версии Arduino IDE, насколько мне известно, нет никакой поддержки wchar_t встроенным компилятором. Формат "%S" для вывода wchar_t использовать не получится.
Я заглянул в исходный код библиотек... Насколько я понимаю (и по "...\r\n" окончаниям текстовых строк кода), вы работу своей библиотеки не смотрели (не проверяли)?: в Linux, с его Ardyino IDE, и с повсеместным представлением символьных строк там в UTF-8... Есть некотоые вопросы к коду библиотеки.
Я заглянул в исходный код библиотек... Насколько я понимаю (и по "...\r\n" окончаниям текстовых строк кода), вы работу своей библиотеки не смотрели (не проверяли)?: в Linux, с его Ardyino IDE, и с повсеместным представлением символьных строк там в UTF-8... Есть некотоые вопросы к коду библиотеки.
Конечно нет. В линуксе не проверял. Писал под винду. Код библиотеки открыт, если есть желание переписать его под линукс - можете за это взяться.
В ходе экспериментов с клоном под оригинал Uno r3 и синим экраном с клавиатурой (предположительно LCD 1602 - картинка очень похожа на пост #51), подозреваю, что русский язык в экранчик не прошит.
получился такой код (частично добыт из примеров)
и на экранчике не много не так отображаются символы как ожидалось и притом они меняются если выводить их как сделано в loop.
Вопрос: это у меня экранчик такой особенный или поправить что то в коде надо ?
если не затрудни прошу провести эксперимент.
/*
The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* LCD VSS pin to ground
* LCD VCC pin to 5V
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
*/
#include <LiquidCrystal_1602_RUS.h>
//LiquidCrystal_1602_RUS lcd(12, 11, 5, 4, 3, 2);
LiquidCrystal_1602_RUS lcd(8, 9, 4, 5, 6, 7 );//For LCD Keypad Shield
void setup()
{
lcd.begin(16, 2);
lcd.clear();
/*
// здесь вывод возможных символов и их кодов десятичных
// при нажатии правой кнопки выход из показа кодов
int x;
lcd.setCursor(0,1);
lcd.print ("НажмиRight-ВЫХОД");
for(x=0; x<255; x = x+1)
{
delay(100);
int x1;
x1 = analogRead (0);
lcd.setCursor(0, 0);
lcd.write(byte(x));
lcd.setCursor(6, 0);
lcd.print("код=");
lcd.print(x);
delay(400);
lcd.setCursor(0, 0);
lcd.print(" ");
if (x1 < 60) {
// была нажата клавиша вправо - досрочное окончание вывода кодов и символов
lcd.setCursor(0,1);
lcd.print (" Конец теста ");
x = 255;
delay(5000);
}
}
// окончание вывода кодов символов
*/
lcd.clear();
// Print a message to the LCD.
lcd.setCursor(1, 0);
// выводим сообщение, а на экране немного не то написано что ожидается
// lcd.print(L"МожЖжно печатать");
lcd.print(L"МожЖжно печата");
lcd.setCursor(3, 1);
lcd.print(L"на русском 1");
delay(5000);
// выводим сообщение, а на экране немного не то написано,что ожидается
lcd.setCursor(1, 0);
lcd.print(L"Можно печатать ");
lcd.setCursor(3, 1);
lcd.print(L"на русском 2 ");
delay(5000);
}
void loop() {
lcd.clear();
// выводим сообщение по кругу обратите внимание символы на экране периодически меняются если немного понаблюдать
// хотя непонятно отчего им меняться... ?
lcd.setCursor(1, 0);
lcd.print(L"МожЖжно ЛИ ещё"); // особенное внимание на место где третья "ж"
// lcd.print("МожЖжно ЛИ ещё");
// Вроде бы по моим экспериментам L влияет на вывод текста
lcd.setCursor(3, 1);
lcd.print(L"на русском 1");
delay(2000);
lcd.print("МожЖжно ЛИ ещё"); // особенное внимание на место где третья "ж"
// lcd.print("МожЖжно ЛИ ещё");
// Вроде бы по моим экспериментам L влияет на вывод текста
lcd.setCursor(3, 1);
lcd.print("на русском 2");
delay(2000);
}
не, это не работает, без сброса переполняется и начинает выводить всякую дичь
а с очисткой экрана он каждый раз мерзко мерцает после этого
Должно работать. И что значит - переполняется? Куда переполняется? Зачем через край льёте? Минимальный код, воспроизводящий проблему - давайте, а то непонятно, что там у вас переполняется и какой марки дичь.
Это я просто вопрос в разрезе темы задал, без уточнений)
Я использую библиотеку товарища с первой страницы, она генерит недостающие буквы кирилицы, и с очисткой дисплея все работает как надо, но экран при очистке мигает и мне это не нравится.
Вот я и хотел узнать, может есть какая команда очистки сгененрированных символов, чтобы не прибегать к очистке экрана.
Это я просто вопрос в разрезе темы задал, без уточнений)
Я использую библиотеку товарища с первой страницы, она генерит недостающие буквы кирилицы, и с очисткой дисплея все работает как надо, но экран при очистке мигает и мне это не нравится.
Вот я и хотел узнать, может есть какая команда очистки сгененрированных символов, чтобы не прибегать к очистке экрана.
А что мешает открыть исходники библиотеки и дописать там публичную функцию очистки сгенерированных символов?
Смотрю тема жива и волнительна, автор библиотеки тоже сюда заглядывает... Это радует )))
А теперь естественно вопрос на засыпку...
Есть текстовый файлик на SD карте состоящий из строк длинною до 40 символов, читаю файл построчно и хотелось бы выводить строки на дисплей, можно отбрасывая символы после 16, это не критично...
Но вот как вывести строку с использованием данной библиотеки я не пойму???
В древних версиях LiquidCrystal_I2C вместо begin была функция init. Я так понимаю, библиотеку тогда растащили по своим сайтам писатели статей, откуда ее до сих пор многие и качают. Потому либо LiquidCrystal_I2C.init(), либо качайте актуальную версию.
Добрый день. Помогите новичку. Есть проэкт автоматики для автоклава, проблема в русификации меню с приминением символов. Изначально проэкт скомпилирован в FLprog. Не могу понять как прописать символы в функции progmem.
Добрый день. Помогите новичку. Есть проэкт автоматики для автоклава, проблема в русификации меню
вы уверены. что это самая важная проблема в проекте? Что мешает польховаться меню на латинице? неужели такие слова как "open" "close" "On" "Off"? "Temperature" и тп - нуждаются в переводе?
Добрый день. Помогите новичку. Есть проэкт автоматики для автоклава, проблема в русификации меню
вы уверены. что это самая важная проблема в проекте? Что мешает польховаться меню на латинице? неужели такие слова как "open" "close" "On" "Off"? "Temperature" и тп - нуждаются в переводе?
В линуксе не работал, но вики говорит, что так и есть. Не спорю. В виндовой версии Arduino IDE, насколько мне известно, нет никакой поддержки wchar_t встроенным компилятором. Формат "%S" для вывода wchar_t использовать не получится.
Я заглянул в исходный код библиотек... Насколько я понимаю (и по "...\r\n" окончаниям текстовых строк кода), вы работу своей библиотеки не смотрели (не проверяли)?: в Linux, с его Ardyino IDE, и с повсеместным представлением символьных строк там в UTF-8... Есть некотоые вопросы к коду библиотеки.
по второй ссылке библиотека прекрасно работает без всяких доработок
Никогда не говори: "Никогда"!
;-)
Вот когда я это проверю в Linux Arduino IDE - вот тогда и скажем "прекрасно работает".
Я заглянул в исходный код библиотек... Насколько я понимаю (и по "...\r\n" окончаниям текстовых строк кода), вы работу своей библиотеки не смотрели (не проверяли)?: в Linux, с его Ardyino IDE, и с повсеместным представлением символьных строк там в UTF-8... Есть некотоые вопросы к коду библиотеки.
Конечно нет. В линуксе не проверял. Писал под винду. Код библиотеки открыт, если есть желание переписать его под линукс - можете за это взяться.
Конечно нет. В линуксе не проверял. Писал под винду. Код библиотеки открыт, если есть желание переписать его под линукс - можете за это взяться.
Я посмотрю код ... обязательно - по коду и по работе. И отвечу сюда, когда будет что сказать.
Доброго времени суток!
Только начинаю осваивать Arduino и экранчики.
В ходе экспериментов с клоном под оригинал Uno r3 и синим экраном с клавиатурой (предположительно LCD 1602 - картинка очень похожа на пост #51), подозреваю, что русский язык в экранчик не прошит.
получился такой код (частично добыт из примеров)
и на экранчике не много не так отображаются символы как ожидалось и притом они меняются если выводить их как сделано в loop.
Вопрос: это у меня экранчик такой особенный или поправить что то в коде надо ?
если не затрудни прошу провести эксперимент.
/* The circuit: * LCD RS pin to digital pin 12 * LCD Enable pin to digital pin 11 * LCD D4 pin to digital pin 5 * LCD D5 pin to digital pin 4 * LCD D6 pin to digital pin 3 * LCD D7 pin to digital pin 2 * LCD R/W pin to ground * LCD VSS pin to ground * LCD VCC pin to 5V * 10K resistor: * ends to +5V and ground * wiper to LCD VO pin (pin 3) */ #include <LiquidCrystal_1602_RUS.h> //LiquidCrystal_1602_RUS lcd(12, 11, 5, 4, 3, 2); LiquidCrystal_1602_RUS lcd(8, 9, 4, 5, 6, 7 );//For LCD Keypad Shield void setup() { lcd.begin(16, 2); lcd.clear(); /* // здесь вывод возможных символов и их кодов десятичных // при нажатии правой кнопки выход из показа кодов int x; lcd.setCursor(0,1); lcd.print ("НажмиRight-ВЫХОД"); for(x=0; x<255; x = x+1) { delay(100); int x1; x1 = analogRead (0); lcd.setCursor(0, 0); lcd.write(byte(x)); lcd.setCursor(6, 0); lcd.print("код="); lcd.print(x); delay(400); lcd.setCursor(0, 0); lcd.print(" "); if (x1 < 60) { // была нажата клавиша вправо - досрочное окончание вывода кодов и символов lcd.setCursor(0,1); lcd.print (" Конец теста "); x = 255; delay(5000); } } // окончание вывода кодов символов */ lcd.clear(); // Print a message to the LCD. lcd.setCursor(1, 0); // выводим сообщение, а на экране немного не то написано что ожидается // lcd.print(L"МожЖжно печатать"); lcd.print(L"МожЖжно печата"); lcd.setCursor(3, 1); lcd.print(L"на русском 1"); delay(5000); // выводим сообщение, а на экране немного не то написано,что ожидается lcd.setCursor(1, 0); lcd.print(L"Можно печатать "); lcd.setCursor(3, 1); lcd.print(L"на русском 2 "); delay(5000); } void loop() { lcd.clear(); // выводим сообщение по кругу обратите внимание символы на экране периодически меняются если немного понаблюдать // хотя непонятно отчего им меняться... ? lcd.setCursor(1, 0); lcd.print(L"МожЖжно ЛИ ещё"); // особенное внимание на место где третья "ж" // lcd.print("МожЖжно ЛИ ещё"); // Вроде бы по моим экспериментам L влияет на вывод текста lcd.setCursor(3, 1); lcd.print(L"на русском 1"); delay(2000); lcd.print("МожЖжно ЛИ ещё"); // особенное внимание на место где третья "ж" // lcd.print("МожЖжно ЛИ ещё"); // Вроде бы по моим экспериментам L влияет на вывод текста lcd.setCursor(3, 1); lcd.print("на русском 2"); delay(2000); }Товарищи!
а если вариант сброса символов без lcd.clear();?
Товарищи!
а если вариант сброса символов без lcd.clear();?
Есть: записать во все знакоместа пробелы.
Есть: записать во все знакоместа пробелы.
не, это не работает, без сброса переполняется и начинает выводить всякую дичь
а с очисткой экрана он каждый раз мерзко мерцает после этого
не, это не работает, без сброса переполняется и начинает выводить всякую дичь
а с очисткой экрана он каждый раз мерзко мерцает после этого
Должно работать. И что значит - переполняется? Куда переполняется? Зачем через край льёте? Минимальный код, воспроизводящий проблему - давайте, а то непонятно, что там у вас переполняется и какой марки дичь.
Это я просто вопрос в разрезе темы задал, без уточнений)
Я использую библиотеку товарища с первой страницы, она генерит недостающие буквы кирилицы, и с очисткой дисплея все работает как надо, но экран при очистке мигает и мне это не нравится.
Вот я и хотел узнать, может есть какая команда очистки сгененрированных символов, чтобы не прибегать к очистке экрана.
Это я просто вопрос в разрезе темы задал, без уточнений)
Я использую библиотеку товарища с первой страницы, она генерит недостающие буквы кирилицы, и с очисткой дисплея все работает как надо, но экран при очистке мигает и мне это не нравится.
Вот я и хотел узнать, может есть какая команда очистки сгененрированных символов, чтобы не прибегать к очистке экрана.
А что мешает открыть исходники библиотеки и дописать там публичную функцию очистки сгенерированных символов?
А что мешает открыть исходники библиотеки и дописать там публичную функцию очистки сгенерированных символов?
я не знаю как это сделать
А что мешает открыть исходники библиотеки и дописать там публичную функцию очистки сгенерированных символов?
я не знаю как это сделать
Сгенерированный символ можно переписать во время работы дисплея, и его отображение сразу изменится.
Пример здесь: http://arduino.ru/forum/programmirovanie/etyud-multik-na-lcd-1602
Смотрю тема жива и волнительна, автор библиотеки тоже сюда заглядывает... Это радует )))
А теперь естественно вопрос на засыпку...
Есть текстовый файлик на SD карте состоящий из строк длинною до 40 символов, читаю файл построчно и хотелось бы выводить строки на дисплей, можно отбрасывая символы после 16, это не критично...
Но вот как вывести строку с использованием данной библиотеки я не пойму???
ssilver2007
ssilver2007 спасибо вам за труды.
#include <LCD_1602_RUS.h> LCD_1602_RUS lcd(0x3F, 20, 4); char *Msg []= {// массив сообщений " STOP", //0//стоп "BПEPEД->",//1//вперед "<-HAЗAД",//2//назад "->",//3 вперед "ПAYЗA",//4//пауза "ABTO PEЖИM",//5//авто режим "PYЧHOЙ PEЖИM",//6// ручной режим "ЦИKЛ 1",//7//цикл1 "ЦИKЛ 2",//8//цикл2 "ПРОГРАМ ",//9//прогрм "max xod",//10//мах ход "COXPAH",//11//сохран "ALARM xod" //12//"ALARM xod" }; unsigned long pauza=0; byte i =0; void setup() { lcd.init(); // initialize the lcd // Print a message to the LCD. lcd.backlight(); } void loop() {if(millis()>pauza){ pauza=millis()+2000; lcd.clear(); lcd.setCursor(2, 0); // lcd.print(L"Теперь можно"); lcd.setCursor(3, 1); lcd.print(L"по-русски"); i>=12 ? i=0: i++; lcd.setCursor(0,3); lcd.print(Msg [i]); } }Всё правильно, так и должно быть. Just keep calm and pray.
почему?
Такова жизнь. Никто же не спрашивает, почему яблоки падают вниз, а не влево.
и из-за этого нужно писать в форум?... откройте библиотеку и посмотрите, есть там функция begin() или нет?
В древних версиях LiquidCrystal_I2C вместо begin была функция init. Я так понимаю, библиотеку тогда растащили по своим сайтам писатели статей, откуда ее до сих пор многие и качают. Потому либо LiquidCrystal_I2C.init(), либо качайте актуальную версию.
Добрый день. Помогите новичку. Есть проэкт автоматики для автоклава, проблема в русификации меню с приминением символов. Изначально проэкт скомпилирован в FLprog. Не могу понять как прописать символы в функции progmem.
Сам код
#include <Wire.h> #include <OneWire.h> #include <LiquidCrystal_I2C.h> #include <EEPROM.h> LiquidCrystal_I2C _lcd1(0x27, 16, 2); int _dispTempLength1=0; boolean _isNeedClearDisp1; byte _d18x2x1Addr[8]={0x28, 0xFF, 0x46, 0x82, 0x1, 0x17, 0x3, 0x28}; byte bukva_B[8] = {B11110,B10000,B10000,B11110,B10001,B10001,B11110,B00000,}; // Буква "Б" byte bukva_G[8] = {B11111,B10001,B10000,B10000,B10000,B10000,B10000,B00000,}; // Буква "Г" byte bukva_D[8] = {B01111,B00101,B00101,B01001,B10001,B11111,B10001,B00000,}; // Буква "Д" byte bukva_ZH[8] = {B10101,B10101,B10101,B11111,B10101,B10101,B10101,B00000,}; // Буква "Ж" byte bukva_Z[8] = {B01110,B10001,B00001,B00010,B00001,B10001,B01110,B00000,}; // Буква "З" byte bukva_I[8] = {B10001,B10011,B10011,B10101,B11001,B11001,B10001,B00000,}; // Буква "И" byte bukva_IY[8] = {B01110,B00000,B10001,B10011,B10101,B11001,B10001,B00000,}; // Буква "Й" byte bukva_L[8] = {B00011,B00111,B00101,B00101,B01101,B01001,B11001,B00000,}; // Буква "Л" byte bukva_P[8] = {B11111,B10001,B10001,B10001,B10001,B10001,B10001,B00000,}; // Буква "П" byte bukva_Y[8] = {B10001,B10001,B10001,B01010,B00100,B01000,B10000,B00000,}; // Буква "У" byte bukva_F[8] = {B00100,B11111,B10101,B10101,B11111,B00100,B00100,B00000,}; // Буква "Ф" byte bukva_TS[8] = {B10010,B10010,B10010,B10010,B10010,B10010,B11111,B00001,}; // Буква "Ц" byte bukva_CH[8] = {B10001,B10001,B10001,B01111,B00001,B00001,B00001,B00000,}; // Буква "Ч" byte bukva_Sh[8] = {B10101,B10101,B10101,B10101,B10101,B10101,B11111,B00000,}; // Буква "Ш" byte bukva_Shch[8]= {B10101,B10101,B10101,B10101,B10101,B10101,B11111,B00001,}; // Буква "Щ" byte bukva_Mz[8] = {B10000,B10000,B10000,B11110,B10001,B10001,B11110,B00000,}; // Буква "Ь" byte bukva_IYI[8] = {B10001,B10001,B10001,B11001,B10101,B10101,B11001,B00000,}; // Буква "Ы" byte bukva_Yu[8] = {B10010,B10101,B10101,B11101,B10101,B10101,B10010,B00000,}; // Буква "Ю" byte bukva_Ya[8] = {B01111,B10001,B10001,B01111,B00101,B01001,B10001,B00000,}; // Буква "Я" OneWire _ow10(10); unsigned long _ow10P=0; bool _ow10W=0; const byte _menuParametrsArray[] PROGMEM = {1, 3, 1, 0, 0, 0, 2, 5, 1, 4, 1, 0, 2, 3, 2, 0, 0, 0, 3, 5, 1, 4, 2, 0, 3, 3, 3, 0, 0, 0, 4, 5, 1, 4, 3, 0, 4, 3, 4, 0, 0, 0, 5, 5, 1, 4, 4, 0}; int _menuValueArray_int[4]; const int _menuConstantValuesArray_int[] PROGMEM = {1, 5, 125, 500, 0}; const char _flprogMenuNameString1[] PROGMEM = "Select"; const char _flprogMenuNameString2[] PROGMEM = "Temperatura"; const char _flprogMenuNameString3[] PROGMEM = "Time"; const char _flprogMenuNameString4[] PROGMEM = "Start"; const char* const _flprogMenuStringsArray[] PROGMEM = { _flprogMenuNameString1, _flprogMenuNameString2, _flprogMenuNameString3, _flprogMenuNameString4}; struct _menuItemStricture { int startInArrayIndex; }; struct _menuMainStricture { byte startIndex; byte stopIndex; bool isSwitchMenuAroundRing; _menuItemStricture currentItem; }; _menuItemStricture _MenuItems[4]; _menuMainStricture _MainMenus[1]; int _gtv1; bool _gtv2 = 0; bool _gtv3 = 0; bool _gtv4 = 0; bool _gtv5 = 0; bool _gtv6 = 0; bool _gtv7 = 0; int _gtv8; unsigned long _d18x2x1Tti = 0UL; float _d18x2x1O = 0.00; bool _d18x2x1W = 0; int _disp1oldLength = 0; String _mux1; bool _trgs3 = 0; int _disp8oldLength = 0; bool _gen2I = 0; bool _gen2O = 0; unsigned long _gen2P = 0UL; int _disp6oldLength = 0; bool _tim1I = 0; bool _tim1O = 0; unsigned long _tim1P = 0UL; int _mux3; bool _tim2I = 0; bool _tim2O = 0; unsigned long _tim2P = 0UL; bool _MenuBlock_283847175_AMO_364779288 = 0; bool _MenuBlock_283847175_AMO_200029256 = 0; bool _MenuBlock_283847175_AMO_401335196 = 0; bool _MenuBlock_283847175_AMO_243670111 = 0; String _MenuBlock_283847175_MNO; String _MenuBlock_283847175_VNO; bool _MenuBlock_283847175_OEIS = 0; bool _MenuBlock_283847175_OMUIS = 0; bool _MenuBlock_283847175_OMDIS = 0; bool _MenuBlock_283847175_OVUIS = 0; bool _MenuBlock_283847175_OVDIS = 0; unsigned long _MenuBlock_283847175_VUDST = 0UL; unsigned long _MenuBlock_283847175_VUDSPT = 0UL; byte _MenuBlock_283847175_VUDSM = 0; int _MenuBlock_283847175_VUDPT = 0; bool _bounseInputD6S = 0; bool _bounseInputD6O = 0; unsigned long _bounseInputD6P = 0UL; bool _trgrt1 = 0; bool _trgrt1I = 0; bool _gen1I = 0; bool _gen1O = 0; unsigned long _gen1P = 0UL; bool _trgrt5 = 0; bool _trgrt5I = 0; bool _bounseInputD5S = 0; bool _bounseInputD5O = 0; unsigned long _bounseInputD5P = 0UL; bool _bounseInputD7S = 0; bool _bounseInputD7O = 0; unsigned long _bounseInputD7P = 0UL; int _disp7oldLength = 0; bool _gen3I = 0; bool _gen3O = 0; unsigned long _gen3P = 0UL; bool _trgs1 = 0; int _disp3oldLength = 0; int _mux2; int _disp2oldLength = 0; int _disp4oldLength = 0; bool _trgs2 = 0; bool _bounseInputD8S = 0; bool _bounseInputD8O = 0; unsigned long _bounseInputD8P = 0UL; bool _trgrt3 = 0; bool _trgrt3I = 0; bool _tim4I = 0; bool _tim4O = 0; unsigned long _tim4P = 0UL; int _disp9oldLength = 0; int _disp5oldLength = 0; String _swi1; bool _trgrt2 = 0; bool _trgrt2I = 0; void setup() { Wire.begin(); delay(10); if(((readByteFromEEPROM(0, 0, 0x0))) != 241) { (updateByteToEEPROM(0, 0, 0x0, (241))); (updateIntegerToEEPROM(1, 0, 0x0, (0))); (updateIntegerToEEPROM(3, 0, 0x0, (100))); (updateIntegerToEEPROM(5, 0, 0x0, (30))); } pinMode(5, INPUT_PULLUP); pinMode(6, INPUT_PULLUP); pinMode(7, INPUT_PULLUP); pinMode(8, INPUT_PULLUP); pinMode(13, OUTPUT); pinMode(4, OUTPUT); pinMode(12, OUTPUT); pinMode(0, OUTPUT); _lcd1.init(); _lcd1.backlight(); _bounseInputD5O = digitalRead(5); _bounseInputD7O = digitalRead(7); _bounseInputD6O = digitalRead(6); _bounseInputD8O = digitalRead(8); _MenuItems[0].startInArrayIndex = 0; _MenuItems[1].startInArrayIndex = 12; _MenuItems[2].startInArrayIndex = 24; _MenuItems[3].startInArrayIndex = 36; _MainMenus[0].startIndex = 1; _MainMenus[0].isSwitchMenuAroundRing = 1; _MainMenus[0].stopIndex = 4; _MainMenus[0].currentItem = _MenuItems[0]; _menuValueArray_int[0] = (readIntegerFromEEPROM(1, 0, 0x0)); _menuValueArray_int[1] = (readIntegerFromEEPROM(3, 0, 0x0)); _menuValueArray_int[2] = (readIntegerFromEEPROM(5, 0, 0x0)); } void loop() {bool _tempVariable_bool; byte _tempVariable_byte; if (_isNeedClearDisp1) {_lcd1.clear(); _isNeedClearDisp1= 0;} bool _bounceInputTmpD7 = (digitalRead (7)); if (_bounseInputD7S) { if (millis() >= (_bounseInputD7P + 40)) {_bounseInputD7O= _bounceInputTmpD7; _bounseInputD7S=0;} } else { if (_bounceInputTmpD7 != _bounseInputD7O ) {_bounseInputD7S=1; _bounseInputD7P = millis();} } bool _bounceInputTmpD5 = (digitalRead (5)); if (_bounseInputD5S) { if (millis() >= (_bounseInputD5P + 40)) {_bounseInputD5O= _bounceInputTmpD5; _bounseInputD5S=0;} } else { if (_bounceInputTmpD5 != _bounseInputD5O ) {_bounseInputD5S=1; _bounseInputD5P = millis();} } bool _bounceInputTmpD6 = (digitalRead (6)); if (_bounseInputD6S) { if (millis() >= (_bounseInputD6P + 40)) {_bounseInputD6O= _bounceInputTmpD6; _bounseInputD6S=0;} } else { if (_bounceInputTmpD6 != _bounseInputD6O ) {_bounseInputD6S=1; _bounseInputD6P = millis();} } bool _bounceInputTmpD8 = (digitalRead (8)); if (_bounseInputD8S) { if (millis() >= (_bounseInputD8P + 40)) {_bounseInputD8O= _bounceInputTmpD8; _bounseInputD8S=0;} } else { if (_bounceInputTmpD8 != _bounseInputD8O ) {_bounseInputD8S=1; _bounseInputD8P = millis();} } //Плата:1 //Наименование:Блок меню if (!(!(_bounseInputD5O))) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;}; if (!(!(_bounseInputD6O))) { if (_trgrt2I) { _trgrt2 = 0;} else {_trgrt2 = 1; _trgrt2I = 1;} } else {_trgrt2 = 0; _trgrt2I = 0;}; if (!(_gtv7)) { _tempVariable_bool = 1; if ( ! _MenuBlock_283847175_OEIS ) {_MenuBlock_283847175_OEIS = 1; } _tempVariable_byte = pgm_read_byte(&_menuParametrsArray[((_MainMenus[0].currentItem ).startInArrayIndex)+10]); _MenuBlock_283847175_MNO = _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[_tempVariable_byte - 1]))); _MenuBlock_283847175_VNO = _menuOutputValueString (0); _MenuBlock_283847175_AMO_364779288 = pgm_read_byte(&_menuParametrsArray[(_MainMenus[0].currentItem ).startInArrayIndex]) == 1; _MenuBlock_283847175_AMO_200029256 = pgm_read_byte(&_menuParametrsArray[(_MainMenus[0].currentItem ).startInArrayIndex]) == 2; _MenuBlock_283847175_AMO_401335196 = pgm_read_byte(&_menuParametrsArray[(_MainMenus[0].currentItem ).startInArrayIndex]) == 3; _MenuBlock_283847175_AMO_243670111 = pgm_read_byte(&_menuParametrsArray[(_MainMenus[0].currentItem ).startInArrayIndex]) == 4; } else { _tempVariable_bool = 0; if (_MenuBlock_283847175_OEIS){ _MenuBlock_283847175_OEIS = 0; _menuUpdateToEEpromItems(); } _MenuBlock_283847175_AMO_364779288 = 0; _MenuBlock_283847175_AMO_200029256 = 0; _MenuBlock_283847175_AMO_401335196 = 0; _MenuBlock_283847175_AMO_243670111 = 0; _MenuBlock_283847175_MNO = ""; _MenuBlock_283847175_VNO = ""; } if(_trgrt1) { if ( ! _MenuBlock_283847175_OMUIS) {_MenuBlock_283847175_OMUIS = 1;if (_tempVariable_bool){ _menuUpEvents(0); _menuUpdateToEEpromItems(); }}} else {_MenuBlock_283847175_OMUIS = 0;} if(_trgrt2) { if ( ! _MenuBlock_283847175_OMDIS) {_MenuBlock_283847175_OMDIS = 1;if (_tempVariable_bool){ _menuDownEvents(0); _menuUpdateToEEpromItems(); }}} else {_MenuBlock_283847175_OMDIS = 0;} if(!(_bounseInputD7O)) { if ( ! _MenuBlock_283847175_OVUIS) {_MenuBlock_283847175_OVUIS = 1; if (_tempVariable_bool){ _valueUpEvents(0); _MenuBlock_283847175_VUDST = millis();} }if (_tempVariable_bool){ if (_MenuBlock_283847175_VUDSM == 0) { if (_isTimer(_MenuBlock_283847175_VUDST , 2000 )) {_MenuBlock_283847175_VUDSM = 1; _MenuBlock_283847175_VUDSPT = millis(); _MenuBlock_283847175_VUDPT = 500;}} else { if (_MenuBlock_283847175_VUDSM == 1) { if (_isTimer(_MenuBlock_283847175_VUDST , 4000 )) {_MenuBlock_283847175_VUDSM = 2;_MenuBlock_283847175_VUDPT = 250; } } if (_isTimer(_MenuBlock_283847175_VUDSPT , _MenuBlock_283847175_VUDPT )) { _valueUpEvents(0); _MenuBlock_283847175_VUDSPT = millis();} } }} else {_MenuBlock_283847175_OVUIS = 0; if( ! ( !(_bounseInputD8O))){_MenuBlock_283847175_VUDSM = 0; }} if(!(_bounseInputD8O)) { if ( ! _MenuBlock_283847175_OVDIS) {_MenuBlock_283847175_OVDIS = 1; if (_tempVariable_bool){ _valueDownEvents(0); _MenuBlock_283847175_VUDST = millis();}} if (_tempVariable_bool){ if (_MenuBlock_283847175_VUDSM == 0) { if (_isTimer(_MenuBlock_283847175_VUDST , 2000 )) {_MenuBlock_283847175_VUDSM = 1; _MenuBlock_283847175_VUDSPT = millis(); _MenuBlock_283847175_VUDPT = 500;}} else { if (_MenuBlock_283847175_VUDSM == 1) { if (_isTimer(_MenuBlock_283847175_VUDST , 4000 )) {_MenuBlock_283847175_VUDSM = 2;_MenuBlock_283847175_VUDPT = 250; } } if (_isTimer(_MenuBlock_283847175_VUDSPT , _MenuBlock_283847175_VUDPT )) { _valueDownEvents(0); _MenuBlock_283847175_VUDSPT = millis();} } }} else {_MenuBlock_283847175_OVDIS = 0; if( ! ( !(_bounseInputD7O))){_MenuBlock_283847175_VUDSM = 0; }} _gtv5 = _MenuBlock_283847175_AMO_243670111; if(((_menuValueArray_int[0])) == 0) {_mux1 = String("Your");} if(((_menuValueArray_int[0])) == 1) {_mux1 = String("Meat");} if(((_menuValueArray_int[0])) == 2) {_mux1 = String("Chicken");} if(((_menuValueArray_int[0])) == 3) {_mux1 = String("Fish");} if(((_menuValueArray_int[0])) == 4) {_mux1 = String("Vegetables");} if(((_menuValueArray_int[0])) == 5) {_mux1 = String("Mushrooms");} if(_MenuBlock_283847175_AMO_364779288) {_swi1=_mux1;} else {_swi1=_MenuBlock_283847175_VNO;} if (( (!(_gtv7)) && (( (_MenuBlock_283847175_AMO_364779288) || (_MenuBlock_283847175_AMO_200029256) || (_MenuBlock_283847175_AMO_401335196) )) )) { _dispTempLength1 = ((_swi1)).length(); if (_disp2oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} _disp2oldLength = _dispTempLength1; _lcd1.setCursor(int((16 - _dispTempLength1)/2), 1); _lcd1.print((_swi1)); } else { if (_disp2oldLength > 0) {_isNeedClearDisp1 = 1; _disp2oldLength = 0;} } if (( (!(_gtv7)) && (( (_MenuBlock_283847175_AMO_364779288) || (_MenuBlock_283847175_AMO_200029256) || (_MenuBlock_283847175_AMO_401335196) || (_MenuBlock_283847175_AMO_243670111) )) )) { _dispTempLength1 = ((_MenuBlock_283847175_MNO)).length(); if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} _disp1oldLength = _dispTempLength1; _lcd1.setCursor(int((16 - _dispTempLength1)/2), 0); _lcd1.print((_MenuBlock_283847175_MNO)); } else { if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;} } //Плата:2 //Наименование:Терморегулятор if(_isTimer(_d18x2x1Tti, 1000)) { _d18x2x1Tti = millis(); if ( !_ow10W){_ow10W=1; _d18x2x1W= 1; _ow10P= millis();} else {if( _d18x2x1W) {if(abs(millis()-_ow10P)>1000) { _d18x2x1O= _readDS18_ow10(_d18x2x1Addr, 0);_d18x2x1W=0; _ow10W=0;}}}} _gtv1 = (int((_d18x2x1O))); if(((_menuValueArray_int[0])) == 0) {_mux2 = (_menuValueArray_int[1]);} if(((_menuValueArray_int[0])) == 1) {_mux2 = 120;} if(((_menuValueArray_int[0])) == 2) {_mux2 = 120;} if(((_menuValueArray_int[0])) == 3) {_mux2 = 115;} if(((_menuValueArray_int[0])) == 4) {_mux2 = 100;} if(((_menuValueArray_int[0])) == 5) {_mux2 = 115;} _gtv8 = _mux2; _gtv3 = (_gtv1) >= ((_mux2)+(5)); if(( (_gtv5) && (!(_bounseInputD7O)) )) _trgs3 = 1; if(( (_gtv7) && (!(_bounseInputD8O)) )) _trgs3 = 0; _gtv7 = _trgs3; _gtv6 = (_gtv1) >= (_mux2); if(( (_trgs3) && ((_gtv1) <= ((_mux2)-(1.00))) )) _trgs1 = 1; if(( ((_gtv1) >= (_mux2)) || (( (_gtv7) && (!(_bounseInputD8O)) )) )) _trgs1 = 0; if (( (_gtv7) && (!(( (!(_gtv2)) && (_trgs1) ))) && (!(_gtv2)) )) { _dispTempLength1 = (String("Off")).length(); if (_disp6oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} _disp6oldLength = _dispTempLength1; _lcd1.setCursor(13, 0); _lcd1.print(String("Off")); } else { if (_disp6oldLength > 0) {_isNeedClearDisp1 = 1; _disp6oldLength = 0;} } if (( (( (!(_gtv2)) && (_trgs1) )) && (_gtv7) && (!(_gtv2)) )) { _dispTempLength1 = (String("On")).length(); if (_disp5oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} _disp5oldLength = _dispTempLength1; _lcd1.setCursor(13, 0); _lcd1.print(String("On")); } else { if (_disp5oldLength > 0) {_isNeedClearDisp1 = 1; _disp5oldLength = 0;} } digitalWrite(4, ( (!(_gtv2)) && (_trgs1) )); digitalWrite(13, !(( (!(_gtv2)) && (_trgs1) ))); //Плата:3 //Наименование:Таймер if (_gtv2) { _dispTempLength1 = (String("Finish")).length(); if (_disp8oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} _disp8oldLength = _dispTempLength1; _lcd1.setCursor(int((16 - _dispTempLength1)/2), 0); _lcd1.print(String("Finish")); } else { if (_disp8oldLength > 0) {_isNeedClearDisp1 = 1; _disp8oldLength = 0;} } if(( (_gtv6) && (!(_gtv4)) )) _trgs2 = 1; if(( (_gtv2) && (!(_bounseInputD8O)) )) _trgs2 = 0; _gtv4 = _trgs2; if(((_menuValueArray_int[0])) == 0) {_mux3 = (_menuValueArray_int[2]);} if(((_menuValueArray_int[0])) == 1) {_mux3 = 60;} if(((_menuValueArray_int[0])) == 2) {_mux3 = 50;} if(((_menuValueArray_int[0])) == 3) {_mux3 = 30;} if(((_menuValueArray_int[0])) == 4) {_mux3 = 20;} if(((_menuValueArray_int[0])) == 5) {_mux3 = 40;} if (( (!(_gtv2)) && (_gtv7) )) { _dispTempLength1 = (((((String(_mux3, DEC))) + (String(" min"))))).length(); if (_disp7oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} _disp7oldLength = _dispTempLength1; _lcd1.setCursor(int((16 - _dispTempLength1)/2), 1); _lcd1.print(((((String(_mux3, DEC))) + (String(" min"))))); } else { if (_disp7oldLength > 0) {_isNeedClearDisp1 = 1; _disp7oldLength = 0;} } if (_trgs2) { if (_tim1I) { if (_isTimer(_tim1P, (_mux3)*(60000UL))) {_tim1O = 1;}} else {_tim1I =1; _tim1P = millis();}} else {_tim1O = 0; _tim1I = 0;} _gtv2 = _tim1O; if (_gtv2) { _dispTempLength1 = ((((String("t ")) + ((String(_gtv1, DEC)))))).length(); if (_disp9oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} _disp9oldLength = _dispTempLength1; _lcd1.setCursor(int((16 - _dispTempLength1)/2), 1); _lcd1.print((((String("t ")) + ((String(_gtv1, DEC)))))); } else { if (_disp9oldLength > 0) {_isNeedClearDisp1 = 1; _disp9oldLength = 0;} } //Плата:4 //Наименование:Finish if (( (_gtv7) && (!(_gtv2)) )) { _dispTempLength1 = ((((String("t ")) + ((String(_gtv1, DEC)))))).length(); if (_disp3oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} _disp3oldLength = _dispTempLength1; _lcd1.setCursor(0, 0); _lcd1.print((((String("t ")) + ((String(_gtv1, DEC)))))); } else { if (_disp3oldLength > 0) {_isNeedClearDisp1 = 1; _disp3oldLength = 0;} } if (( (_gtv7) && (!(_gtv2)) )) { _dispTempLength1 = (((String(_gtv8, DEC)))).length(); if (_disp4oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} _disp4oldLength = _dispTempLength1; _lcd1.setCursor(9, 0); _lcd1.print(((String(_gtv8, DEC)))); } else { if (_disp4oldLength > 0) {_isNeedClearDisp1 = 1; _disp4oldLength = 0;} } if (( (_gtv2) && ((_gtv1) <= (60)) )) { if (_trgrt5I) { _trgrt5 = 0;} else {_trgrt5 = 1; _trgrt5I = 1;} } else {_trgrt5 = 0; _trgrt5I = 0;}; if(_trgrt5) {_tim4O = 1; _tim4I = 1;} else { if(_tim4I) {_tim4I = 0; _tim4P = millis();} else { if (_tim4O) {if ( _isTimer(_tim4P, 5000)) _tim4O = 0;}}} if (_tim4O) { if (! _gen2I) { _gen2I = 1; _gen2O = 1; _gen2P = millis(); } } else { _gen2I = 0 ; _gen2O= 0;} if (_gen2I) { if ( _isTimer ( _gen2P , 200 )) { _gen2P = millis(); _gen2O = ! _gen2O;}} if (_gtv2) { if (_trgrt3I) { _trgrt3 = 0;} else {_trgrt3 = 1; _trgrt3I = 1;} } else {_trgrt3 = 0; _trgrt3I = 0;}; if(_trgrt3) {_tim2O = 1; _tim2I = 1;} else { if(_tim2I) {_tim2I = 0; _tim2P = millis();} else { if (_tim2O) {if ( _isTimer(_tim2P, 5000)) _tim2O = 0;}}} if (_tim2O) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = millis(); } } else { _gen1I = 0 ; _gen1O= 0;} if (_gen1I) { if ( _isTimer ( _gen1P , 500 )) { _gen1P = millis(); _gen1O = ! _gen1O;}} if (( (_gtv4) && ((_gtv1) >= (((_menuValueArray_int[1]))+(5))) )) {if (! _gen3I) { _gen3I = 1; _gen3O = 1; _gen3P = millis(); } } else { _gen3I = 0 ; _gen3O= 0; } if (_gen3I ) { if (_gen3O) { if ( _isTimer( _gen3P , 500 )) { _gen3P = millis(); _gen3O = 0; } } else { if ( _isTimer( _gen3P , 100 )) { _gen3P = millis(); _gen3O = 1; } } } digitalWrite(12, ( (_gen1O) || (_gen2O) || (_gen3O) )); digitalWrite(0, ( (!(_gtv2)) && (_gtv4) )); } bool _isTimer(unsigned long startTime, unsigned long period ) { unsigned long currentTime; currentTime = millis(); if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));} } String _readStringFromProgmem (char *string) { String result = String(""); while (pgm_read_byte(string)!='\0') { result=result+ char(pgm_read_byte(string)); string++; } return result; } void _menuUpEvents (byte menuIndex) { byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]); byte parIndex = pgm_read_byte(&_menuParametrsArray[ (((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+5]); byte parentStartIndex; byte parentStopIndex; if (parIndex == 0) {parentStartIndex = (_MainMenus[menuIndex]).startIndex; parentStopIndex = (_MainMenus[menuIndex]).stopIndex;} else { parentStartIndex = pgm_read_byte(&_menuParametrsArray[( (_MenuItems[parIndex - 1]).startInArrayIndex)+3]); parentStopIndex = pgm_read_byte(&_menuParametrsArray[( (_MenuItems[parIndex-1]).startInArrayIndex)+4]); } if (tempIndex == parentStartIndex) {if((_MainMenus[menuIndex]).isSwitchMenuAroundRing) {(_MainMenus[menuIndex]).currentItem = _MenuItems[parentStopIndex -1]; return;} else{return;}} (_MainMenus[menuIndex]).currentItem = _MenuItems[tempIndex - 2]; return; } void _menuDownEvents (byte menuIndex) { byte tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]); byte parIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+5]); byte parentStartIndex; byte parentStopIndex; if (parIndex == 0) {parentStartIndex = (_MainMenus[menuIndex]).startIndex; parentStopIndex = (_MainMenus[menuIndex]).stopIndex;} else { parentStartIndex = pgm_read_byte(&_menuParametrsArray[( (_MenuItems[parIndex-1]).startInArrayIndex)+3]); parentStopIndex = pgm_read_byte(&_menuParametrsArray[((_MenuItems[parIndex-1]).startInArrayIndex)+4]); } if (tempIndex == parentStopIndex) {if((_MainMenus[menuIndex]).isSwitchMenuAroundRing) {(_MainMenus[menuIndex]).currentItem = _MenuItems[parentStartIndex -1]; return;} else{return;}} (_MainMenus[menuIndex]).currentItem = _MenuItems[tempIndex]; return; } void _valueUpEvents (byte menuIndex) { byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+2]); byte itemType = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+1]); byte indexMax = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+6]); byte indexStep = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+8]); if (itemType == 3) {if (! indexMax == 0) { if ( ! (int(pgm_read_word(&_menuConstantValuesArray_int[indexMax -1])) > int(_menuValueArray_int[valIndex -1]))) {return;} } _menuValueArray_int[valIndex -1] = _menuValueArray_int[valIndex -1] + (pgm_read_word(&_menuConstantValuesArray_int[indexStep -1])); } } void _valueDownEvents (byte menuIndex) { byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+2]); byte itemType = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+1]); byte indexMin = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+7]); byte indexStep = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+8]); if (itemType == 3) { if (! indexMin == 0) { if ( ! ((int(pgm_read_word(&_menuConstantValuesArray_int[indexMin - 1]))) < int(_menuValueArray_int[valIndex - 1]))) {return;}} _menuValueArray_int[valIndex - 1] = _menuValueArray_int[valIndex - 1] - (pgm_read_word(&_menuConstantValuesArray_int[indexStep - 1])); } } String _menuOutputValueString (byte menuIndex) { byte itemType = pgm_read_byte(&_menuParametrsArray[ (((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+1]); byte valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+2]); byte indexMin = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+7]); byte indexMax = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+6]); if( valIndex == 0){ return "";} byte convFormat = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+9]); if(itemType == 3) { return _convertNamber(itemType, convFormat, valIndex, indexMax, indexMin);} return ""; } void _menuUpdateToEEpromItems() { (updateIntegerToEEPROM(1, 0, 0x0, ((_menuValueArray_int[0])))); (updateIntegerToEEPROM(3, 0, 0x0, ((_menuValueArray_int[1])))); (updateIntegerToEEPROM(5, 0, 0x0, ((_menuValueArray_int[2])))); } String _convertNamber(byte itemType, byte convFormat, byte valIndex, byte indexMax, byte indexMin) { if (itemType== 3) { if (convFormat == 4) { return String((_menuValueArray_int[valIndex - 1 ]),DEC);} if (convFormat == 5) { return String((_menuValueArray_int[valIndex - 1]),HEX);} if (convFormat == 6) { return String((_menuValueArray_int[valIndex -1]),BIN);} } } float _convertDS18x2xData(byte type_s, byte data[12]) { int16_t raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); if (cfg == 0x00) raw = raw & ~7; else if (cfg == 0x20) raw = raw & ~3; else if (cfg == 0x40) raw = raw & ~1; } return (float)raw / 16.0; } float _readDS18_ow10(byte addr[8], byte type_s) { byte data[12]; byte i; _ow10.reset(); _ow10.select(addr); _ow10.write(0xBE); for ( i = 0; i < 9; i++) { data[i] = _ow10.read();} _ow10.reset(); _ow10.select(addr); _ow10.write(0x44, 1); return _convertDS18x2xData(type_s, data);} byte readByteFromEEPROM(int addres, byte bitAddres, byte chipAddres) { return EEPROM.read(addres); } void updateByteToEEPROM(int addres, byte bitAddres, byte chipAddres, byte value) { return EEPROM.update(addres, value); } int readIntegerFromEEPROM(int addres, byte bitAddres, byte chipAddres) { byte hight = readByteFromEEPROM( addres, bitAddres, chipAddres); byte low = readByteFromEEPROM( (addres+1), bitAddres, chipAddres); return word(hight, low); } void updateIntegerToEEPROM(int addres, byte bitAddres, byte chipAddres, int value) { updateByteToEEPROM( addres, bitAddres, chipAddres, highByte(value)); updateByteToEEPROM( (addres+1), bitAddres, chipAddres, lowByte(value)); }Вот пусь FLProg в этом и разбирается
Добрый день. Помогите новичку. Есть проэкт автоматики для автоклава, проблема в русификации меню
вы уверены. что это самая важная проблема в проекте? Что мешает польховаться меню на латинице? неужели такие слова как "open" "close" "On" "Off"? "Temperature" и тп - нуждаются в переводе?
Добрый день. Помогите новичку. Есть проэкт автоматики для автоклава, проблема в русификации меню
вы уверены. что это самая важная проблема в проекте?
Самая, самая, себя помню, сперва надо меню написать, а остальное страшно.))))
Самая, самая, себя помню, сперва надо меню ...
а потом тебю )))
Добрый день. Помогите новичку. Есть проэкт автоматики для автоклава, проблема в русификации меню
вы уверены. что это самая важная проблема в проекте? Что мешает польховаться меню на латинице? неужели такие слова как "open" "close" "On" "Off"? "Temperature" и тп - нуждаются в переводе?
проэкт или проект? - это важно.
А как совместить L c переменной, например, MyString.
Чтобы при вводе с монитор порта получилось бы всё!
ssilver2007 сюда заходит?
Есть вопрос по его либам.
При скролле строки - первый символ строки неправильно отображается. Без скролла - норм.
Где баг, в скетче или в либе?
И еще, может есть "урезанная" версия - без Й, Ё, Ъ и т.д. ?
К сожалению 8 символов довольно часто встречаются.
Где баг, в скетче или в либе?
откуда ж мы знаем. скетча мы не видели
Для начала ожидаю ответ типа:
1. Скролю русский текст с помощью либы от ssilver2007 - такой проблемы нет, смотри скетч.
ИЛИ
2. Да, есть такой баг, надо смотреть либу.
Для начала ожидаю ответ типа:
1. Скролю русский текст с помощью либы от ssilver2007 - такой проблемы нет, смотри скетч.
ИЛИ
2. Да, есть такой баг, надо смотреть либу.
предлагаете, чтобы кто-то специально собрал проект с его либой и попробовал? :)