#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Encoder.h>
#include <EEPROM.h>
long ModbusUartSpeedTable[] = {300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200};
byte ModbusT35Table[] = {75, 75, 38, 19, 10, 5, 4, 3, 3, 2, 1, 1};
int _modbusMasterDataTable_4_reg_1[3];
int _modbusMasterAddressTable_4_reg_1[3] = {2, 3, 4};
byte _modbusMasterBufferSize = 0;
byte _modbusMasterState = 1;
long _modbusMasterSendTime;
byte _modbusMasterLastRec = 0;
long _modbusMasterStartT35;
byte _modbusMasterBuffer[64];
byte _modbusMasterCurrentReg = 0;
byte _modbusMasterCurrentVariable = 0;
struct _modbusMasterTelegramm
{
byte slaveId;
byte function;
int startAddres;
int numbeRegs;
int valueIndex;
}
;
_modbusMasterTelegramm _modbusTelegramm;
long _startTimeMasterRegs[1];
long _updateTimeMasterRegsArray[] = {1000};
byte _readWriteMasterVars[] = {3,3,3};
const unsigned char _modbusMaster_fctsupported[] = {3, 6, 16};
bool in_116845764_1;
bool rst_116845764_1;
bool out_116845764_1;
bool tmp_116845764_1=0;
bool in_116845764_2;
bool rst_116845764_2;
bool out_116845764_2;
bool tmp_116845764_2=0;
bool in_116845764_3;
bool rst_116845764_3;
bool out_116845764_3;
bool tmp_116845764_3=0;
const int _menuParametrsArray[] PROGMEM = {1, 3, 1, 0, 0, 0, 0, 0, 1, 2, 1, 0, 2, 3, 3, 0, 0, 0, 0, 0, 1, 2, 3, 0, 3, 3, 2, 0, 0, 0, 0, 0, 1, 3, 2, 0, 4, 2, 2, 0, 0, 0, 2, 1, 1, 4, 6, 0, 5, 2, 3, 0, 0, 0, 3, 4, 1, 4, 7, 0, 6, 2, 1, 0, 0, 0, 0, 4, 1, 4, 4, 0, 7, 3, 4, 0, 0, 0, 0, 0, 1, 3, 5, 0};
byte _menuValueArray_byte[3];
const byte _menuConstantValuesArray_byte[] PROGMEM = {1, 255, 11, 0};
bool _menuValueArray_bool[4];
const bool _menuConstantValuesArray_bool[] PROGMEM = {1};
const char _flprogMenuNameString1[] PROGMEM = "1";
const char _flprogMenuNameString2[] PROGMEM = "3";
const char _flprogMenuNameString3[] PROGMEM = "2";
const char _flprogMenuNameString4[] PROGMEM = "PCB type";
const char _flprogMenuNameString5[] PROGMEM = "Exit";
const char _flprogMenuNameString6[] PROGMEM = "Adress";
const char _flprogMenuNameString7[] PROGMEM = "Baudrate";
const char* const _flprogMenuStringsArray[] PROGMEM = { _flprogMenuNameString1, _flprogMenuNameString2, _flprogMenuNameString3, _flprogMenuNameString4, _flprogMenuNameString5, _flprogMenuNameString6, _flprogMenuNameString7};
struct _menuItemStricture
{
int startInArrayIndex;
}
;
struct _menuMainStricture
{
int startIndex;
int stopIndex;
bool isSwitchMenuAroundRing;
_menuItemStricture currentItem;
}
;
_menuItemStricture _MenuItems[7];
_menuMainStricture _MainMenus[2];
bool _gtv1;
bool _gtv2;
bool _gtv3;
bool _gtv4;
bool _gtv5;
bool _gtv6;
bool _gtv7;
bool _MenuBlock_140175016_AMO_165279708 = 0;
bool _MenuBlock_140175016_AMO_137554213 = 0;
bool _MenuBlock_140175016_AMO_211270296 = 0;
String _MenuBlock_140175016_MNO;
String _MenuBlock_140175016_VNO;
bool _MenuBlock_140175016_OEIS = 0;
bool _MenuBlock_140175016_OMUIS = 0;
bool _MenuBlock_140175016_OMDIS = 0;
byte _modbuseSetSlId1_SlIdSer1Reg1 = 1;
bool _modbuseSetSlId1_OES = 0;
bool _MenuBlock_242852165_AMO_176374341 = 0;
bool _MenuBlock_242852165_AMO_212890743 = 0;
bool _MenuBlock_242852165_AMO_99014246 = 0;
bool _MenuBlock_242852165_AMO_208978504 = 0;
String _MenuBlock_242852165_MNO;
String _MenuBlock_242852165_VNO;
bool _MenuBlock_242852165_OEIS = 0;
bool _MenuBlock_242852165_OMUIS = 0;
bool _MenuBlock_242852165_OMDIS = 0;
bool _MenuBlock_242852165_OVUIS = 0;
bool _MenuBlock_242852165_OVDIS = 0;
bool _MenuBlock_242852165_AMMO = 0;
bool _changeNumber1_Out = 0;
byte _changeNumber1_OLV;
bool Out_47946759_41109632;
bool Out_106233685_41109632;
long Out_167890681_41109632;
bool _changeNumber2_Out = 0;
byte _changeNumber2_OLV;
byte _modbuseSetSpeed1_SppedIdx = 5;
byte _modbuseSetSpeed1_newSpeedIdx = 5;
bool _modbuseSetSpeed1_OES = 0;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
LiquidCrystal_I2C _rusLCD1(0x3F , 20, 4);
bool _sleep50300400 = 0;
bool restartSlep50300400 = 0;
unsigned long int _oldTimeFlashingSymbol;
boolean _FlashingSymbol;
int _dispoldLength196718417 = 0;
boolean _flagStop196718417 = 0;
String _eraseSymbol196718417;
String _dispoldString196718417;
byte _column196718417;
boolean _key196718417 = 0;
byte _tempColumn196718417;
byte _oldTempColumn196718417;
int _dispoldLength247959448 = 0;
boolean _flagStop247959448 = 0;
String _eraseSymbol247959448;
String _dispoldString247959448;
byte _column247959448;
boolean _key247959448 = 0;
byte _tempColumn247959448;
byte _oldTempColumn247959448;
int _dispoldLength153608542 = 0;
boolean _flagStop153608542 = 0;
String _eraseSymbol153608542;
String _dispoldString153608542;
byte _column153608542;
boolean _key153608542 = 0;
byte _tempColumn153608542;
byte _oldTempColumn153608542;
int _dispoldLength102813962 = 0;
boolean _flagStop102813962 = 0;
String _eraseSymbol102813962;
String _dispoldString102813962;
byte _column102813962;
boolean _key102813962 = 0;
byte _tempColumn102813962;
byte _oldTempColumn102813962;
int _dispoldLength217508250 = 0;
boolean _flagStop217508250 = 0;
String _eraseSymbol217508250;
String _dispoldString217508250;
byte _column217508250;
boolean _key217508250 = 0;
byte _tempColumn217508250;
byte _oldTempColumn217508250;
boolean _flagFlashingSymbol217508250 = 0;
int _dispoldLength200485229 = 0;
boolean _flagStop200485229 = 0;
String _eraseSymbol200485229;
String _dispoldString200485229;
byte _column200485229;
boolean _key200485229 = 0;
byte _tempColumn200485229;
byte _oldTempColumn200485229;
boolean _flagFlashingSymbol200485229 = 0;
int _dispoldLength57073308 = 0;
boolean _flagStop57073308 = 0;
String _eraseSymbol57073308;
String _dispoldString57073308;
byte _column57073308;
boolean _key57073308 = 0;
byte _tempColumn57073308;
byte _oldTempColumn57073308;
boolean _flagFlashingSymbol57073308 = 0;
int _dispoldLength210120031 = 0;
boolean _flagStop210120031 = 0;
String _eraseSymbol210120031;
String _dispoldString210120031;
byte _column210120031;
boolean _key210120031 = 0;
byte _tempColumn210120031;
byte _oldTempColumn210120031;
int _dispoldLength63375052 = 0;
boolean _flagStop63375052 = 0;
String _eraseSymbol63375052;
String _dispoldString63375052;
byte _column63375052;
boolean _key63375052 = 0;
byte _tempColumn63375052;
byte _oldTempColumn63375052;
int _dispoldLength244412152 = 0;
boolean _flagStop244412152 = 0;
String _eraseSymbol244412152;
String _dispoldString244412152;
byte _column244412152;
boolean _key244412152 = 0;
byte _tempColumn244412152;
byte _oldTempColumn244412152;
int _dispoldLength128153734 = 0;
boolean _flagStop128153734 = 0;
String _eraseSymbol128153734;
String _dispoldString128153734;
byte _column128153734;
boolean _key128153734 = 0;
byte _tempColumn128153734;
byte _oldTempColumn128153734;
int _dispoldLength257241564 = 0;
boolean _flagStop257241564 = 0;
String _eraseSymbol257241564;
String _dispoldString257241564;
byte _column257241564;
boolean _key257241564 = 0;
byte _tempColumn257241564;
byte _oldTempColumn257241564;
boolean _flagFlashingSymbol257241564 = 0;
int _dispoldLength229575467 = 0;
boolean _flagStop229575467 = 0;
String _eraseSymbol229575467;
String _dispoldString229575467;
byte _column229575467;
boolean _key229575467 = 0;
byte _tempColumn229575467;
byte _oldTempColumn229575467;
boolean _flagFlashingSymbol229575467 = 0;
int _dispoldLength125449263 = 0;
boolean _flagStop125449263 = 0;
String _eraseSymbol125449263;
String _dispoldString125449263;
byte _column125449263;
boolean _key125449263 = 0;
byte _tempColumn125449263;
byte _oldTempColumn125449263;
boolean _flagFlashingSymbol125449263 = 0;
Encoder myEnc41109632(2, 3);
bool flag41109632 = 0;
long _count41109632 = 0;
long _sumStep41109632 = 0;
long MinMax41109632[]
{
}
;
bool _tempVariable_bool;
byte _tempVariable_byte;
int _tempVariable_int;
void setup()
{
Wire.begin();
delay(10);
_rusLCD1.init();
_rusLCD1.backlight();
pinMode(4, INPUT);
if(((readByteFromEEPROM(0, 0, 0x0))) != 241)
{
(updateByteToEEPROM(0, 0, 0x0, (241)));
(updateByteToEEPROM(1, 0, 0x0, (0)));
(updateByteToEEPROM(2, 0, 0x0, (5)));
}
_startUart0();
for(int i=0; i<1; i++)
{
_startTimeMasterRegs[i] = millis();
}
_MenuItems[0].startInArrayIndex = 0;
_MenuItems[1].startInArrayIndex = 12;
_MenuItems[2].startInArrayIndex = 24;
_MenuItems[3].startInArrayIndex = 36;
_MenuItems[4].startInArrayIndex = 48;
_MenuItems[5].startInArrayIndex = 60;
_MenuItems[6].startInArrayIndex = 72;
_MainMenus[0].startIndex = 1;
_MainMenus[0].isSwitchMenuAroundRing = 1;
_MainMenus[0].stopIndex = 3;
_MainMenus[0].currentItem = _MenuItems[0];
_MainMenus[1].startIndex = 4;
_MainMenus[1].isSwitchMenuAroundRing = 1;
_MainMenus[1].stopIndex = 7;
_MainMenus[1].currentItem = _MenuItems[3];
_menuValueArray_byte[0] = (readByteFromEEPROM(1, 0, 0x0));
_menuValueArray_byte[2] = (readByteFromEEPROM(2, 0, 0x0));
String _tmpStr = "MODBUS";
_rusLCD1.setCursor(((20 - rusStrlen(_tmpStr.c_str())) / 2), 0);
_rusLCD1.print(_tmpStr);
_tmpStr = "PUMPs SHOP";
_rusLCD1.setCursor(((20 - rusStrlen(_tmpStr.c_str())) / 2), 1);
_rusLCD1.print(_tmpStr);
_tmpStr ="https://pumps.in.ua";
_rusLCD1.setCursor(((20 - rusStrlen(_tmpStr.c_str())) / 2), 2);
_rusLCD1.print(_tmpStr);
_tmpStr ="ver. 1.0";
_rusLCD1.setCursor(((20 - rusStrlen(_tmpStr.c_str())) / 2), 3);
_rusLCD1.print(_tmpStr);
delay(3 * 1000);
_rusLCD1.clear();
}
void loop()
{
if (millis() - _oldTimeFlashingSymbol > 500)
{
_FlashingSymbol = !_FlashingSymbol;
_oldTimeFlashingSymbol = millis();
}
//Плата:1
_gtv4 = !(((_gtv1) || (_gtv2) || (_gtv3)));
if ((!(0)))
{
long _tmpCount41109632 = myEnc41109632.read();
if(!flag41109632)
{
myEnc41109632.readAndReset();
myEnc41109632.write(_count41109632 * 4);
_sumStep41109632 = _count41109632;
flag41109632 = 1;
}
if(!Out_47946759_41109632 && !Out_106233685_41109632)
{
if(_sumStep41109632 < _tmpCount41109632 / 4)
{
Out_47946759_41109632 = 1;
_sumStep41109632++;
}
else if(_sumStep41109632 > _tmpCount41109632 / 4)
{
Out_106233685_41109632 = 1;
_sumStep41109632--;
}
}
else
{
Out_47946759_41109632 = 0;
Out_106233685_41109632 = 0;
}
if((0) == 1)
{
myEnc41109632.readAndReset();
_sumStep41109632 = 0;
}
_count41109632 = _tmpCount41109632 / 4;
Out_167890681_41109632 = _count41109632;
}
else
{
Out_47946759_41109632 = 0;
Out_106233685_41109632 = 0;
flag41109632 = 0;
}
_gtv7 = Out_106233685_41109632;
_gtv6 = Out_47946759_41109632;
if (!_sleep50300400)
{
if ((_gtv4))
{
_flagStop102813962 = 1;
if (_key102813962)
{
String _tempPostfix = (0 ? : "");
if(_dispoldString102813962 != (String("TEST SLAVE")) + _tempPostfix || restartSlep50300400)
{
int _dispTempLength = rusStrlen(((String("TEST SLAVE")) + _tempPostfix).c_str());
_column102813962 = + 3 - 1;
_tempColumn102813962 = _column102813962;
_rusLCD1.setCursor (_oldTempColumn102813962, (4 - 1));
_oldTempColumn102813962 = _tempColumn102813962;
if (_dispoldLength102813962 > _dispTempLength)
{
_rusLCD1.print(_eraseSymbol102813962);
}
_eraseSymbol102813962 = "";
for (byte i = 0; i < _dispTempLength; i ++)
{
_eraseSymbol102813962 = _eraseSymbol102813962 + " ";
}
_eraseSymbol102813962 = _eraseSymbol102813962 + (0 == 1 ? " " : "");
_dispoldLength102813962 = _dispTempLength;
_dispoldString102813962 =(String("TEST SLAVE")) + _tempPostfix;
_rusLCD1.setCursor (_tempColumn102813962, (4 - 1));
_rusLCD1.print(_dispoldString102813962);
}
}
_key102813962 = 1;
}
else if (_flagStop102813962)
{
_flagStop102813962 = 0;
_rusLCD1.setCursor ((_column102813962), (4 - 1));
_rusLCD1.print(_eraseSymbol102813962);
_dispoldLength102813962 = 0;
_dispoldString102813962 = "";
_eraseSymbol102813962 = "";
_key102813962 = 0;
}
}
if (!_sleep50300400)
{
if ((_gtv4))
{
_flagStop153608542 = 1;
if (_key153608542)
{
String _tempPostfix = (0 ? : "");
if(_dispoldString153608542 != (String("READ SLAVE")) + _tempPostfix || restartSlep50300400)
{
int _dispTempLength = rusStrlen(((String("READ SLAVE")) + _tempPostfix).c_str());
_column153608542 = + 3 - 1;
_tempColumn153608542 = _column153608542;
_rusLCD1.setCursor (_oldTempColumn153608542, (3 - 1));
_oldTempColumn153608542 = _tempColumn153608542;
if (_dispoldLength153608542 > _dispTempLength)
{
_rusLCD1.print(_eraseSymbol153608542);
}
_eraseSymbol153608542 = "";
for (byte i = 0; i < _dispTempLength; i ++)
{
_eraseSymbol153608542 = _eraseSymbol153608542 + " ";
}
_eraseSymbol153608542 = _eraseSymbol153608542 + (0 == 1 ? " " : "");
_dispoldLength153608542 = _dispTempLength;
_dispoldString153608542 =(String("READ SLAVE")) + _tempPostfix;
_rusLCD1.setCursor (_tempColumn153608542, (3 - 1));
_rusLCD1.print(_dispoldString153608542);
}
}
_key153608542 = 1;
}
else if (_flagStop153608542)
{
_flagStop153608542 = 0;
_rusLCD1.setCursor ((_column153608542), (3 - 1));
_rusLCD1.print(_eraseSymbol153608542);
_dispoldLength153608542 = 0;
_dispoldString153608542 = "";
_eraseSymbol153608542 = "";
_key153608542 = 0;
}
}
if (!_sleep50300400)
{
if ((_gtv4))
{
_flagStop247959448 = 1;
if (_key247959448)
{
String _tempPostfix = (0 ? : "");
if(_dispoldString247959448 != (String("SET SLAVE")) + _tempPostfix || restartSlep50300400)
{
int _dispTempLength = rusStrlen(((String("SET SLAVE")) + _tempPostfix).c_str());
_column247959448 = + 3 - 1;
_tempColumn247959448 = _column247959448;
_rusLCD1.setCursor (_oldTempColumn247959448, (2 - 1));
_oldTempColumn247959448 = _tempColumn247959448;
if (_dispoldLength247959448 > _dispTempLength)
{
_rusLCD1.print(_eraseSymbol247959448);
}
_eraseSymbol247959448 = "";
for (byte i = 0; i < _dispTempLength; i ++)
{
_eraseSymbol247959448 = _eraseSymbol247959448 + " ";
}
_eraseSymbol247959448 = _eraseSymbol247959448 + (0 == 1 ? " " : "");
_dispoldLength247959448 = _dispTempLength;
_dispoldString247959448 =(String("SET SLAVE")) + _tempPostfix;
_rusLCD1.setCursor (_tempColumn247959448, (2 - 1));
_rusLCD1.print(_dispoldString247959448);
}
}
_key247959448 = 1;
}
else if (_flagStop247959448)
{
_flagStop247959448 = 0;
_rusLCD1.setCursor ((_column247959448), (2 - 1));
_rusLCD1.print(_eraseSymbol247959448);
_dispoldLength247959448 = 0;
_dispoldString247959448 = "";
_eraseSymbol247959448 = "";
_key247959448 = 0;
}
}
if (!_sleep50300400)
{
if ((_gtv4))
{
_flagStop196718417 = 1;
if (_key196718417)
{
String _tempPostfix = (0 ? : "");
if(_dispoldString196718417 != (String("MODBUS TESTER")) + _tempPostfix || restartSlep50300400)
{
int _dispTempLength = rusStrlen(((String("MODBUS TESTER")) + _tempPostfix).c_str());
_column196718417 =(20 - _dispTempLength)/ 2;
_tempColumn196718417 = _column196718417;
_rusLCD1.setCursor (_oldTempColumn196718417, (1 - 1));
_oldTempColumn196718417 = _tempColumn196718417;
if (_dispoldLength196718417 > _dispTempLength)
{
_rusLCD1.print(_eraseSymbol196718417);
}
_eraseSymbol196718417 = "";
for (byte i = 0; i < _dispTempLength; i ++)
{
_eraseSymbol196718417 = _eraseSymbol196718417 + " ";
}
_eraseSymbol196718417 = _eraseSymbol196718417 + (0 == 1 ? " " : "");
_dispoldLength196718417 = _dispTempLength;
_dispoldString196718417 =(String("MODBUS TESTER")) + _tempPostfix;
_rusLCD1.setCursor (_tempColumn196718417, (1 - 1));
_rusLCD1.print(_dispoldString196718417);
}
}
_key196718417 = 1;
}
else if (_flagStop196718417)
{
_flagStop196718417 = 0;
_rusLCD1.setCursor ((_column196718417), (1 - 1));
_rusLCD1.print(_eraseSymbol196718417);
_dispoldLength196718417 = 0;
_dispoldString196718417 = "";
_eraseSymbol196718417 = "";
_key196718417 = 0;
}
}
if (_gtv4)
{
_tempVariable_bool = 1;
if (! _MenuBlock_140175016_OEIS)
{
_MenuBlock_140175016_OEIS = 1;
}
_tempVariable_int = pgm_read_byte(&_menuParametrsArray[((_MainMenus[0].currentItem).startInArrayIndex)+10]);
_MenuBlock_140175016_MNO = _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[_tempVariable_int - 1])));
_MenuBlock_140175016_VNO = _menuOutputValueString (0);
_MenuBlock_140175016_AMO_165279708 = pgm_read_byte(&_menuParametrsArray[(_MainMenus[0].currentItem).startInArrayIndex]) == 1;
_MenuBlock_140175016_AMO_137554213 = pgm_read_byte(&_menuParametrsArray[(_MainMenus[0].currentItem).startInArrayIndex]) == 2;
_MenuBlock_140175016_AMO_211270296 = pgm_read_byte(&_menuParametrsArray[(_MainMenus[0].currentItem).startInArrayIndex]) == 3;
}
else
{
_tempVariable_bool = 0;
if (_MenuBlock_140175016_OEIS)
{
_MenuBlock_140175016_OEIS = 0;
_menuUpdateToEEpromItems();
}
_MenuBlock_140175016_AMO_165279708 = 0;
_MenuBlock_140175016_AMO_137554213 = 0;
_MenuBlock_140175016_AMO_211270296 = 0;
_MenuBlock_140175016_MNO = "";
_MenuBlock_140175016_VNO = "";
}
if(_gtv6)
{
if (! _MenuBlock_140175016_OMUIS)
{
_MenuBlock_140175016_OMUIS = 1;
if(_tempVariable_bool)
{
_menuUpEvents(0);
_menuUpdateToEEpromItems();
}
}
}
else
{
_MenuBlock_140175016_OMUIS = 0;
}
if(_gtv7)
{
if (! _MenuBlock_140175016_OMDIS)
{
_MenuBlock_140175016_OMDIS = 1;
if(_tempVariable_bool)
{
_menuDownEvents(0);
_menuUpdateToEEpromItems();
}
}
}
else
{
_MenuBlock_140175016_OMDIS = 0;
}
if (!_sleep50300400)
{
if ((_MenuBlock_140175016_AMO_211270296))
{
_flagStop57073308 = 1;
if (_key57073308)
{
String _tempPostfix = (0 ? : "");
if(_dispoldString57073308 != (String("")) + _tempPostfix || restartSlep50300400)
{
int _dispTempLength = rusStrlen(((String("")) + _tempPostfix).c_str());
_rusLCD1.setCursor((_column57073308), (4 - 1));
_rusLCD1.write(0x10);
_column57073308 = + 1 - 1;
_tempColumn57073308 = _column57073308 + 1;
_rusLCD1.setCursor (_oldTempColumn57073308, (4 - 1));
_oldTempColumn57073308 = _tempColumn57073308;
if (_dispoldLength57073308 > _dispTempLength)
{
_rusLCD1.print(_eraseSymbol57073308);
}
_eraseSymbol57073308 = "";
for (byte i = 0; i < _dispTempLength; i ++)
{
_eraseSymbol57073308 = _eraseSymbol57073308 + " ";
}
_eraseSymbol57073308 = _eraseSymbol57073308 + (1 == 1 ? " " : "");
_dispoldLength57073308 = _dispTempLength;
_dispoldString57073308 =(String("")) + _tempPostfix;
_rusLCD1.setCursor (_tempColumn57073308, (4 - 1));
_rusLCD1.print(_dispoldString57073308);
}
if ((_MenuBlock_140175016_AMO_211270296))
{
_flagFlashingSymbol57073308 = 1;
_rusLCD1.setCursor((_column57073308), (4 - 1));
if (_FlashingSymbol)
{
_rusLCD1.write(0x7E);
}
else
{
_rusLCD1.write(0x10);
}
}
else if (_flagFlashingSymbol57073308)
{
_rusLCD1.setCursor((_column57073308), (4 - 1));
_rusLCD1.write(0x10);
_flagFlashingSymbol57073308 = 0;
}
}
_key57073308 = 1;
}
else if (_flagStop57073308)
{
_flagStop57073308 = 0;
_rusLCD1.setCursor ((_column57073308 + 1), (4 - 1));
_rusLCD1.print(_eraseSymbol57073308);
_dispoldLength57073308 = 0;
_rusLCD1.setCursor((_column57073308), (4 - 1));
_rusLCD1.write(0x10);
_dispoldString57073308 ="";
_eraseSymbol57073308 = "";
_key57073308 = 0;
}
}
if (!_sleep50300400)
{
if ((_MenuBlock_140175016_AMO_137554213))
{
_flagStop200485229 = 1;
if (_key200485229)
{
String _tempPostfix = (0 ? : "");
if(_dispoldString200485229 != (String("")) + _tempPostfix || restartSlep50300400)
{
int _dispTempLength = rusStrlen(((String("")) + _tempPostfix).c_str());
_rusLCD1.setCursor((_column200485229), (3 - 1));
_rusLCD1.write(0x10);
_column200485229 = + 1 - 1;
_tempColumn200485229 = _column200485229 + 1;
_rusLCD1.setCursor (_oldTempColumn200485229, (3 - 1));
_oldTempColumn200485229 = _tempColumn200485229;
if (_dispoldLength200485229 > _dispTempLength)
{
_rusLCD1.print(_eraseSymbol200485229);
}
_eraseSymbol200485229 = "";
for (byte i = 0; i < _dispTempLength; i ++)
{
_eraseSymbol200485229 = _eraseSymbol200485229 + " ";
}
_eraseSymbol200485229 = _eraseSymbol200485229 + (1 == 1 ? " " : "");
_dispoldLength200485229 = _dispTempLength;
_dispoldString200485229 =(String("")) + _tempPostfix;
_rusLCD1.setCursor (_tempColumn200485229, (3 - 1));
_rusLCD1.print(_dispoldString200485229);
}
if ((_MenuBlock_140175016_AMO_137554213))
{
_flagFlashingSymbol200485229 = 1;
_rusLCD1.setCursor((_column200485229), (3 - 1));
if (_FlashingSymbol)
{
_rusLCD1.write(0x7E);
}
else
{
_rusLCD1.write(0x10);
}
}
else if (_flagFlashingSymbol200485229)
{
_rusLCD1.setCursor((_column200485229), (3 - 1));
_rusLCD1.write(0x10);
_flagFlashingSymbol200485229 = 0;
}
}
_key200485229 = 1;
}
else if (_flagStop200485229)
{
_flagStop200485229 = 0;
_rusLCD1.setCursor ((_column200485229 + 1), (3 - 1));
_rusLCD1.print(_eraseSymbol200485229);
_dispoldLength200485229 = 0;
_rusLCD1.setCursor((_column200485229), (3 - 1));
_rusLCD1.write(0x10);
_dispoldString200485229 ="";
_eraseSymbol200485229 = "";
_key200485229 = 0;
}
}
in_116845764_3 = _gtv5;
rst_116845764_3 = ((!((digitalRead (4)))) && (_MenuBlock_140175016_AMO_211270296));
if((in_116845764_3)&&(!tmp_116845764_3))
{
out_116845764_3= !out_116845764_3;
tmp_116845764_3=1;
}
if((!in_116845764_3)&&(tmp_116845764_3))
{
tmp_116845764_3=0;
}
if(rst_116845764_3)
{
tmp_116845764_3=0;
out_116845764_3=0;
}
_gtv3 = out_116845764_3;
in_116845764_1 = ((!((digitalRead (4)))) && (_MenuBlock_140175016_AMO_165279708));
rst_116845764_1 = _gtv5;
if((in_116845764_1)&&(!tmp_116845764_1))
{
out_116845764_1= !out_116845764_1;
tmp_116845764_1=1;
}
if((!in_116845764_1)&&(tmp_116845764_1))
{
tmp_116845764_1=0;
}
if(rst_116845764_1)
{
tmp_116845764_1=0;
out_116845764_1=0;
}
_gtv1 = out_116845764_1;
in_116845764_2 = ((!((digitalRead (4)))) && (_MenuBlock_140175016_AMO_137554213));
rst_116845764_2 = _gtv5;
if((in_116845764_2)&&(!tmp_116845764_2))
{
out_116845764_2= !out_116845764_2;
tmp_116845764_2=1;
}
if((!in_116845764_2)&&(tmp_116845764_2))
{
tmp_116845764_2=0;
}
if(rst_116845764_2)
{
tmp_116845764_2=0;
out_116845764_2=0;
}
_gtv2 = out_116845764_2;
if (!_sleep50300400)
{
if ((_MenuBlock_140175016_AMO_165279708))
{
_flagStop217508250 = 1;
if (_key217508250)
{
String _tempPostfix = (0 ? : "");
if(_dispoldString217508250 != (String("")) + _tempPostfix || restartSlep50300400)
{
int _dispTempLength = rusStrlen(((String("")) + _tempPostfix).c_str());
_rusLCD1.setCursor((_column217508250), (2 - 1));
_rusLCD1.write(0x10);
_column217508250 = + 1 - 1;
_tempColumn217508250 = _column217508250 + 1;
_rusLCD1.setCursor (_oldTempColumn217508250, (2 - 1));
_oldTempColumn217508250 = _tempColumn217508250;
if (_dispoldLength217508250 > _dispTempLength)
{
_rusLCD1.print(_eraseSymbol217508250);
}
_eraseSymbol217508250 = "";
for (byte i = 0; i < _dispTempLength; i ++)
{
_eraseSymbol217508250 = _eraseSymbol217508250 + " ";
}
_eraseSymbol217508250 = _eraseSymbol217508250 + (1 == 1 ? " " : "");
_dispoldLength217508250 = _dispTempLength;
_dispoldString217508250 =(String("")) + _tempPostfix;
_rusLCD1.setCursor (_tempColumn217508250, (2 - 1));
_rusLCD1.print(_dispoldString217508250);
}
if ((_MenuBlock_140175016_AMO_165279708))
{
_flagFlashingSymbol217508250 = 1;
_rusLCD1.setCursor((_column217508250), (2 - 1));
if (_FlashingSymbol)
{
_rusLCD1.write(0x7E);
}
else
{
_rusLCD1.write(0x10);
}
}
else if (_flagFlashingSymbol217508250)
{
_rusLCD1.setCursor((_column217508250), (2 - 1));
_rusLCD1.write(0x10);
_flagFlashingSymbol217508250 = 0;
}
}
_key217508250 = 1;
}
else if (_flagStop217508250)
{
_flagStop217508250 = 0;
_rusLCD1.setCursor ((_column217508250 + 1), (2 - 1));
_rusLCD1.print(_eraseSymbol217508250);
_dispoldLength217508250 = 0;
_rusLCD1.setCursor((_column217508250), (2 - 1));
_rusLCD1.write(0x10);
_dispoldString217508250 ="";
_eraseSymbol217508250 = "";
_key217508250 = 0;
}
}
//Плата:2
if (_gtv1 == 1)
{
if (_gtv1)
{
_tempVariable_bool = 1;
if (! _MenuBlock_242852165_OEIS)
{
_MenuBlock_242852165_OEIS = 1;
}
_tempVariable_int = pgm_read_byte(&_menuParametrsArray[((_MainMenus[1].currentItem).startInArrayIndex)+10]);
_MenuBlock_242852165_MNO = _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[_tempVariable_int - 1])));
_MenuBlock_242852165_VNO = _menuOutputValueString (1);
_MenuBlock_242852165_AMO_176374341 = pgm_read_byte(&_menuParametrsArray[(_MainMenus[1].currentItem).startInArrayIndex]) == 4;
_MenuBlock_242852165_AMO_212890743 = pgm_read_byte(&_menuParametrsArray[(_MainMenus[1].currentItem).startInArrayIndex]) == 5;
_MenuBlock_242852165_AMO_99014246 = pgm_read_byte(&_menuParametrsArray[(_MainMenus[1].currentItem).startInArrayIndex]) == 6;
_MenuBlock_242852165_AMO_208978504 = pgm_read_byte(&_menuParametrsArray[(_MainMenus[1].currentItem).startInArrayIndex]) == 7;
_MenuBlock_242852165_AMMO = (pgm_read_byte(&_menuParametrsArray[((_MainMenus[1].currentItem).startInArrayIndex)+5])) == 0;
}
else
{
_tempVariable_bool = 0;
if (_MenuBlock_242852165_OEIS)
{
_MenuBlock_242852165_OEIS = 0;
_menuUpdateToEEpromItems();
}
_MenuBlock_242852165_AMO_176374341 = 0;
_MenuBlock_242852165_AMO_212890743 = 0;
_MenuBlock_242852165_AMO_99014246 = 0;
_MenuBlock_242852165_AMO_208978504 = 0;
_MenuBlock_242852165_AMMO = 0;
_MenuBlock_242852165_MNO = "";
_MenuBlock_242852165_VNO = "";
}
if(_gtv6)
{
if (! _MenuBlock_242852165_OMUIS)
{
_MenuBlock_242852165_OMUIS = 1;
if(_tempVariable_bool)
{
_menuUpEvents(1);
_menuUpdateToEEpromItems();
}
}
}
else
{
_MenuBlock_242852165_OMUIS = 0;
}
if(_gtv7)
{
if (! _MenuBlock_242852165_OMDIS)
{
_MenuBlock_242852165_OMDIS = 1;
if(_tempVariable_bool)
{
_menuDownEvents(1);
_menuUpdateToEEpromItems();
}
}
}
else
{
_MenuBlock_242852165_OMDIS = 0;
}
if(_gtv6)
{
if (! _MenuBlock_242852165_OVUIS)
{
_MenuBlock_242852165_OVUIS = 1;
if(_tempVariable_bool)
{
_valueUpEvents(1);
}
}
}
else
{
_MenuBlock_242852165_OVUIS = 0;
}
if(_gtv7)
{
if (! _MenuBlock_242852165_OVDIS)
{
_MenuBlock_242852165_OVDIS = 1;
if(_tempVariable_bool)
{
_valueDownEvents(1);
}
}
}
else
{
_MenuBlock_242852165_OVDIS = 0;
}
if (((_MenuBlock_242852165_AMO_208978504) && (!((digitalRead (4))))))
{
if (_trgrt1I)
{
_trgrt1 = 0;
}
else
{
_trgrt1 = 1;
_trgrt1I = 1;
}
}
else
{
_trgrt1 = 0;
_trgrt1I = 0;
}
;
_gtv5 = _trgrt1;
if (!_sleep50300400)
{
if ((_MenuBlock_242852165_AMO_208978504))
{
_flagStop125449263 = 1;
if (_key125449263)
{
String _tempPostfix = (0 ? : "");
if(_dispoldString125449263 != (String("")) + _tempPostfix || restartSlep50300400)
{
int _dispTempLength = rusStrlen(((String("")) + _tempPostfix).c_str());
_rusLCD1.setCursor((_column125449263), (4 - 1));
_rusLCD1.write(0x10);
_column125449263 = + 1 - 1;
_tempColumn125449263 = _column125449263 + 1;
_rusLCD1.setCursor (_oldTempColumn125449263, (4 - 1));
_oldTempColumn125449263 = _tempColumn125449263;
if (_dispoldLength125449263 > _dispTempLength)
{
_rusLCD1.print(_eraseSymbol125449263);
}
_eraseSymbol125449263 = "";
for (byte i = 0; i < _dispTempLength; i ++)
{
_eraseSymbol125449263 = _eraseSymbol125449263 + " ";
}
_eraseSymbol125449263 = _eraseSymbol125449263 + (1 == 1 ? " " : "");
_dispoldLength125449263 = _dispTempLength;
_dispoldString125449263 =(String("")) + _tempPostfix;
_rusLCD1.setCursor (_tempColumn125449263, (4 - 1));
_rusLCD1.print(_dispoldString125449263);
}
if ((_MenuBlock_242852165_AMO_208978504))
{
_flagFlashingSymbol125449263 = 1;
_rusLCD1.setCursor((_column125449263), (4 - 1));
if (_FlashingSymbol)
{
_rusLCD1.write(0x7E);
}
else
{
_rusLCD1.write(0x10);
}
}
else if (_flagFlashingSymbol125449263)
{
_rusLCD1.setCursor((_column125449263), (4 - 1));
_rusLCD1.write(0x10);
_flagFlashingSymbol125449263 = 0;
}
}
_key125449263 = 1;
}
else if (_flagStop125449263)
{
_flagStop125449263 = 0;
_rusLCD1.setCursor ((_column125449263 + 1), (4 - 1));
_rusLCD1.print(_eraseSymbol125449263);
_dispoldLength125449263 = 0;
_rusLCD1.setCursor((_column125449263), (4 - 1));
_rusLCD1.write(0x10);
_dispoldString125449263 ="";
_eraseSymbol125449263 = "";
_key125449263 = 0;
}
}
if (!_sleep50300400)
{
if ((_MenuBlock_242852165_AMO_99014246))
{
_flagStop229575467 = 1;
if (_key229575467)
{
String _tempPostfix = (0 ? : "");
if(_dispoldString229575467 != (String("")) + _tempPostfix || restartSlep50300400)
{
int _dispTempLength = rusStrlen(((String("")) + _tempPostfix).c_str());
_rusLCD1.setCursor((_column229575467), (3 - 1));
_rusLCD1.write(0x10);
_column229575467 = + 1 - 1;
_tempColumn229575467 = _column229575467 + 1;
_rusLCD1.setCursor (_oldTempColumn229575467, (3 - 1));
_oldTempColumn229575467 = _tempColumn229575467;
if (_dispoldLength229575467 > _dispTempLength)
{
_rusLCD1.print(_eraseSymbol229575467);
}
_eraseSymbol229575467 = "";
for (byte i = 0; i < _dispTempLength; i ++)
{
_eraseSymbol229575467 = _eraseSymbol229575467 + " ";
}
_eraseSymbol229575467 = _eraseSymbol229575467 + (1 == 1 ? " " : "");
_dispoldLength229575467 = _dispTempLength;
_dispoldString229575467 =(String("")) + _tempPostfix;
_rusLCD1.setCursor (_tempColumn229575467, (3 - 1));
_rusLCD1.print(_dispoldString229575467);
}
if ((_MenuBlock_242852165_AMO_99014246))
{
_flagFlashingSymbol229575467 = 1;
_rusLCD1.setCursor((_column229575467), (3 - 1));
if (_FlashingSymbol)
{
_rusLCD1.write(0x7E);
}
else
{
_rusLCD1.write(0x10);
}
}
else if (_flagFlashingSymbol229575467)
{
_rusLCD1.setCursor((_column229575467), (3 - 1));
_rusLCD1.write(0x10);
_flagFlashingSymbol229575467 = 0;
}
}
_key229575467 = 1;
}
else if (_flagStop229575467)
{
_flagStop229575467 = 0;
_rusLCD1.setCursor ((_column229575467 + 1), (3 - 1));
_rusLCD1.print(_eraseSymbol229575467);
_dispoldLength229575467 = 0;
_rusLCD1.setCursor((_column229575467), (3 - 1));
_rusLCD1.write(0x10);
_dispoldString229575467 ="";
_eraseSymbol229575467 = "";
_key229575467 = 0;
}
}
if (!_sleep50300400)
{
if ((_MenuBlock_242852165_AMO_176374341))
{
_flagStop257241564 = 1;
if (_key257241564)
{
String _tempPostfix = (0 ? : "");
if(_dispoldString257241564 != (String("")) + _tempPostfix || restartSlep50300400)
{
int _dispTempLength = rusStrlen(((String("")) + _tempPostfix).c_str());
_rusLCD1.setCursor((_column257241564), (2 - 1));
_rusLCD1.write(0x10);
_column257241564 = + 1 - 1;
_tempColumn257241564 = _column257241564 + 1;
_rusLCD1.setCursor (_oldTempColumn257241564, (2 - 1));
_oldTempColumn257241564 = _tempColumn257241564;
if (_dispoldLength257241564 > _dispTempLength)
{
_rusLCD1.print(_eraseSymbol257241564);
}
_eraseSymbol257241564 = "";
for (byte i = 0; i < _dispTempLength; i ++)
{
_eraseSymbol257241564 = _eraseSymbol257241564 + " ";
}
_eraseSymbol257241564 = _eraseSymbol257241564 + (1 == 1 ? " " : "");
_dispoldLength257241564 = _dispTempLength;
_dispoldString257241564 =(String("")) + _tempPostfix;
_rusLCD1.setCursor (_tempColumn257241564, (2 - 1));
_rusLCD1.print(_dispoldString257241564);
}
if ((_MenuBlock_242852165_AMO_176374341))
{
_flagFlashingSymbol257241564 = 1;
_rusLCD1.setCursor((_column257241564), (2 - 1));
if (_FlashingSymbol)
{
_rusLCD1.write(0x7E);
}
else
{
_rusLCD1.write(0x10);
}
}
else if (_flagFlashingSymbol257241564)
{
_rusLCD1.setCursor((_column257241564), (2 - 1));
_rusLCD1.write(0x10);
_flagFlashingSymbol257241564 = 0;
}
}
_key257241564 = 1;
}
else if (_flagStop257241564)
{
_flagStop257241564 = 0;
_rusLCD1.setCursor ((_column257241564 + 1), (2 - 1));
_rusLCD1.print(_eraseSymbol257241564);
_dispoldLength257241564 = 0;
_rusLCD1.setCursor((_column257241564), (2 - 1));
_rusLCD1.write(0x10);
_dispoldString257241564 ="";
_eraseSymbol257241564 = "";
_key257241564 = 0;
}
}
if (!_sleep50300400)
{
if ((_gtv1))
{
_flagStop128153734 = 1;
if (_key128153734)
{
String _tempPostfix = (0 ? : "");
if(_dispoldString128153734 != (String("Exit")) + _tempPostfix || restartSlep50300400)
{
int _dispTempLength = rusStrlen(((String("Exit")) + _tempPostfix).c_str());
_column128153734 = + 3 - 1;
_tempColumn128153734 = _column128153734;
_rusLCD1.setCursor (_oldTempColumn128153734, (4 - 1));
_oldTempColumn128153734 = _tempColumn128153734;
if (_dispoldLength128153734 > _dispTempLength)
{
_rusLCD1.print(_eraseSymbol128153734);
}
_eraseSymbol128153734 = "";
for (byte i = 0; i < _dispTempLength; i ++)
{
_eraseSymbol128153734 = _eraseSymbol128153734 + " ";
}
_eraseSymbol128153734 = _eraseSymbol128153734 + (0 == 1 ? " " : "");
_dispoldLength128153734 = _dispTempLength;
_dispoldString128153734 =(String("Exit")) + _tempPostfix;
_rusLCD1.setCursor (_tempColumn128153734, (4 - 1));
_rusLCD1.print(_dispoldString128153734);
}
}
_key128153734 = 1;
}
else if (_flagStop128153734)
{
_flagStop128153734 = 0;
_rusLCD1.setCursor ((_column128153734), (4 - 1));
_rusLCD1.print(_eraseSymbol128153734);
_dispoldLength128153734 = 0;
_dispoldString128153734 = "";
_eraseSymbol128153734 = "";
_key128153734 = 0;
}
}
if (!_sleep50300400)
{
if ((_gtv1))
{
_flagStop244412152 = 1;
if (_key244412152)
{
String _tempPostfix = (0 ? : "");
if(_dispoldString244412152 != (String("PCB type")) + _tempPostfix || restartSlep50300400)
{
int _dispTempLength = rusStrlen(((String("PCB type")) + _tempPostfix).c_str());
_column244412152 = + 3 - 1;
_tempColumn244412152 = _column244412152;
_rusLCD1.setCursor (_oldTempColumn244412152, (3 - 1));
_oldTempColumn244412152 = _tempColumn244412152;
if (_dispoldLength244412152 > _dispTempLength)
{
_rusLCD1.print(_eraseSymbol244412152);
}
_eraseSymbol244412152 = "";
for (byte i = 0; i < _dispTempLength; i ++)
{
_eraseSymbol244412152 = _eraseSymbol244412152 + " ";
}
_eraseSymbol244412152 = _eraseSymbol244412152 + (0 == 1 ? " " : "");
_dispoldLength244412152 = _dispTempLength;
_dispoldString244412152 =(String("PCB type")) + _tempPostfix;
_rusLCD1.setCursor (_tempColumn244412152, (3 - 1));
_rusLCD1.print(_dispoldString244412152);
}
}
_key244412152 = 1;
}
else if (_flagStop244412152)
{
_flagStop244412152 = 0;
_rusLCD1.setCursor ((_column244412152), (3 - 1));
_rusLCD1.print(_eraseSymbol244412152);
_dispoldLength244412152 = 0;
_dispoldString244412152 = "";
_eraseSymbol244412152 = "";
_key244412152 = 0;
}
}
if (!_sleep50300400)
{
if ((_gtv1))
{
_flagStop63375052 = 1;
if (_key63375052)
{
String _tempPostfix = (0 ? : "");
if(_dispoldString63375052 != (String("Address")) + _tempPostfix || restartSlep50300400)
{
int _dispTempLength = rusStrlen(((String("Address")) + _tempPostfix).c_str());
_column63375052 = + 3 - 1;
_tempColumn63375052 = _column63375052;
_rusLCD1.setCursor (_oldTempColumn63375052, (2 - 1));
_oldTempColumn63375052 = _tempColumn63375052;
if (_dispoldLength63375052 > _dispTempLength)
{
_rusLCD1.print(_eraseSymbol63375052);
}
_eraseSymbol63375052 = "";
for (byte i = 0; i < _dispTempLength; i ++)
{
_eraseSymbol63375052 = _eraseSymbol63375052 + " ";
}
_eraseSymbol63375052 = _eraseSymbol63375052 + (0 == 1 ? " " : "");
_dispoldLength63375052 = _dispTempLength;
_dispoldString63375052 =(String("Address")) + _tempPostfix;
_rusLCD1.setCursor (_tempColumn63375052, (2 - 1));
_rusLCD1.print(_dispoldString63375052);
}
}
_key63375052 = 1;
}
else if (_flagStop63375052)
{
_flagStop63375052 = 0;
_rusLCD1.setCursor ((_column63375052), (2 - 1));
_rusLCD1.print(_eraseSymbol63375052);
_dispoldLength63375052 = 0;
_dispoldString63375052 = "";
_eraseSymbol63375052 = "";
_key63375052 = 0;
}
}
if (!_sleep50300400)
{
if ((_gtv1))
{
_flagStop210120031 = 1;
if (_key210120031)
{
String _tempPostfix = (0 ? : "");
if(_dispoldString210120031 != (String("SET SLAVE")) + _tempPostfix || restartSlep50300400)
{
int _dispTempLength = rusStrlen(((String("SET SLAVE")) + _tempPostfix).c_str());
_column210120031 =(20 - _dispTempLength)/ 2;
_tempColumn210120031 = _column210120031;
_rusLCD1.setCursor (_oldTempColumn210120031, (1 - 1));
_oldTempColumn210120031 = _tempColumn210120031;
if (_dispoldLength210120031 > _dispTempLength)
{
_rusLCD1.print(_eraseSymbol210120031);
}
_eraseSymbol210120031 = "";
for (byte i = 0; i < _dispTempLength; i ++)
{
_eraseSymbol210120031 = _eraseSymbol210120031 + " ";
}
_eraseSymbol210120031 = _eraseSymbol210120031 + (0 == 1 ? " " : "");
_dispoldLength210120031 = _dispTempLength;
_dispoldString210120031 =(String("SET SLAVE")) + _tempPostfix;
_rusLCD1.setCursor (_tempColumn210120031, (1 - 1));
_rusLCD1.print(_dispoldString210120031);
}
}
_key210120031 = 1;
}
else if (_flagStop210120031)
{
_flagStop210120031 = 0;
_rusLCD1.setCursor ((_column210120031), (1 - 1));
_rusLCD1.print(_eraseSymbol210120031);
_dispoldLength210120031 = 0;
_dispoldString210120031 = "";
_eraseSymbol210120031 = "";
_key210120031 = 0;
}
}
if (_changeNumber2_Out)
{
_changeNumber2_Out = 0;
}
else
{
_tempVariable_byte = (_menuValueArray_byte[1]);
if (_tempVariable_byte != _changeNumber2_OLV)
{
_changeNumber2_OLV = _tempVariable_byte;
_changeNumber2_Out = 1;
}
}
if(_changeNumber2_Out)
{
if(! _modbuseSetSlId1_OES)
{
_modbuseSetSlId1_OES = 1;
_modbuseSetSlId1_SlIdSer1Reg1 = (_menuValueArray_byte[1]);
}
}
else
{
_modbuseSetSlId1_OES = 0;
}
if (_changeNumber2_Out)
{
_tempVariable_byte = _modbuseSetSlId1_SlIdSer1Reg1;
if (! (_tempVariable_byte == (_modbusMasterDataTable_4_reg_1[2])))
{
_readWriteMasterVars[2] = 6;
}
;
_modbusMasterDataTable_4_reg_1[2] = _tempVariable_byte;
}
if (_changeNumber1_Out)
{
_changeNumber1_Out = 0;
}
else
{
_tempVariable_byte = (_menuValueArray_byte[2]);
if (_tempVariable_byte != _changeNumber1_OLV)
{
_changeNumber1_OLV = _tempVariable_byte;
_changeNumber1_Out = 1;
}
}
if(_changeNumber1_Out)
{
if(! _modbuseSetSpeed1_OES)
{
_modbuseSetSpeed1_OES = 1;
_modbuseSetSpeed1_newSpeedIdx = (_menuValueArray_byte[2]);
if(_modbuseSetSpeed1_newSpeedIdx !=_modbuseSetSpeed1_SppedIdx)
{
_modbuseSetSpeed1_SppedIdx =_modbuseSetSpeed1_newSpeedIdx;
Serial.end();
_startUart0();
}
}
}
else
{
_modbuseSetSpeed1_OES = 0;
}
if (_changeNumber1_Out)
{
_tempVariable_byte = _modbuseSetSpeed1_SppedIdx;
if (! (_tempVariable_byte == (_modbusMasterDataTable_4_reg_1[1])))
{
_readWriteMasterVars[1] = 6;
}
;
_modbusMasterDataTable_4_reg_1[1] = _tempVariable_byte;
}
_tempVariable_byte = (_menuValueArray_byte[0]);
if (! (_tempVariable_byte == (_modbusMasterDataTable_4_reg_1[0])))
{
_readWriteMasterVars[0] = 6;
}
;
_modbusMasterDataTable_4_reg_1[0] = _tempVariable_byte;
}
//Плата:3
if (_gtv2 == 1)
{
}
//Плата:4
if (_gtv3 == 1)
{
}
switch (_modbusMasterState)
{
case 1:
_nextModbusMasterQuery();
break;
case 2:
pollModbusMaster();
break;
}
}
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 (int menuIndex)
{
int tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]);
int parIndex = pgm_read_byte(&_menuParametrsArray[ (((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+5]);
int parentStartIndex;
int 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 (int menuIndex)
{
int tempIndex = pgm_read_byte(&_menuParametrsArray[((_MainMenus[menuIndex]).currentItem).startInArrayIndex]);
int parIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+5]);
int parentStartIndex;
int 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 (int menuIndex)
{
int valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+2]);
int itemType = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+1]);
int indexMax = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+6]);
int indexStep = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+8]);
if(itemType ==3)
{
_menuValueArray_bool[valIndex - 1 ] = 1;
return;
}
if (itemType == 2)
{
if (! indexMax == 0)
{
if (! (byte(pgm_read_byte(&_menuConstantValuesArray_byte[indexMax -1])) > byte(_menuValueArray_byte[valIndex -1])))
{
return;
}
}
_menuValueArray_byte[valIndex -1] = _menuValueArray_byte[valIndex -1] + (pgm_read_byte(&_menuConstantValuesArray_byte[indexStep -1]));
}
}
void _valueDownEvents (int menuIndex)
{
int valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+2]);
int itemType = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+1]);
int indexMin = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+7]);
int indexStep = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+8]);
if(itemType ==3)
{
_menuValueArray_bool[valIndex -1] = 0;
return;
}
if (itemType == 2)
{
if (! indexMin == 0)
{
if (! ((byte(pgm_read_byte(&_menuConstantValuesArray_byte[indexMin - 1]))) < byte(_menuValueArray_byte[valIndex - 1])))
{
return;
}
}
_menuValueArray_byte[valIndex - 1] = _menuValueArray_byte[valIndex - 1] - (pgm_read_byte(&_menuConstantValuesArray_byte[indexStep - 1]));
}
}
String _menuOutputValueString (int menuIndex)
{
int itemType = pgm_read_byte(&_menuParametrsArray[ (((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+1]);
int valIndex = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+2]);
int indexMin = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+7]);
int indexMax = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+6]);
if(valIndex == 0)
{
return "";
}
int convFormat = pgm_read_byte(&_menuParametrsArray[(((_MainMenus[menuIndex]).currentItem).startInArrayIndex)+9]);
if(itemType == 2)
{
return _convertNamber(itemType, convFormat, valIndex, indexMax, indexMin);
}
if(itemType == 3)
{
return _convertBoolean(itemType, convFormat, valIndex, indexMax, indexMin);
}
return "";
}
void _menuUpdateToEEpromItems()
{
(updateByteToEEPROM(1, 0, 0x0, ((_menuValueArray_byte[0]))));
(updateByteToEEPROM(2, 0, 0x0, ((_menuValueArray_byte[2]))));
}
String _convertNamber(int itemType, int convFormat, int valIndex, int indexMax, int indexMin)
{
if (itemType== 2)
{
if (convFormat == 4)
{
return String((_menuValueArray_byte[valIndex - 1 ]),DEC);
}
if (convFormat == 5)
{
return String((_menuValueArray_byte[valIndex - 1]),HEX);
}
if (convFormat == 6)
{
return String((_menuValueArray_byte[valIndex -1]),BIN);
}
}
return "";
}
String _convertBoolean(int itemType, int convFormat, int valIndex, int indexMax, int indexMin)
{
if (convFormat == 1)
{
if(_menuValueArray_bool[valIndex -1])
{
return "1";
}
else
{
return "0";
}
}
if (convFormat == 2)
{
if(_menuValueArray_bool[valIndex -1])
{
return "True";
}
else
{
return "False";
}
}
if (convFormat == 3)
{
if(_menuValueArray_bool[valIndex -1 ])
{
return "Да";
}
else
{
return "Нет";
}
}
if(_menuValueArray_bool[valIndex -1])
{
return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[indexMax - 1])));
}
else
{
return _readStringFromProgmem ((char*)pgm_read_word(&(_flprogMenuStringsArray[indexMin - 1])));
}
return "";
}
int modbusCalcCRC(byte length, byte bufferArray[])
{
unsigned int temp, temp2, flag;
temp = 0xFFFF;
for (unsigned char i = 0; i < length; i++)
{
temp = temp ^ bufferArray[i];
for (unsigned char j = 1; j <= 8; j++)
{
flag = temp & 0x0001;
temp >>= 1;
if (flag) temp ^= 0xA001;
}
}
temp2 = temp >> 8;
temp = (temp << 8) | temp2;
temp &= 0xFFFF;
return temp;
}
void _nextModbusMasterQuery()
{
_selectNewModbusMasterCurrentReg(_modbusMasterCurrentReg, _modbusMasterCurrentVariable);
if (_modbusMasterCurrentReg == 0) return;
_createMasterTelegramm();
_modbusMasterSendQuery();
}
void _selectNewModbusMasterCurrentReg(byte oldReg, byte oldVar)
{
bool isNeeded = 1;
if (oldReg == 0)
{
_selectNewModbusMasterCurrentReg(1, 0);
return;
}
if (!(_isTimer ((_startTimeMasterRegs[oldReg - 1]),(_updateTimeMasterRegsArray[oldReg -1]))))
{
isNeeded = 0;
}
if(! isNeeded)
{
if(oldReg < 1)
{
_selectNewModbusMasterCurrentReg(oldReg+1, 0);
return;
}
else
{
_modbusMasterCurrentReg = 0;
_modbusMasterCurrentVariable = 0;
return;
}
}
if (oldVar == 0)
{
_modbusMasterCurrentReg = oldReg;
_modbusMasterCurrentVariable = 1;
return;
}
byte temp;
switch (oldReg)
{
case 1:
temp = 3;
break;
}
if (oldVar < temp)
{
_modbusMasterCurrentReg = oldReg;
_modbusMasterCurrentVariable = oldVar +1;
return;
}
_startTimeMasterRegs[oldReg -1] = millis();
if(oldReg < 1)
{
_selectNewModbusMasterCurrentReg(oldReg+1, 0);
return;
}
_modbusMasterCurrentReg = 0;
_modbusMasterCurrentVariable = 0;
return;
}
void _createMasterTelegramm()
{
switch (_modbusMasterCurrentReg)
{
case 1:
_modbusTelegramm.slaveId = _modbuseSetSlId1_SlIdSer1Reg1;
switch (_modbusMasterCurrentVariable)
{
case 1:
_modbusTelegramm.function = _readWriteMasterVars[0];
_modbusTelegramm.startAddres = 2;
_modbusTelegramm.numbeRegs = 1;
_modbusTelegramm.valueIndex = 0;
_readWriteMasterVars[0] = 3;
break;
case 2:
_modbusTelegramm.function = _readWriteMasterVars[1];
_modbusTelegramm.startAddres = 3;
_modbusTelegramm.numbeRegs = 1;
_modbusTelegramm.valueIndex = 1;
_readWriteMasterVars[1] = 3;
break;
case 3:
_modbusTelegramm.function = _readWriteMasterVars[2];
_modbusTelegramm.startAddres = 4;
_modbusTelegramm.numbeRegs = 1;
_modbusTelegramm.valueIndex = 2;
_readWriteMasterVars[2] = 3;
break;
}
break;
}
}
void _modbusMasterSendQuery()
{
int intTemp;
byte currentIndex = _modbusTelegramm.valueIndex;
_modbusMasterBuffer[0] = _modbusTelegramm.slaveId;
_modbusMasterBuffer[1] = _modbusTelegramm.function;
_modbusMasterBuffer[2] = highByte(_modbusTelegramm.startAddres);
_modbusMasterBuffer[3] = lowByte(_modbusTelegramm.startAddres);
switch (_modbusTelegramm.function)
{
case 3:
_modbusMasterBuffer[4] = highByte(_modbusTelegramm.numbeRegs);
_modbusMasterBuffer[5] = lowByte(_modbusTelegramm.numbeRegs);
_modbusMasterBufferSize = 6;
break;
case 6:
switch (_modbusMasterCurrentReg)
{
case 1 :
intTemp = _modbusMasterDataTable_4_reg_1[currentIndex];
break;
}
_modbusMasterBuffer[4] = highByte(intTemp);
_modbusMasterBuffer[5] = lowByte(intTemp);
_modbusMasterBufferSize = 6;
break;
}
_modbusMasterSendTxBuffer();
_modbusMasterState = 2;
}
void _modbusMasterSendTxBuffer()
{
byte i = 0;
int crc = modbusCalcCRC(_modbusMasterBufferSize, _modbusMasterBuffer);
_modbusMasterBuffer[ _modbusMasterBufferSize ] = crc >> 8;
_modbusMasterBufferSize++;
_modbusMasterBuffer[ _modbusMasterBufferSize ] = crc & 0x00ff;
_modbusMasterBufferSize++;
Serial.write(_modbusMasterBuffer, _modbusMasterBufferSize);
Serial.flush();
_modbusMasterBufferSize = 0;
_modbusMasterSendTime = millis();
}
void pollModbusMaster()
{
if (_modbusTelegramm.slaveId == 0)
{
_modbusMasterState = 1;
return;
}
if (_isTimer(_modbusMasterSendTime, 1000))
{
_modbusMasterState = 1;
return;
}
byte avalibleBytes = Serial.available();
if (avalibleBytes == 0) return;
if (avalibleBytes != _modbusMasterLastRec)
{
_modbusMasterLastRec = avalibleBytes;
_modbusMasterStartT35 = millis();
return;
}
if (!(_isTimer(_modbusMasterStartT35, (ModbusT35Table[_modbuseSetSpeed1_SppedIdx])))) return;
_modbusMasterLastRec = 0;
byte readingBytes = _modbusMasterGetRxBuffer();
if (readingBytes < 5)
{
_modbusMasterState = 1;
return ;
}
byte exeption = validateAnswer();
if (exeption != 0)
{
_modbusMasterState = 1;
return;
}
switch (_modbusMasterBuffer[1])
{
case 3:
get_FC3(4);
break;
}
_modbusMasterState = 1;
return;
}
byte _modbusMasterGetRxBuffer()
{
boolean bBuffOverflow = false;
_modbusMasterBufferSize = 0;
while (Serial.available())
{
_modbusMasterBuffer[ _modbusMasterBufferSize ] = Serial.read();
_modbusMasterBufferSize ++;
if (_modbusMasterBufferSize >= 64) bBuffOverflow = true;
}
if (bBuffOverflow)
{
return -3;
}
return _modbusMasterBufferSize;
}
byte validateAnswer()
{
uint16_t u16MsgCRC = ((_modbusMasterBuffer[_modbusMasterBufferSize - 2] << 8) | _modbusMasterBuffer[_modbusMasterBufferSize - 1]);
if (modbusCalcCRC(_modbusMasterBufferSize - 2,_modbusMasterBuffer) != u16MsgCRC)
{
return 255;
}
if ((_modbusMasterBuffer[1] & 0x80) != 0)
{
return _modbusMasterBuffer[2] ;
}
boolean isSupported = false;
for (byte i = 0; i < sizeof(_modbusMaster_fctsupported); i++)
{
if (_modbusMaster_fctsupported[i] == _modbusMasterBuffer[1])
{
isSupported = 1;
break;
}
}
if (!isSupported)
{
return 1;
}
return 0;
}
void get_FC3(byte table)
{
int currentIndex = _modbusTelegramm.valueIndex;
byte currentByte = 3;
int value;
for (int i = 0; i < _modbusTelegramm.numbeRegs; i++)
{
value = word(_modbusMasterBuffer[ currentByte], _modbusMasterBuffer[ currentByte + 1 ]);
switch (_modbusMasterCurrentReg)
{
case 1 :
if(table == 3)
{
}
else
{
_modbusMasterDataTable_4_reg_1[currentIndex + i] =value;
}
break;
}
currentByte += 2;
}
}
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);
}
void _startUart0()
{
int code= 6;
Serial.begin(ModbusUartSpeedTable[_modbuseSetSpeed1_SppedIdx], (_serialModeFromInt(code)));
}
int _serialModeFromInt(int code)
{
switch (code)
{
case 0x00: return SERIAL_5N1;
break;
case 0x02: return SERIAL_6N1;
break;
case 0x04: return SERIAL_7N1;
break;
case 0x06: return SERIAL_8N1;
break;
case 0x08: return SERIAL_5N2;
break;
case 0x0A: return SERIAL_6N2;
break;
case 0x0C: return SERIAL_7N2 ;
break;
case 0x0E: return SERIAL_8N2;
break;
case 0x20: return SERIAL_5E1;
break;
case 0x22: return SERIAL_6E1;
break;
case 0x24: return SERIAL_7E1 ;
break;
case 0x26: return SERIAL_8E1;
break;
case 0x28: return SERIAL_5E2 ;
break;
case 0x2A: return SERIAL_6E2;
break;
case 0x2C: return SERIAL_7E2;
break;
case 0x2E: return SERIAL_8E2;
break;
case 0x30: return SERIAL_5O1;
break;
case 0x32: return SERIAL_6O1;
break;
case 0x34: return SERIAL_7O1;
break;
case 0x36: return SERIAL_8O1;
break;
case 0x38: return SERIAL_5O2;
break;
case 0x3A: return SERIAL_6O2 ;
break;
case 0x3C: return SERIAL_7O2;
break;
case 0x3E: return SERIAL_8O2;
break;
}
return SERIAL_8N1;
}
byte rusStrlen(const char * data)
{
byte i = 0;
byte count = 0;
while (data[i])
{
if ((data[i] & 0xc0) != 0x80) count++;
i++;
}
return count;
}