#define REMOTEXY_MODE__HARDSERIAL
#include <RemoteXY.h>
#include <LiquidCrystal_strela.h>
#include <Servo.h>
#include <Strela.h>
#include <Wire.h>
#include <Strela.h>
#include <LiquidCrystal_I2C.h>
Servo _SM1;
#define REMOTEXY_SERIAL Serial1
#define REMOTEXY_SERIAL_SPEED 9600
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] = {255, 7, 0, 63, 0, 104, 0, 10, 13, 0, 67, 5, 9, -1, 98, 10, 94, 13, 61, 4, 0, 1, 12, 13, 51, 246, 26, 4, 176, 15, 46, 90, 16, 149, 26, 3, 131, 18, 9, 52, 19, 94, 178, 2, 0, 47, 33, 22, 11, 12, 64, 31, 31, 208, 158, 208, 177, 209, 133, 0, 208, 161, 209, 130, 209, 128, 0, 1, 0, 81, 9, 19, 19, 1, 31, 68, 0, 1, 0, 78, 32, 13, 13, 246, 31, 208, 159, 0, 2, 1, 19, 33, 22, 11, 31, 26, 8, 8, 208, 164, 0, 208, 158, 0, 69, 0, 1, 1, 10, 10, 1};
struct {
signed char skorost;
signed char povorot;
unsigned char stop_vpered;
unsigned char str_obh;
unsigned char pusk;
unsigned char pulem;
unsigned char fari;
char text_1[61];
int16_t sound_1;
unsigned char connect_flag;
} RemoteXY;
#pragma pack(pop)
String str1_203287677_1;
String str2_203287677_1;
// Подключим библиотеку для работы с I2C-расширителем портов
// Подключим библиотеку Strela
// Подключим библиотеку для работы с LCD-эраном через I2C
// Создадим объект lcd, который будет выводить текст на экран
LiquidCrystal_I2C lcd_203287677_1(LC_ADDR, LCEN, LCRW, LCRS, LC4, LC5, LC6, LC7);
String str1_prom_203287677_1;
String str2_prom_203287677_1;
int M1_15497950_1;
int M2_15497950_1;
// Подключим библиотеку для работы с I2C-расширителем портов
// Подключим библиотеку Strela
String _gtv1;
bool _gtv2;
bool _gtv3;
bool _gtv4;
int _gtv5;
int _gtv6;
int _gtv7;
int _gtv8;
bool _gtv9;
bool _gtv10;
bool _gtv11;
bool _gtv12;
int _swi1;
bool _gen6I = 0;
bool _gen6O = 0;
unsigned long _gen6P = 0UL;
bool _pzs1OES = 0;
bool _gen2I = 0;
bool _gen2O = 0;
unsigned long _gen2P = 0UL;
int _swi5;
bool _gen4I = 0;
bool _gen4O = 0;
unsigned long _gen4P = 0UL;
int _swi4;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
bool _gen3I = 0;
bool _gen3O = 0;
unsigned long _gen3P = 0UL;
bool _gen5I = 0;
bool _gen5O = 0;
unsigned long _gen5P = 0UL;
int _ultrasonic1O = 0;
unsigned long _ultrasonic1P = 0UL;
int _mux1;
int _swi2;
bool _gen7I = 0;
bool _gen7O = 0;
unsigned long _gen7P = 0UL;
int _swi6;
int _swi3;
bool _tim2I = 0;
bool _tim2O = 0;
unsigned long _tim2P = 0UL;
void setup()
{
pinMode(18, OUTPUT);
digitalWrite(18, 0);
pinMode(19, OUTPUT);
digitalWrite(19, 0);
pinMode(6, OUTPUT);
digitalWrite(6, 0);
pinMode(8, OUTPUT);
digitalWrite(8, 0);
RemoteXY_Init ();
_SM1.attach(5);
pinMode(11, OUTPUT);
pinMode(13, INPUT);
//Инициализация экрана. У нашего экрана 8 символов 2 строки
lcd_203287677_1.begin(8, 2);
//Переместим курсор в начало первой стройки (символ 0, строка 0)
lcd_203287677_1.home();
//Печатаем строку
lcd_203287677_1.print("Hello");
//Переместим строку в начало второй строки (символ 0, строка 1)
lcd_203287677_1.setCursor(0, 1);
//Печатаем строку
lcd_203287677_1.print("World!");
//Пауза, чтобы успеть насладиться результатом
delay(2000);
lcd_203287677_1.clear();
}
void loop()
{
RemoteXY_Handler ();
//Плата:1
if (abs((millis() - _ultrasonic1P))>100) {
digitalWrite(11, HIGH);
delayMicroseconds(10);
digitalWrite(11, LOW);
int _ultrasonicTemp=(pulseIn(13, HIGH))/58;
if( _ultrasonicTemp<200) {_ultrasonic1O=_ultrasonicTemp;}
_ultrasonic1P=millis();}
if(_gtv3) {_tim2O = 1; _tim2I = 1;} else { if(_tim2I) {_tim2I = 0; _tim2P = millis();} else { if (_tim2O) {if ( _isTimer(_tim2P, 3000)) _tim2O = 0;}}}
digitalWrite(6, ( (_tim2O) || (_gtv11) ));
if(_tim2O)
{_swi3=170;}
else
{_swi3=(-10)+(_gtv7);}
if (!(0)) {_SM1.write (_swi3);}
str1_203287677_1 = ((String("L=")) + ((String((_ultrasonic1O), DEC))) + (String(" ")) + (String("V=")) + ((String(_gtv6, DEC))) + (String(" ")) + (String("P=")) + ((String((-10)+(_gtv7), DEC))));
str2_203287677_1 = String("");
if (str1_prom_203287677_1!=str1_203287677_1) {
lcd_203287677_1.begin(8, 2); // выставляем курсор в положение 0, 0
lcd_203287677_1.setCursor(0, 0); // Пишем первую строку
lcd_203287677_1.print(str1_203287677_1);
str1_prom_203287677_1=str1_203287677_1;
lcd_203287677_1.setCursor(0, 1);
lcd_203287677_1.print(str2_203287677_1);}
if (str2_prom_203287677_1!=str2_203287677_1) {
lcd_203287677_1.begin(8, 2);
lcd_203287677_1.setCursor(0, 1);
lcd_203287677_1.print(str2_203287677_1); // Пишем вторую строку
str2_prom_203287677_1=str2_203287677_1;
lcd_203287677_1.setCursor(0, 0);
lcd_203287677_1.print(str1_203287677_1);}
_gtv1 = ((String("L=")) + ((String((_ultrasonic1O), DEC))) + (String(" ")) + (String("V=")) + ((String(_gtv6, DEC))) + (String(" ")) + (String("P=")) + ((String((-10)+(_gtv7), DEC))));
_gtv3 = ( (((_ultrasonic1O)) <= (60)) && (_gtv4) );
_gtv2 = ((_ultrasonic1O)) <= (25);
if ((_gtv7) <= (70)) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = millis(); } } else { _gen1I = 0 ; _gen1O= 0;}
if (_gen1I) { if ( _isTimer ( _gen1P , 250 )) { _gen1P = millis(); _gen1O = ! _gen1O;}}
digitalWrite(19, _gen1O);
if ((_gtv7) >= (100)) { if (! _gen3I) { _gen3I = 1; _gen3O = 1; _gen3P = millis(); } } else { _gen3I = 0 ; _gen3O= 0;}
if (_gen3I) { if ( _isTimer ( _gen3P , 250 )) { _gen3P = millis(); _gen3O = ! _gen3O;}}
digitalWrite(18, _gen3O);
(_gtv1).toCharArray((RemoteXY.text_1), 61);
RemoteXY.sound_1 = _gtv5;
_gtv11 = (RemoteXY.fari);
_gtv10 = (RemoteXY.pulem);
_gtv9 = (RemoteXY.pusk);
_gtv4 = (RemoteXY.str_obh);
_gtv8 = (RemoteXY.stop_vpered);
_gtv7 = (map(((RemoteXY.povorot)), (-100), (100), (0), (155)));
_gtv6 = (map(((RemoteXY.skorost)), (0), (100), (0), (255)));
if((_gtv8) == 0) {_mux1 = 0;}
if((_gtv8) == 1) {_mux1 = _gtv6;}
if((_gtv8) == 2) {_mux1 = (_gtv6)*(-1);}
digitalWrite(6, ( ((_gtv8) == (1)) && (_gtv2) && (!(_gtv4)) ));
if (( (_gtv10) || (( ((_gtv8) == (1)) && (_gtv2) && (!(_gtv4)) )) )) {if (! _gen6I){_gen6I = 1; _gen6O = 1; _gen6P = millis();}} else { _gen6I = 0 ; _gen6O= 0; } if (_gen6I && _gen6O) _gen6O = !( _isTimer( _gen6P , 5000 ));
if(_gen6O)
{_swi5=1;}
else
{_swi5=0;}
_gtv5 = _swi5;
if (( (_gtv10) || (( ((_gtv8) == (1)) && (_gtv2) && (!(_gtv4)) )) )) {if (! _gen4I){_gen4I = 1; _gen4O = 1; _gen4P = millis();}} else { _gen4I = 0 ; _gen4O= 0; } if (_gen4I && _gen4O) _gen4O = !( _isTimer( _gen4P , 1000 ));
if(_gen4O)
{_swi2=180;}
else
{_swi2=0;}
if(( ((_gtv8) == (1)) && (_gtv2) && (!(_gtv4)) ))
{_swi1=0;}
else
{_swi1=_mux1;}
if(_gtv9)
{_swi4=_swi1;}
else
{_swi4=0;}
if ((_swi4) == (0)) {if (! _gen5I){_gen5I = 1; _gen5O = 1; _gen5P = millis();}} else { _gen5I = 0 ; _gen5O= 0; } if (_gen5I && _gen5O) _gen5O = !( _isTimer( _gen5P , 4000 ));
digitalWrite(8, _gen5O);
if (_gtv12) {if (! _gen7I){_gen7I = 1; _gen7O = 1; _gen7P = millis();}} else { _gen7I = 0 ; _gen7O= 0; } if (_gen7I && _gen7O) _gen7O = !( _isTimer( _gen7P , 500 ));
if(_gen7O)
{_swi6=(_swi4)*(1.75);}
else
{_swi6=_swi4;}
_gtv12 = (0) != (_swi6);
M1_15497950_1 = _swi6;
M2_15497950_1 = _swi2;
drive(M1_15497950_1, M2_15497950_1);
if (( ((_gtv8) == (1)) && (_gtv2) && (!(_gtv4)) )) {if (! _gen2I) { _gen2I = 1; _gen2O = 1; _gen2P = millis(); } } else { _gen2I = 0 ; _gen2O= 0; } if (_gen2I ) { if (_gen2O) { if ( _isTimer( _gen2P , 400 )) { _gen2P = millis(); _gen2O = 0; } } else { if ( _isTimer( _gen2P , 200 )) { _gen2P = millis(); _gen2O = 1; } } }
if(_gen2O)
{if((!_pzs1OES)){ tone(12, 400); _pzs1OES =1;}} else {if(_pzs1OES){noTone(12); _pzs1OES =0; }}
}
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));}
}