#include <LiquidCrystal_I2C.h>
int _AvlDFU0 = 0;
bool BL;
bool backlightenabled= false;
LiquidCrystal_I2C lcd(0x27, 4, 20);
bool EN_183761663_1;
String Text_183761663_1;
int Symb_183761663_1= 0;
int OldSymb_183761663_1=0;
int TextCenterControl_183761663_1= 1;
bool EN_183761663_2;
String Text_183761663_2;
int Symb_183761663_2= 0;
int OldSymb_183761663_2=0;
int TextCenterControl_183761663_2= 1;
bool EN_183761663_3;
String Text_183761663_3;
int Symb_183761663_3= 0;
int OldSymb_183761663_3=0;
int TextCenterControl_183761663_3= 1;
bool EN_183761663_4;
String Text_183761663_4;
int Symb_183761663_4= 0;
int OldSymb_183761663_4=0;
int TextCenterControl_183761663_4= 1;
int _PWDC = 0;
bool _gtv1 = 0;
String _gtv2 = "NoData";
int _gtv3;
bool _trgrt2 = 0;
bool _trgrt2I = 0;
String _GSFS6 = "0";
String _GSFS3 = "0";
String _RVFU1Data;
bool _RVFU1Reset = 1;
String _GSFS5 = "0";
bool _trgs2 = 0;
String _GSFS1 = "0";
bool _stou2 = 0;
bool _count3I = 0;
int _count3_Value = 0;
String _GSFS4 = "0";
bool _trgrt4 = 0;
bool _trgrt4I = 0;
String _GSFS7 = "0";
bool _count1I = 0;
int _count1_Value = 0;
String _GSFS2 = "0";
void setup()
{
TCCR2A = 0x00;
TCCR2B = 0x07;
TIMSK2=0x01;
TCNT2=100;
_startUart0();
lcd.init();
}
void loop()
{
_PWDC = 0;
if (_AvlDFU0)
{
_AvlDFU0=0;
}
else
{
if (Serial.available())
{
_AvlDFU0=1;
_readByteFromUART((Serial.read()),0);
}
}
//Плата:1
//Наименование:НАлаштування
BL = 1;
if (BL)
{
if (!backlightenabled)
{
lcd.backlight();
backlightenabled = true;
}
}
else
{
if (backlightenabled)
{
lcd.noBacklight();
backlightenabled = false;
}
}
//Плата:2
//Наименование:Омен
if (_gtv1)
{
if(!_RVFU1Reset)
{
_RVFU1Data = String("");
_RVFU1Reset =1;
}
}
else
{
_RVFU1Reset =0;
}
_GSFS2 = (_RVFU1Data).substring((0), (1));
if (_gtv1)
{
_count3_Value = 0;
}
else
{
if (_AvlDFU0)
{
if (! _count3I)
{
_count3I = 1;
_count3_Value = _count3_Value + 1;
}
}
else
{
_count3I = 0;
}
}
if ((((_count3_Value) == (1)) && (!(((String("*")).equals(_GSFS2))))))
{
if (_trgrt2I)
{
_trgrt2 = 0;
}
else
{
_trgrt2 = 1;
_trgrt2I = 1;
}
}
else
{
_trgrt2 = 0;
_trgrt2I = 0;
}
;
_GSFS3 = (_RVFU1Data).substring((1), (((_RVFU1Data.length()))-(1)));
if(_trgrt2) _trgs2 = 1;
if((((_count3_Value) == (1)) && (((String("*")).equals(_GSFS2))))) _trgs2 = 0;
_GSFS4 = (_RVFU1Data).substring((((_RVFU1Data.length()))-(1)), ((_RVFU1Data.length())));
if (((!(_trgs2)) && (((String(";")).equals(_GSFS4)))))
{
if (_trgrt4I)
{
_trgrt4 = 0;
}
else
{
_trgrt4 = 1;
_trgrt4I = 1;
}
}
else
{
_trgrt4 = 0;
_trgrt4I = 0;
}
;
if (_trgrt4)
{
_gtv2 = _GSFS3;
}
if (_trgs2)
{
if (! _count1I)
{
_count1I = 1;
if(_count1_Value < 9999)
{
_count1_Value = _count1_Value + 1;
}
}
}
else
{
_count1I = 0;
}
if (_trgrt4)
{
if (!_stou2)
{
Serial.println(((String("Stroke: ")) + (_gtv2) + (String("\n")) + (String(" Lenght: ")) + ((String(_count3_Value, DEC))) + (String(" Buffer: ")) + (_RVFU1Data) + (String(" ErrorCount: ")) + ((String(_count1_Value, DEC)))));
_stou2=1;
}
}
else
{
_stou2=0;
}
_gtv1 = ((_trgrt2) || (_trgrt4));
_gtv3 = _count3_Value;
//Плата:3
//Наименование:Дисплей
if (_gtv3 == 0)
{
_GSFS1 = (_gtv2).substring((0), (20));
EN_183761663_1 = 1;
Text_183761663_1 = _GSFS1;
if(EN_183761663_1)
{
if(TextCenterControl_183761663_1==0)
{
Symb_183761663_1 = GetSymbCount(Text_183761663_1);
if(Symb_183761663_1 != OldSymb_183761663_1)
{
lcd.setCursor(0, 0);
lcd.print(" ");
OldSymb_183761663_1 = Symb_183761663_1;
}
lcd.setCursor(Symb_183761663_1, 0);
lcd.print(Text_183761663_1);
lcd.print(" ");
}
else
{
Symb_183761663_1 = 0;
lcd.setCursor(Symb_183761663_1, 0);
lcd.print(Text_183761663_1);
}
}
_GSFS5 = (_gtv2).substring((20), (40));
EN_183761663_2 = 1;
Text_183761663_2 = _GSFS5;
if(EN_183761663_2)
{
if(TextCenterControl_183761663_2==0)
{
Symb_183761663_2 = GetSymbCount(Text_183761663_2);
if(Symb_183761663_2 != OldSymb_183761663_2)
{
lcd.setCursor(0, 1);
lcd.print(" ");
OldSymb_183761663_2 = Symb_183761663_2;
}
lcd.setCursor(Symb_183761663_2, 1);
lcd.print(Text_183761663_2);
lcd.print(" ");
}
else
{
Symb_183761663_2 = 0;
lcd.setCursor(Symb_183761663_2, 1);
lcd.print(Text_183761663_2);
}
}
_GSFS6 = (_gtv2).substring((40), (60));
EN_183761663_3 = 1;
Text_183761663_3 = _GSFS6;
if(EN_183761663_3)
{
if(TextCenterControl_183761663_3==0)
{
Symb_183761663_3 = GetSymbCount(Text_183761663_3);
if(Symb_183761663_3 != OldSymb_183761663_3)
{
lcd.setCursor(0, 2);
lcd.print(" ");
OldSymb_183761663_3 = Symb_183761663_3;
}
lcd.setCursor(Symb_183761663_3, 2);
lcd.print(Text_183761663_3);
lcd.print(" ");
}
else
{
Symb_183761663_3 = 0;
lcd.setCursor(Symb_183761663_3, 2);
lcd.print(Text_183761663_3);
}
}
_GSFS7 = (_gtv2).substring((60), (80));
EN_183761663_4 = 1;
Text_183761663_4 = _GSFS7;
if(EN_183761663_4)
{
if(TextCenterControl_183761663_4==0)
{
Symb_183761663_4 = GetSymbCount(Text_183761663_4);
if(Symb_183761663_4 != OldSymb_183761663_4)
{
lcd.setCursor(0, 3);
lcd.print(" ");
OldSymb_183761663_4 = Symb_183761663_4;
}
lcd.setCursor(Symb_183761663_4, 3);
lcd.print(Text_183761663_4);
lcd.print(" ");
}
else
{
Symb_183761663_4 = 0;
lcd.setCursor(Symb_183761663_4, 3);
lcd.print(Text_183761663_4);
}
}
}
}
ISR(TIMER2_OVF_vect)
{
TCNT2=100;
if(_PWDC >= 1000)
{
asm volatile ("jmp 0x0000");
}
else
{
_PWDC = _PWDC+1;
}
;
}
void _readByteFromUART(byte data,int port)
{
if (port==0)
{
_RVFU1Data += char(data);
}
}
double GetSymbCount(String Text2Symb)
{
int i = 0;
int TextLength = 0;
int SymbCount = 0;
while (Text2Symb[i] != '\0')
{
if (Text2Symb[i] < ' ') i=i+2;
else i++;
TextLength++;
}
SymbCount = ((16 - TextLength)/2);
return SymbCount;
}
void _startUart0()
{
int code= 6;
Serial.begin(19200, (_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;
}