Uno + Nextion + расширитель портов на pcf8574 + 18b20

Нехватка памяти и заторможенность

SSSergeich
Капитан
Сообщения: 708
Зарегистрирован: 06.02.2016{, 11:01}
Репутация: 37
Откуда: Ярославль
Имя: Сергей

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#1

Сообщение SSSergeich » 26.12.2018{, 22:36}

Доброго времени суток!

Прошу помощи или совета.
Суть вот в чем, хочу сделать контроль показаний температуры и влажности в 8-ми помещениях (16 переменных).
В каждом помещении по 3 исполнительных устройства ( 24 реле, 24 переменных)
Итого 40 переменных, 24 буля и 16 стрингов.
Вывод этих показаний на панель Nextion и с нее же индивидуальное управление каждым реле (Dual-Button).
В FLProg gробно создал один датчик 18b20, опрос раз с секунду, при изменении отправка в переменную на панель.
В Nextion создал три кнопки с фиксацией нажатия и отправка состояния в булеановские переменные FLProg.
Управление через скачанный блок от Sancho PCF8574-OUT
Проверил работу, все ок, температура на экран выводится, светодиоды подключенные к pcf8574 управляются.
Скопипастил кол-во кнопок и выходов до 24, управление выходами пошло с задержкой на пару секунд
Добавил еще 7 датчиков 18b20, плату ds3231 и начались полные тормоза. Ардуино ругается что мало памяти осталось, возможны глюки.
В листинге ардуино такое вот
[hide]

Код: Выделить всё

[shadow=blue]#include <Wire.h>
#include <Wire.h>[/shadow]

#include <OneWire.h>
byte _d18x2x2Addr[8]={0x28, 0xAC, 0x57, 0xB1, 0x1, 0x0, 0x0, 0x4E};

byte _d18x2x3Addr[8]={0x28, 0xA3, 0xD9, 0xB2, 0x1, 0x0, 0x0, 0x8B};

byte _d18x2x4Addr[8]={0x28, 0x25, 0xF1, 0xB1, 0x1, 0x0, 0x0, 0x9D};

byte _d18x2x5Addr[8]={0x28, 0x19, 0xB5, 0xAF, 0x1, 0x0, 0x0, 0xD6};


byte _d18x2x6Addr[8]={0x28, 0x25, 0x85, 0xE5, 0x0, 0x0, 0x0, 0x92};

byte _d18x2x1Addr[8]={0x28, 0x10, 0xCD, 0xE5, 0x0, 0x0, 0x0, 0x43};

byte _d18x2x7Addr[8]={0x28, 0xBE, 0x1A, 0xB0, 0x1, 0x0, 0x0, 0xF1};

byte _d18x2x8Addr[8]={0x28, 0xD7, 0xA4, 0xB2, 0x1, 0x0, 0x0, 0x4E};

OneWire  _ow4(4);
bool P0_196714420_1;
bool P1_196714420_1;
bool P2_196714420_1;
bool P3_196714420_1;
bool P4_196714420_1;
bool P5_196714420_1;
bool P6_196714420_1;
bool P7_196714420_1;
byte byte_in_196714420_1;
byte byte_out_196714420_1;
bool P0_196714420_2;
bool P1_196714420_2;
bool P2_196714420_2;
bool P3_196714420_2;
bool P4_196714420_2;
bool P5_196714420_2;
bool P6_196714420_2;
bool P7_196714420_2;
byte byte_in_196714420_2;
byte byte_out_196714420_2;
bool P0_196714420_3;
bool P1_196714420_3;
bool P2_196714420_3;
bool P3_196714420_3;
bool P4_196714420_3;
bool P5_196714420_3;
bool P6_196714420_3;
bool P7_196714420_3;
byte byte_in_196714420_3;
byte byte_out_196714420_3;
String _nextionSaveDataTXT_P0_E4;
String _nextionSaveDataTXT_P0_E30;
String _nextionSaveDataTXT_P0_E32;
String _nextionSaveDataTXT_P0_E34;
String _nextionSaveDataTXT_P0_E36;
String _nextionSaveDataTXT_P0_E38;
String _nextionSaveDataTXT_P0_E40;
String _nextionSaveDataTXT_P0_E42;
struct _nextionLissenStruct{
char code;
String result;
long number;
};
_nextionLissenStruct _nextionTempLissen;
struct _I2CRealRimeClockTime
{
 byte seconds = 0;
 byte minutes = 0;
 byte Hours = 0;
 byte weekday = 0;
 byte day = 0;
 byte month = 0;
 byte year = 0;
 unsigned long startTime = 0;
};
_I2CRealRimeClockTime _RTC1;
int _PWDC = 0;
bool _gtv1 = 0;
bool _gtv2 = 0;
bool _gtv3 = 0;
bool _gtv4 = 0;
bool _gtv5 = 0;
bool _gtv6 = 0;
bool _gtv7 = 0;
bool _gtv8 = 0;
bool _gtv10 = 0;
bool _gtv11 = 0;
bool _gtv12 = 0;
bool _gtv13 = 0;
bool _gtv14 = 0;
bool _gtv15 = 0;
bool _gtv16 = 0;
bool _gtv18 = 0;
bool _gtv19 = 0;
bool _gtv20 = 0;
bool _gtv21 = 0;
bool _gtv22 = 0;
bool _gtv23 = 0;
bool _gtv24 = 0;
bool _gtv58 = 0;
bool _gtv17 = 0;
float _gtv25 = 0;
float _gtv26 = 0;
float _gtv27 = 0;
float _gtv28 = 0;
float _gtv29 = 0;
float _gtv30 = 0;
float _gtv31 = 0;
float _gtv32 = 0;
bool _gtv33 = 0;
String _gtv9;
String _gtv35;
bool _nextionGetValue19_outputValue;
long _nextionGetValue19_StartTime;
bool _nextionGetValue19_isNU = 0;
bool _changeNumber9_Out = 0;
int _changeNumber9_OLV;
unsigned long _d18x2x1Tti = 0UL;
float _d18x2x1O = 0.00;
bool _nextionGetValue16_outputValue;
long _nextionGetValue16_StartTime;
bool _nextionGetValue16_isNU = 0;
bool _nextionGetValue13_outputValue;
long _nextionGetValue13_StartTime;
bool _nextionGetValue13_isNU = 0;
bool _nextionGetValue10_outputValue;
long _nextionGetValue10_StartTime;
bool _nextionGetValue10_isNU = 0;
String _GSFS8 = "0";
String _GSFS7 = "0";
String _GSFS6 = "0";
bool _nextionSetAttr6_isNU = 0;
bool _nextionSetAttr6_oldState = 0;
bool _nextionGetValue24_outputValue;
long _nextionGetValue24_StartTime;
bool _nextionGetValue24_isNU = 0;
bool _nextionSetAttr3_isNU = 0;
bool _nextionSetAttr3_oldState = 0;
unsigned long _d18x2x6Tti = 0UL;
float _d18x2x6O = 0.00;
bool _nextionSetAttr2_isNU = 0;
bool _nextionSetAttr2_oldState = 0;
bool _nextionGetValue21_outputValue;
long _nextionGetValue21_StartTime;
bool _nextionGetValue21_isNU = 0;
unsigned long _d18x2x3Tti = 0UL;
float _d18x2x3O = 0.00;
bool _nextionGetValue18_outputValue;
long _nextionGetValue18_StartTime;
bool _nextionGetValue18_isNU = 0;
bool _nextionGetValue15_outputValue;
long _nextionGetValue15_StartTime;
bool _nextionGetValue15_isNU = 0;
String _RTC1_GetTime2_StrOut;
String _GSFS2 = "0";
bool _nextionSetAttr8_isNU = 0;
bool _nextionSetAttr8_oldState = 0;
bool _nextionGetValue7_outputValue;
long _nextionGetValue7_StartTime;
bool _nextionGetValue7_isNU = 0;
unsigned long _d18x2x8Tti = 0UL;
float _d18x2x8O = 0.00;
bool _nextionGetValue23_outputValue;
long _nextionGetValue23_StartTime;
bool _nextionGetValue23_isNU = 0;
bool _nextionGetValue4_outputValue;
long _nextionGetValue4_StartTime;
bool _nextionGetValue4_isNU = 0;
unsigned long _d18x2x5Tti = 0UL;
float _d18x2x5O = 0.00;
unsigned long _d18x2x2Tti = 0UL;
float _d18x2x2O = 0.00;
bool _nextionGetValue2_outputValue;
long _nextionGetValue2_StartTime;
bool _nextionGetValue2_isNU = 0;
bool _changeNumber2_Out = 0;
int _changeNumber2_OLV;
String _GSFS1 = "0";
bool _nextionGetValue6_outputValue;
long _nextionGetValue6_StartTime;
bool _nextionGetValue6_isNU = 0;
unsigned long _d18x2x7Tti = 0UL;
float _d18x2x7O = 0.00;
bool _nextionGetValue3_outputValue;
long _nextionGetValue3_StartTime;
bool _nextionGetValue3_isNU = 0;
unsigned long _d18x2x4Tti = 0UL;
float _d18x2x4O = 0.00;
String _GSFS5 = "0";
bool _nextionGetValue1_outputValue;
long _nextionGetValue1_StartTime;
bool _nextionGetValue1_isNU = 0;
String _GSFS4 = "0";
String _GSFS3 = "0";
bool _changeNumber1_Out = 0;
int _changeNumber1_OLV;
bool _nextionSetAttr1_isNU = 0;
bool _nextionSetAttr1_oldState = 0;
bool _nextionGetValue12_outputValue;
long _nextionGetValue12_StartTime;
bool _nextionGetValue12_isNU = 0;
bool _nextionGetValue9_outputValue;
long _nextionGetValue9_StartTime;
bool _nextionGetValue9_isNU = 0;
bool _nextionGetValue8_outputValue;
long _nextionGetValue8_StartTime;
bool _nextionGetValue8_isNU = 0;
bool _nextionGetValue5_outputValue;
long _nextionGetValue5_StartTime;
bool _nextionGetValue5_isNU = 0;
bool _nextionSetAttr5_isNU = 0;
bool _nextionSetAttr5_oldState = 0;
bool _nextionGetValue20_outputValue;
long _nextionGetValue20_StartTime;
bool _nextionGetValue20_isNU = 0;
bool _nextionGetValue17_outputValue;
long _nextionGetValue17_StartTime;
bool _nextionGetValue17_isNU = 0;
bool _nextionGetValue14_outputValue;
long _nextionGetValue14_StartTime;
bool _nextionGetValue14_isNU = 0;
bool _nextionGetValue11_outputValue;
long _nextionGetValue11_StartTime;
bool _nextionGetValue11_isNU = 0;
String _RTC1_GetTime1_StrOut;
bool _changeNumber6_Out = 0;
int _changeNumber6_OLV;
bool _changeNumber5_Out = 0;
int _changeNumber5_OLV;
bool _changeNumber4_Out = 0;
int _changeNumber4_OLV;
bool _changeNumber3_Out = 0;
int _changeNumber3_OLV;
bool _nextionSetAttr7_isNU = 0;
bool _nextionSetAttr7_oldState = 0;
bool _nextionSetAttr4_isNU = 0;
bool _nextionSetAttr4_oldState = 0;
bool _nextionGetValue22_outputValue;
long _nextionGetValue22_StartTime;
bool _nextionGetValue22_isNU = 0;
bool _changeNumber10_Out = 0;
int _changeNumber10_OLV;
void setup()
{
Wire.begin();
delay(10);
TCCR2A = 0x00;
TCCR2B =  0x07;
TIMSK2=0x01;
TCNT2=100;
Wire.beginTransmission(68);
Wire.write(0x0E);
Wire.write(B00000000);
Wire.write(B10001000);
Wire.endTransmission();
_RTC1.startTime = millis() - 1000;
[dropshadow=blue]Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);
Serial.begin(9600);[/dropshadow]
nextionSendCommand("", 0);
nextionSendCommand("page 0", 0);
_nextionGetValue1_StartTime = millis();
_nextionGetValue2_StartTime = millis();
_nextionGetValue3_StartTime = millis();
_nextionGetValue4_StartTime = millis();
_nextionGetValue5_StartTime = millis();
_nextionGetValue6_StartTime = millis();
_nextionGetValue7_StartTime = millis();
_nextionGetValue8_StartTime = millis();
_nextionGetValue9_StartTime = millis();
_nextionGetValue10_StartTime = millis();
_nextionGetValue11_StartTime = millis();
_nextionGetValue12_StartTime = millis();
_nextionGetValue13_StartTime = millis();
_nextionGetValue14_StartTime = millis();
_nextionGetValue15_StartTime = millis();
_nextionGetValue16_StartTime = millis();
_nextionGetValue17_StartTime = millis();
_nextionGetValue18_StartTime = millis();
_nextionGetValue19_StartTime = millis();
_nextionGetValue20_StartTime = millis();
_nextionGetValue21_StartTime = millis();
_nextionGetValue22_StartTime = millis();
_nextionGetValue23_StartTime = millis();
_nextionGetValue24_StartTime = millis();
[dropshadow=blue]  Wire.begin();
  Wire.begin();
  Wire.begin();[/dropshadow]
}
void loop()
{String _tempVariable_String;
int _tempVariable_int;
_PWDC = 0;




[/hide]

Это нормально, или где-то косяк искать?
В дальнейшем планировалось два режима, ручной и автомат. В автомате работа одного реле по гистерезису температуры, второго по влажности. Но теперь бооольшие сомнения, а потянет ли UNO это?

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#2

Сообщение Alias » 27.12.2018{, 08:37}

Думаю, тормоза не из-за количества каналов температуры/управления в проекте, а от обилия кнопок на панели и передаваемых на нее значений, ведь каждая из них отрабатывается своим куском кода и прочими накладными, а работа с панелью в flprog, если я правильно понял, в настоящий момент не оптимизирована и очень ресурсоёмка.
Я когда ваял пивоварню с ней, забил полностью всю Мегу вплоть до отказа компилироваться и имел дикие тормоза. Посоветовали на работу с панелью выделить отдельный контроллер, но это не спортивно. Решил оптимизировать не только собственно код программы, но и операции обмена данными с панелью. В частности, передавал значения не по отдельному параметру, а сразу большими пакетами, упаковывая их в отдельные строки, а на панели эти строки разбирал. Главное при этом, чтобы значение каждого параметра было строго на своем знакоместе. Точно так же отправлял значения вводимых параметров обратно - одной большой строкой, выдирая из нее то, что было нужно.
В итоге код программы сократился почти вдвое, тормоза ушли. Осадочек, правда, остался. Но возникла мысль сделать панельку универсальной для многих устройств, подключаясь по радиоудлиннителю com-порта.
В Вашем случае можно получать с панели нажатия на 24 кнопки одной строкой в 24 знакоместа, или как их там. А температуру отправлять, если без десятых долей, строкой в 16 знакомест и еще одной такой же - влажность.
Во вложении иллюстрация упаковки отправки значений с подсказкой по положению значения в строке. Если суть ясна, проблем не будет. Но нужно изучить программирование панели. Мне, как непрограммисту, это удалось. В моих скромных масштабах.
СпойлерПоказать
H.png

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#3

Сообщение Sancho » 27.12.2018{, 09:14}

SSSergeich, Перезалейте код - не хочет совсем компилиться, пишет не обозначено nextionSendCommand....
Кнопки, биты, попробуйте упаковать в байты и тоже отправить компактно.
Хотя-бы проект, что-бы действительно посмотреть, чего там с памятью...
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
grin-mpx
Лейтенант
Сообщения: 477
Зарегистрирован: 17.07.2017{, 18:39}
Репутация: 55
Откуда: Днепр. UA
Имя: Григорий

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#4

Сообщение grin-mpx » 27.12.2018{, 09:32}

SSSergeich писал(а):
26.12.2018{, 22:36}
Суть вот в чем, хочу сделать контроль показаний температуры и влажности в 8-ми помещениях (16 переменных).
В каждом помещении по 3 исполнительных устройства ( 24 реле, 24 переменных)
Итого 40 переменных, 24 буля и 16 стрингов.
Вывод этих показаний на панель Nextion и с нее же индивидуальное управление каждым реле (Dual-Button).
В FLProg gробно создал один датчик 18b20, опрос раз с секунду, при изменении отправка в переменную на панель.
Ну во первых сразу переходите на Мегу памяти у вас скорее всего не хватит, для компактности можете взять Mega PRO от RoboDin.
Опрос каждого датчика лучше делать не чаще 1 раза в 10 сек, чаще смысла нет. И самое главное, это как написал выше Alias это упаковка данных в одну строку и последующая распаковка. Ну хотя-бы кнопки упаковать в одну строку на стороне дисплея и распаковывать в ардуине. Это значительно сократит время обращения к дисплею.
Еще один вариант, это сделать на дисплее количество страниц соответствующее вашим помещениям. Каждая страница- отдельное помещение с датчиками и релюшками, в ардуине организовать опрос и передачу данных только в привязке к страницам. В этом случае количество одновременно передаваемых переменных на дисплей сократится в 8 раз. Возможно это ускорит работу системы в целом.

Отправлено спустя 9 минут 10 секунд:
Alias, У меня кстати получилось запаковывать в ардуине и распаковывать в дисплее данные в одну строку независимо от длинны каждого значения и точек с запятыми. В частности запаковывал значения не более 5 знаков каждое. Правда у меня на каждой странице только по 4 значения присутствуют, но возможно можно и больше, уже точно не помню.
Но есть нюанс, я выводил значения постоянные, при переходе на страницу. Меняющиеся значения выводить не пробовал, но думаю возможно.

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#5

Сообщение Alias » 27.12.2018{, 10:05}

А у меня не хватило тёму, поэтому подогнал потребности под возможности.
Так выпьем же за то, чтобы в Новом году наши возможности совпадали с нашими желаниями! А не наоборот, как у классика ;)

SSSergeich
Капитан
Сообщения: 708
Зарегистрирован: 06.02.2016{, 11:01}
Репутация: 37
Откуда: Ярославль
Имя: Сергей

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#6

Сообщение SSSergeich » 28.12.2018{, 12:42}

Alias, Скорей всего так и придется делать. Но, мне кается, что и сама генерация кода не совсем оптимальна.
Я тоже далеко не программист, потому мне и непонятно, зачем нужны строки 260-290, 293-316, Зачем столько повторений. Такое ощущение, что цикл в цикле крутится. Зачем в сетапе подключается два раза #include <Wire.h>

SSSergeich
Капитан
Сообщения: 708
Зарегистрирован: 06.02.2016{, 11:01}
Репутация: 37
Откуда: Ярославль
Имя: Сергей

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#7

Сообщение SSSergeich » 28.12.2018{, 12:46}

Sancho,
Sancho писал(а):
27.12.2018{, 09:14}
Перезалейте код - не хочет совсем компилиться, пишет не обозначено nextionSendCommand....
там не весь код, а пример того что мне непонятно.
Sancho писал(а):
27.12.2018{, 09:14}
Хотя-бы проект, что-бы действительно посмотреть, чего там с памятью...
Вложения
proba.HMI
(3.36 МБ) 70 скачиваний
управление.flp
(784.42 КБ) 83 скачивания

SSSergeich
Капитан
Сообщения: 708
Зарегистрирован: 06.02.2016{, 11:01}
Репутация: 37
Откуда: Ярославль
Имя: Сергей

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#8

Сообщение SSSergeich » 28.12.2018{, 12:49}

grin-mpx,
grin-mpx писал(а):
27.12.2018{, 09:41}
Ну во первых сразу переходите на Мегу памяти у вас скорее всего не хватит, для компактности можете взять Mega PRO от RoboDin.
Опрос каждого датчика лучше делать не чаще 1 раза в 10 сек, чаще смысла нет. И самое главное, это как написал выше Alias это упаковка данных в одну строку и последующая распаковка. Ну хотя-бы кнопки упаковать в одну строку на стороне дисплея и распаковывать в ардуине. Это значительно сократит время обращения к дисплею.
Еще один вариант, это сделать на дисплее количество страниц соответствующее вашим помещениям. Каждая страница- отдельное помещение с датчиками и релюшками, в ардуине организовать опрос и передачу данных только в привязке к страницам. В этом случае количество одновременно передаваемых переменных на дисплей сократится в 8 раз. Возможно это ускорит работу системы в целом.
Да, спасибо, мысль ясна, буду пытаться
В каждую страницу не вариант, нужно видеть картинку в целом и управлять. В отдельную страницу хотел завести настройку уставок

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#9

Сообщение Alias » 28.12.2018{, 14:12}

Хм, пусть меня поправят программисты, но столько операций с плавающей запятой на таком примитивном участке - перебор. Умножить, преобразовать, разделить, сконвертировать... Я бы сделал проще, см. вложение. Да, не будет десятичной точки. Мне это не помешало ее просто нарисовать на панели. Но зато нет и массы изнурительных вычислений, а пересылка значения, насколько я понимаю, тоже куда легче пересылки строки. Не знаю, есть ли смысл отказываться от ненужной переменной, но удалил.
Может, попробуете этот вариант? Чисто для сравнения.
СпойлерПоказать
H.png

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#10

Сообщение Sancho » 28.12.2018{, 14:32}

SSSergeich,
Немного изменил код, чуток.
Попробуйте собрать в панели все сигналы от осушителей в один байт и одним значением отправлять/принимать в ардуинке. То-же проделайте для конвекторов и вентиляторов. Получится 3 переменных вместо 24.
Пример на последней плате, вместо двух предпоследних.
Вложения
управление _v1_01.flp
(906.89 КБ) 67 скачиваний
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#11

Сообщение Alias » 28.12.2018{, 14:46}

У меня вариант несколько проще для понимания, можно попробовать с него, а упаковку позже, если не поможет.
ЗЫ На второй плате "непропай" :smile390:
Вложения
управление-a.flp
(486.18 КБ) 71 скачивание
Последний раз редактировалось Alias 28.12.2018{, 14:54}, всего редактировалось 1 раз.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#12

Сообщение Sancho » 28.12.2018{, 14:54}

Коллеги.
Посмотрите код - 24 таймера для периодического приёма данных.
Может лучше три, но пусть будут данные Т с запятыми :)
Вот нет панели, только сейчас скачал прогу nextion editor, посмотрю, что за зверь :)
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#13

Сообщение Alias » 28.12.2018{, 15:00}

Тогда уж и отправлять значения температуры нужно одной строкой, а это 32 символа, чтобы ничего не поплыло и на панели разбирать по переменным. Это несложно, если вникнуть, но на это у топикстартера может уйти много времени, и, если устроит "оптимизация на коленке", пусть работает, как есть :)
А куча таймеров - беда. Надеюсь, у Автора будет желание заточить инструмент и под панель.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#14

Сообщение Sancho » 28.12.2018{, 15:30}

Alias писал(а):
28.12.2018{, 15:00}
Надеюсь, у Автора будет желание заточить инструмент и под панель.
Он не причём.
Вот так пока тогда, режим "в каждом цикле" - у всех на этой плате. Ещё два килобайта.... :)
А если будет всего три байта...
СпойлерПоказать
screenshot_18-12-28_15-27-41.png
Вложения
управление-a_v01_03.flp
(481.99 КБ) 63 скачивания
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#15

Сообщение Alias » 28.12.2018{, 15:53}

А я даже и не заглянул, что там :smile390: Думал, так же, как у датчиков - по секунде.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#16

Сообщение Sancho » 28.12.2018{, 16:00}

Alias писал(а):
28.12.2018{, 15:53}
А я даже и не заглянул, что там :smile390: Думал, так же, как у датчиков - по секунде.
Там и было по секунде у каждого! - поэтому столько таймеров. Я сделал один для всех. :)
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#17

Сообщение Alias » 28.12.2018{, 16:05}

А, вот Вы что имели в виду с таймерами! Сорри, я думал, это работа с панелью генерирует. Непрограммисту сложно понять, откуда растут ноги. Спасибо за подсказки!

Аватара пользователя
grin-mpx
Лейтенант
Сообщения: 477
Зарегистрирован: 17.07.2017{, 18:39}
Репутация: 55
Откуда: Днепр. UA
Имя: Григорий

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#18

Сообщение grin-mpx » 28.12.2018{, 16:10}

Выкладываю простой способ упаковки булеанов кнопок на дисплее в строку с последующим разбором в flprog. В примере только 2 кнопки, но добавив сами кнопки+ переменные+ ДОПИСАТЬ КОД В ТАЙМЕРЕ, то можно увеличивать кол. кнопок до..,( не знаю до скольки :D ) и естественно в флпрог нужно добавить блоки получения символов из строки. Цифра 7 значит включено, цифра 5-выключено.
bool_string.flp
(146.42 КБ) 78 скачиваний
bool_string.HMI
(15.57 КБ) 70 скачиваний
Последний раз редактировалось grin-mpx 28.12.2018{, 16:16}, всего редактировалось 3 раза.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#19

Сообщение Sancho » 28.12.2018{, 16:11}

Alias, Тот-же сигнал, или сдвинутый на пол-секунды( добавить ещё один триггер, сигнал на входе проинвертировать) подать на 18В20, настройки: "Вход разрешения опроса", "В каждом цикле". Ещё чутка байт :)

Отправлено спустя 38 секунд:
grin-mpx, А как упаковать просто в байт? Пока не разобрался.

Отправлено спустя 48 секунд:
Но идеи есть! :)
Изучаю Вашу прогу....
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
grin-mpx
Лейтенант
Сообщения: 477
Зарегистрирован: 17.07.2017{, 18:39}
Репутация: 55
Откуда: Днепр. UA
Имя: Григорий

Uno + Nextion + расширитель портов на pcf8574 + 18b20

#20

Сообщение grin-mpx » 28.12.2018{, 16:14}

Sancho писал(а):
28.12.2018{, 16:11}
А как упаковать просто в байт? Пока не разобрался.
С дисплея? Если да, то в строку. Выше выложил. Если в байты, то я не паковал в них, только в строки.

Ответить

Вернуться в «Помогите, а то я "нимагу"»